写点什么

昇腾 AI 行业案例(五):基于 DANet 和 Deeplabv3 模型的遥感图像分割

作者:AI布道Mr.Jin
  • 2025-01-22
    上海
  • 本文字数:10907 字

    阅读完需:约 36 分钟

昇腾AI行业案例(五):基于 DANet 和 Deeplabv3 模型的遥感图像分割

00 - 前言

欢迎学习《基于 DANet 和 Deeplabv3 模型的遥感图像分割》实验。在本实验中,你将深入了解如何运用计算机视觉(CV)领域的 AI 模型,搭建一个高效精准的遥感地图区域分割系统,并利用开源数据集和昇腾 AI 芯片对模型效果加以验证。


学习目标

在本课程中,您将学习一些与使用 AI 图像处理技术实现地图分割检测有关的重要概念,包括:

  • 遥感图像数据的预处理方法

  • 采用图像分割模型对图像的不同区域进行标识的方法

  • 图像分割的后处理方法

  • 端到端深度学习工作流


目录

本实验分为四个核心部分。第一部分主要介绍案例的应用场景,阐述遥感影像地块分割的重要性及意义;第二部分会详细阐述端到端的解决方案,搭建起技术实现的整体框架;第三部分会手把手指导您完成代码编写与实现;最后一部分给出测试题,帮助您巩固学习内容。

  1. 场景介绍

  2. 解决方案

  3. 代码实战

  4. 课后测试

JupyterLab

在本实操实验中,我们将使用 JupyterLab 管理我们的环境。JupyterLab 界面是一个控制面板,可供您访问交互式 iPython Notebook、所用环境的文件夹结构,以及用于进入 Ubuntu 操作系统的终端窗口,只需要点击菜单栏的小三角就可以运行代码。

尝试执行下方单元中的一条简单的 print(打印)语句。

# DO NOT CHANGE THIS CELL# activate this cell by selecting it with the mouse or arrow keys then use the keyboard shortcut [Shift+Enter] to executeprint('This is just a simple print statement')
复制代码


This is just a simple print statement
复制代码

01 场景介绍

遥感图像在众多领域有着广泛的应用,如土地利用分类、城市规划、农业监测、环境评估、灾害监测等。然而,原始的遥感图像数据量大且复杂,其中包含了各种地物信息,如建筑物、道路、水体、植被、农田等,这些地物在图像上呈现出不同的特征和模式。准确地将这些地物从遥感图像中分割出来,对于后续的分析和决策具有至关重要的意义。


例如,在城市规划中,通过对遥感图像的分割,可以清晰地了解城市的建筑分布、道路网络以及绿地面积等信息,从而为合理规划城市布局、优化基础设施建设提供有力依据。在农业监测方面,能够精确地识别出农田的范围和农作物的类型,有助于评估农作物的生长状况、预测产量以及实施精准农业管理。在灾害监测领域,如洪水、火灾等灾害发生时,及时对遥感图像进行分割,可以快速确定受灾区域的范围和程度,为救援工作提供关键的信息支持。


传统的遥感图像分割方法主要包括基于阈值的方法、基于边缘检测的方法和基于区域生长的方法等。这些方法在一定程度上能够实现地物的分割,但存在着分割精度不高、对复杂场景适应性差、需要人工干预等局限性。随着人工智能技术,尤其是深度学习的快速发展,基于 AI 的遥感图像分割方法展现出了强大的优势,AI 模型能够自动学习图像中的特征模式,实现更加准确和高效的地物分割,为各领域的应用提供了更可靠的技术手段。

02 解决方案

本实验教程使用的解决方案如下,首先对原始图像进行预处理,使得图像数据符合 AI 模型的输入要求,然后使用图像分割模型进行推理,预测每个像素点的地形分类标签,最后进行后处理,把分割的区域可视化标记出来。


以下分别介绍这几个核心模块。

2.1 图像预处理模块

原始的遥感影像往往包含着各种复杂的信息,直接用于地块分割可能会导致较低的准确性和效率。因此,我们首先对其进行预处理操作,其中一项重要的处理是将图像转换为 YUV 格式。

YUV 格式相较于常见的 RGB 格式,在颜色信息的表示上具有独特的优势。通过将亮度(Y)与色度(U 和 V)信息分离,能够更好地突出图像中的物体轮廓和细节特征,为后续的模型处理提供更加清晰和易于分析的数据基础。在转换过程中,我们运用专业的图像转换算法,确保图像的色彩信息得以准确保留,同时优化了亮度和色度的分布,使得地块与周围环境的对比度增强,从而有效提升了后续模型对地块特征的提取能力,为精准分割奠定了坚实的基础。

2.2 图像分割模型

在数据预处理之后,我们借助先进的图像分割模型 DANet 和 DeepLabV3 进行推理操作,以实现对每个像素点的准确分类,这是整个解决方案的核心环节。


DANet 模型通过其创新性的双注意力机制,包括位置注意力模块和通道注意力模块,能够在复杂的遥感影像中精准地聚焦于地块的关键特征区域。位置注意力模块能够捕捉图像中不同位置像素之间的长距离依赖关系,使得模型在处理大面积地块以及具有复杂边界的地块时,能够更好地理解地块的整体结构和连续性。而通道注意力模块则对不同特征通道进行权重分配,突出对地块分割有重要贡献的特征通道,从而提高模型对地块类别特征的识别能力,尤其是对于不同类型的地块(如农田、建筑用地、水域等),能够更加准确地区分其细微差异,实现精准分类。


DeepLabV3 模型则采用了空洞卷积(atrous convolution)和空间金字塔池化技术,进一步提升了对遥感影像多尺度特征的提取能力。空洞卷积能够在不增加计算量和参数量的前提下,扩大卷积核的感受野,使模型能够同时获取到地块的局部细节信息和全局语义信息。空间金字塔池化则通过对不同尺度的特征图进行池化操作,将多尺度信息进行融合,从而增强了模型对不同大小地块的适应性。在推理过程中,DeepLabV3 模型能够准确地识别出地块的边界和内部区域,即使在面对影像中存在的噪声、遮挡以及复杂地形地貌等情况时,依然能够保持较高的分割准确性和稳定性。

我们通过同时运用这两个强大的模型进行推理,并将它们的输出结果进行融合,充分发挥了两者的优势,实现了对遥感影像地块的全面、准确且细致的分割,极大地提高了像素点分类的精度和可靠性。

2.3 后处理模块

经过模型推理得到的初步分割结果,虽然蕴含了地块的基本分类信息,但还需要经过一系列的后处理操作,才能转化为更具实际应用价值且易于直观理解的最终地块分割成果。在此阶段,我们主要借助以下几个关键函数来完成相应的后处理任务。


首先是 semantic_to_mask 函数,它在将模型推理输出的语义图转换为标签图。在遥感影像地块分割的场景中,模型推理得到的结果往往是以语义图的形式呈现,即每个像素点对应着各类别的概率分布情况(mask 参数所代表的语义图)。而我们设定了 8 种语义标签(labels 参数所代表的 8 种语义标签)来对地块及相关地物进行分类标识,例如可能包含 water(水域)road(道路)buildings(建筑物) 等不同类别。semantic_to_mask 函数通过 np.argmax 操作,沿着特定的维度(这里是 axis=1)选取每个像素位置上概率最大的类别索引,然后依据预先设定好的标签编码(label_codes)进行替换,最终返回经过标签替换后的最大概率预测结果,也就是将原本基于概率分布的语义表示转化为了明确的类别标签表示,使得每个像素都有了唯一对应的地块或地物类别,为后续进一步处理提供了清晰的类别依据。


接着,decode_seg_map 函数负责把经过 semantic_to_mask 函数处理后的标签图映射为可视化的彩色图像。它可以将标签图中对应类别的像素位置赋予相应的颜色值,分别对红(r)、绿(g)、蓝(b)三个颜色通道进行赋值操作。随后,将处理后的颜色通道数据组合起来,构建出符合 RGB 图像格式要求的三维数组(rgb),从而实现了将以标签形式表示的分割结果转化为彩色图像的过程,使得我们可以直观地看到不同地块和地物在遥感影像中的分布情况,便于进行可视化的分析和展示。



最后,final_result_create 函数聚焦于对生成的彩色分割结果图像进行更全面的后处理及保存工作。通过这一系列函数实现的后处理步骤,我们有效地将模型推理得到的原始结果转化为了高质量、可视化且易于解读的地块分割成果,这些成果能够直接应用于城市规划、土地资源管理等众多实际领域,为相关决策提供准确、直观的数据支持,充分发挥遥感影像地块分割在各行业中的应用价值。

03 动手实验

3.1 实验准备

数据集


实验所用的测试图像数据源自gitee项目,该数据集包含了 15 张遥感俯拍图,每张都包含了道路、建筑、植被等区域。本实验把数据集下载后取样存放于当前目录下的 ./test_set 目录中,方便后续代码进行读取和处理。


模型权重


本实验采用的 DANetDeeplabv3 模型需要从这个链接下载,里面包含了 onnx 格式的模型,我们后续将会用到。

3.2 图像预处理

参考原项目configure.cfg 文件,可以知道模型的输入图像格式为 YUV420SP_U8 ,含义如下:


YUV:颜色编码方式,YUV 是一种颜色模型,它将颜色信息分为亮度(Y)和色度(U, V)两部分。这种编码方式在图像和视频压缩中非常常见,因为它可以更有效地表示颜色信息,并且允许单独压缩亮度和色度分量。


420:色度采样(Chroma Subsampling),420 表示色度信息的采样率。在 YUV420 中,U 和 V 分量的采样率是亮度分量的一半。具体来说,对于每四个 Y 值,只有一个 U 和一个 V 值。这种采样方式减少了色度信息的数量,可以在保持图像质量的同时减少数据量。


SP:Semi-Planar 的缩写,指的是色度分量的存储方式。在 YUV420SP 格式中,U 和 V 分量交错存储(交错是指在行或列上相邻存储),而不是分开存储。这意味着 U 和 V 分量不是完全独立的两个平面,而是交错在一起。


U8:数据类型,U8 表示每个颜色分量(Y、U、V)使用 8 位无符号整数(0-255)来存储。这表示每个颜色值可以用一个字节来表示。


所以我们需要把原始的 jpg 图像进行预处理,才能传给 AI 模型。第一步,导入所需的三方库:


import numpy as npimport cv2
复制代码


接着,创建图像预处理函数:


def img_process(img_path):    image = cv2.imread(img_path)    # 将图片从BGR颜色空间转换为YUV颜色空间    yuv_image = cv2.cvtColor(image, cv2.COLOR_BGR2YUV)    # 获取图片的尺寸    height, width = yuv_image.shape[:2]    # 分离Y, U, V分量    y, u, v = cv2.split(yuv_image)    # 将U和V分量下采样到4:2:0    u = cv2.resize(u, (width // 2, height // 2), interpolation=cv2.INTER_LINEAR)    v = cv2.resize(v, (width // 2, height // 2), interpolation=cv2.INTER_LINEAR)    # 交错UV分量,形成NV12格式    uv = np.zeros((height // 2, width), dtype=yuv_image.dtype)    uv[:, 0::2] = u    uv[:, 1::2] = v    # 将Y分量和交错的UV分量合并    image = np.concatenate((y, uv), axis=0)    return image
复制代码


完成数据类的定义后,我们可以对其进行测试,读取并预处理图像:


source = "./test_set/test_15.jpg"process_data = img_process(source)print(process_data.shape)
复制代码


(3, 480, 640)(3, 480, 640)(3, 480, 640)(3, 480, 640)(3, 480, 640)(3, 480, 640)(3, 480, 640)
复制代码

3.3 使用 DANet 和 Deeplabv3 模型进行分割预测

对于一个长宽为 (w, h) 的图像,DANet 和 Deeplabv3 模型的输出 shape 为 (8, w, h),代表每个像素点在 8 种地形上的分类置信度,这 8 种地形分别为 water, road, buildings, tree, grass, cultivated_land, soil, others。我们会把这两个模型的预测结果叠加起来,使得检测结果更加准确。


首先,我们需要把下载的 onnx 格式的模型转成能在昇腾硬件上运行的 om 格式的模型,命令如下:


# atc --framework=5 --model=../models/DANet.onnx  --output=../models/DANet --soc_version=芯片型号 --insert_op_conf=./configure.cfg --log=error# atc --framework=5 --model=../models/Deeplabv3.onnx  --output=../models/Deeplabv3 --soc_version=芯片型号 --insert_op_conf=./configure.cfg --log=error# config 文件下载地址: https://gitee.com/ascend/mindxsdk-referenceapps/blob/master/contrib/RemoteSensingSegmentation/config/configure.cfg
复制代码


然后我们构建 om 模型的推理类:


import acl
ACL_MEM_MALLOC_HUGE_FIRST = 0ACL_MEMCPY_HOST_TO_DEVICE = 1ACL_MEMCPY_DEVICE_TO_HOST = 2
class OmModel: def __init__(self, model_path): # 初始化函数 self.device_id = 5
# step1: 初始化 ret = acl.init() # 指定运算的Device ret = acl.rt.set_device(self.device_id)
# step2: 加载模型,本示例为pfld模型 # 加载离线模型文件,返回标识模型的ID self.model_id, ret = acl.mdl.load_from_file(model_path) # 创建空白模型描述信息,获取模型描述信息的指针地址 self.model_desc = acl.mdl.create_desc() # 通过模型的ID,将模型的描述信息填充到model_desc ret = acl.mdl.get_desc(self.model_desc, self.model_id)
# step3:创建输入输出数据集 # 创建输入数据集 self.input_dataset, self.input_data = self.prepare_dataset('input') # 创建输出数据集 self.output_dataset, self.output_data = self.prepare_dataset('output')
def prepare_dataset(self, io_type): # 准备数据集 if io_type == "input": # 获得模型输入的个数 io_num = acl.mdl.get_num_inputs(self.model_desc) acl_mdl_get_size_by_index = acl.mdl.get_input_size_by_index else: # 获得模型输出的个数 io_num = acl.mdl.get_num_outputs(self.model_desc) acl_mdl_get_size_by_index = acl.mdl.get_output_size_by_index # 创建aclmdlDataset类型的数据,描述模型推理的输入。 dataset = acl.mdl.create_dataset() datas = [] for i in range(io_num): # 获取所需的buffer内存大小 buffer_size = acl_mdl_get_size_by_index(self.model_desc, i) # 申请buffer内存 buffer, ret = acl.rt.malloc(buffer_size, ACL_MEM_MALLOC_HUGE_FIRST) # 从内存创建buffer数据 data_buffer = acl.create_data_buffer(buffer, buffer_size) # 将buffer数据添加到数据集 _, ret = acl.mdl.add_dataset_buffer(dataset, data_buffer) datas.append({"buffer": buffer, "data": data_buffer, "size": buffer_size}) return dataset, datas
def forward(self, inputs): # 执行推理任务 # 遍历所有输入,拷贝到对应的buffer内存中 input_num = len(inputs) for i in range(input_num): bytes_data = inputs[i].tobytes() bytes_ptr = acl.util.bytes_to_ptr(bytes_data) # 将图片数据从Host传输到Device。 ret = acl.rt.memcpy(self.input_data[i]["buffer"], # 目标地址 device self.input_data[i]["size"], # 目标地址大小 bytes_ptr, # 源地址 host len(bytes_data), # 源地址大小 ACL_MEMCPY_HOST_TO_DEVICE) # 模式:从host到device # 执行模型推理。 ret = acl.mdl.execute(self.model_id, self.input_dataset, self.output_dataset) # 处理模型推理的输出数据,输出top5置信度的类别编号。 inference_result = [] for i, item in enumerate(self.output_data): buffer_host, ret = acl.rt.malloc_host(self.output_data[i]["size"]) # 将推理输出数据从Device传输到Host。 ret = acl.rt.memcpy(buffer_host, # 目标地址 host self.output_data[i]["size"], # 目标地址大小 self.output_data[i]["buffer"], # 源地址 device self.output_data[i]["size"], # 源地址大小 ACL_MEMCPY_DEVICE_TO_HOST) # 模式:从device到host # 从内存地址获取bytes对象 bytes_out = acl.util.ptr_to_bytes(buffer_host, self.output_data[i]["size"]) # 按照float32格式将数据转为numpy数组 data = np.frombuffer(bytes_out, dtype=np.float32) inference_result.append(data) return inference_result
def __del__(self): # 析构函数 按照初始化资源的相反顺序释放资源。 # 销毁输入输出数据集 for dataset in [self.input_data, self.output_data]: while dataset: item = dataset.pop() ret = acl.destroy_data_buffer(item["data"]) # 销毁buffer数据 ret = acl.rt.free(item["buffer"]) # 释放buffer内存 ret = acl.mdl.destroy_dataset(self.input_dataset) # 销毁输入数据集 ret = acl.mdl.destroy_dataset(self.output_dataset) # 销毁输出数据集 # 销毁模型描述 ret = acl.mdl.destroy_desc(self.model_desc) # 卸载模型 ret = acl.mdl.unload(self.model_id) # 释放device ret = acl.rt.reset_device(self.device_id) # acl去初始化 ret = acl.finalize()
复制代码


现在测试一下模型的推理结果


# 加载模型da_net_om_model_path = "./models/DANet.om"da_net_om_model = OmModel(da_net_om_model_path)deeplab_om_model_path = "./models/Deeplabv3.om"deeplab_om_model = OmModel(deeplab_om_model_path)# 推理output_res_DANet = da_net_om_model.forward([process_data])output_res_Deeplab = deeplab_om_model.forward([process_data])tensor_res_DANet = output_res_DANet[0].reshape(1, 8, 256, 256)  # 模型的输出shape是 (1, 8, 256, 256)tensor_res_Deeplab = output_res_Deeplab[0].reshape(1, 8, 256, 256)  # 模型的输出shape是 (1, 8, 256, 256)print(output_res_DANet.shape)print(output_res_Deeplab.shape)
复制代码

3.4 后处理函数

正如前面提到的,模型的输出结果是各个像素点分类为不同地形的置信度,我们还需要把分类结果转换成分类标签、融合两个模型的预测结果、构建不同颜色表示的区域分割图片。这一系列操作对应下面的后处理函数:


首先是预测结果融合:


def softmax(x):    """        Compute softmax values for each sets of scores in x.        Args:            matrix x        Returns:            softmax values for x    """    mx = np.max(x, axis=1, keepdims=True)    numerator = np.exp(x - mx)    denominator = np.sum(numerator, axis=1, keepdims=True)    return numerator / denominator
pred_DANet = softmax(tensor_res_DANet)pred_Deeplab = softmax(tensor_res_Deeplab)pred_final = pred_Deeplab + pred_DANet
复制代码


然后是转化成分类标签:


def semantic_to_mask(mask, labels):    """        Turn Semantic diagram to label diagram        Args:            mask: semantic diagram            labels: 8 kinds of semantic tags        Returns:            the maximum probability prediction result after label replacement    """    x = np.argmax(mask, axis=1)    label_codes = np.array(labels)    x = np.uint16(label_codes[x.astype(np.uint8)])    return x
复制代码


生成区域分割表示图:


def decode_seg_map(label_mask, labels, label_colours):    """        The result is mapped to a picture        Args:            label_mask: the maximum probability prediction result after label replacement            labels: 8 kinds of semantic tags            label_colours: colors corresponding to 8 semantic tags        Returns:            the prediction result after color replacement    """    r = label_mask.copy()    g = label_mask.copy()    b = label_mask.copy()    for i, label in enumerate(labels):        r[label_mask == label] = label_colours[i, 0]        g[label_mask == label] = label_colours[i, 1]        b[label_mask == label] = label_colours[i, 2]    rgb = np.zeros((label_mask.shape[0], label_mask.shape[1], 3))    rgb[:, :, 0] = r / 255.0    rgb[:, :, 1] = g / 255.0    rgb[:, :, 2] = b / 255.0    return rgb
复制代码


最后是给不同区域打上文字标签,并且保存图片:


def final_result_create(final_res_pic, label_colours, save_path):    """        Result image post-processing        Args:            final_res_pic: the prediction result after color replacement            label_colours: colors corresponding to 8 semantic tags        Returns:            null        Output:            a result picture in directory result/temp_result/result.jpg    """
tmp_rgb = np.array(label_colours) / 255.0 ic_map = mpl.colors.ListedColormap(tmp_rgb, name='my_color') # Normalize the data to an interval of [0, 8] norm = mpl.colors.Normalize(vmin=0, vmax=8) # the size of result picture setting plt.figure(figsize=(5, 4)) h = plt.imshow(final_res_pic, cmap=ic_map, norm=norm) c_bar = plt.colorbar(mappable=h) # Return evenly spaced numbers over a specified interval v = np.linspace(0, 7, 8) # Set the location and properties of the ticks c_bar.set_ticks((v + 0.5)) # Set the label of the ticks c_bar.set_ticklabels(['water', 'road', 'buildings', 'tree', 'grass', 'cultivated_land', 'soil', 'others']) plt.savefig(save_path) plt.close()
复制代码


此外,为了比较原图和分割结果,还需要保存原图和分割结果的对比图:


def enable_contrast_output(arr):    """        Enable comparison graph output        Args:            arr: arr[0] is the img one, arr[1] is the img two, arr[2] is the output directory of the comparison graph result        Returns:            null        Output:            a comparison graph result in arr[2]    """    img1 = Image.open(arr[0])    img12 = Image.open(arr[1])    # create a new image, set the width and height    toImage = Image.new('RGB', (img1.width + img12.width + 35, img12.height), 'white')    # paste image1 to the new image, and set the position    toImage.paste(img1, (35, 80))    # paste image2 to the new image, and set the position    toImage.paste(img12, (img1.width + 35, 0))    # save the result image, and the quality is 100    toImage.save(arr[2], quality=100)
复制代码


好了,完成这些后,我们就可以开始进行端到端的图像分割实验了!

3.5 整合代码实现端到端检测

我们把前面创建的预处理函数、模型推理代码和后处理函数组合起来,形成下面的流程:


import osimport globfrom pathlib import Pathfrom matplotlib import pyplot as plt
img_dir = "./test_set/"save_path = "./result/"imgs_path = glob.glob(str(Path(img_dir).resolve()) + '/*.*')# 8 kinds of semantic tagslabels = [100, 200, 300, 400, 500, 600, 700, 800]# Colors corresponding to 8 semantic tagslabel_colours = np.array( [[255, 127, 39], [255, 202, 24], [236, 28, 36], [14, 209, 69], [184, 61, 186], [0, 168, 243], [88, 88, 88], [253, 236, 166]])if os.path.exists(img_dir) != 1: print("The test image " + str(img_dir) + " does not exist.") exit()for img_path in imgs_path: img_name = img_path.split("/")[-1] segment_save_path = save_path + "seg_" + img_name compare_save_path = save_path + "compare_" + img_name
image = img_process(img_path)
# Get the result of the DANet model output_res_DANet = da_net_om_model.forward([image]) output_res_Deeplab = deeplab_om_model.forward([image]) if output_res_DANet == [] or output_res_Deeplab == []: continue # reshape the matrix to (1, 8, 256, 256) tensor_res_DANet = output_res_DANet[0].reshape(1, 8, 256, 256) pred_DANet = softmax(tensor_res_DANet)
# Get the result of the Deeplab_v3 model # reshape the matrix to (1, 8, 256, 256) tensor_res_Deeplab = output_res_Deeplab[0].reshape(1, 8, 256, 256) pred_Deeplab = softmax(tensor_res_Deeplab)
pred_final = pred_Deeplab + pred_DANet
# Semantic diagram to label diagram pred_final = semantic_to_mask(pred_final, labels).squeeze().astype(np.uint16) # The result is mapped to a picture rgb_res_pic = decode_seg_map(pred_final, labels, label_colours) # Result image post-processing final_result_create(rgb_res_pic, label_colours, segment_save_path) # Enable comparison graph output if true enable_contrast_output([img_path, segment_save_path, compare_save_path]) print('success!')
复制代码


查看一张分割结果对比图,可以看出基本上把房屋、导入和植物都分割出来了:



恭喜你!至此,你已经成功完成了基于 DANet 和 Deeplabv3 模型的遥感图像分割的全部实验流程,希望你能够熟练掌握这套技术方案,并将其应用到实际的遥感地图分析项目中去!

3.6 依赖软件

本实验的依赖软件版本信息如下:


  1. Python:为了方便开发者进行学习,本课程采用 Python 代码实现,您可以在服务器上安装一个 Conda,用于创建 Python 环境,本实验使用的是 python 3.10

  2. pillow:Python 的图像处理库,本实验使用的是 11.0.0 版本;

  3. opencv-python:opencv-python 是 OpenCV 库的 Python 接口,它提供了对 OpenCV 功能的访问,包括图像处理、视频分析、计算机视觉算法和实时图像处理等,使得开发者能够在 Python 环境中轻松实现复杂的视觉任务,本实验使用的是 4.10.0.84 版本;

  4. numpy: 开源的 Python 科学计算库,用于进行大规模数值和矩阵运算,本实验使用的是 1.26.4 版本;

  5. matplotlib: 用于创建各种静态、动态和交互式的可视化图表,能将数据以直观的图形方式展示出来,本实验使用的是 3.9.2 版本;

  6. CANN(Compute Architecture for Neural Networks):Ascend 芯片的使能软件,本实验使用的是 8.0.rc2 版本

04 课后测试

  1. 尝试用更大的图片进行测试,观察分割检测结果;

  2. 尝试只用 DANet 或者 DeepLabv3 模型进行检测,观察检测结果。


发布于: 刚刚阅读数: 3
用户头像

还未添加个人签名 2020-11-13 加入

还未添加个人简介

评论

发布
暂无评论
昇腾AI行业案例(五):基于 DANet 和 Deeplabv3 模型的遥感图像分割_AI布道Mr.Jin_InfoQ写作社区