ArcGIS Pro制作遥感影像深度学习样本

随着人工智能的不断发展,深度学习被利用的越来越广泛。但是在使用神经网络进行训练之前最重要的是要有良好的数据集,而给数据集做标注则需要花费大量的人力。
如何利用高空间分辨率的无人机影像或遥感影像来创建一个合适的数据集?对大量的影像进行标注的工作是必不可少的,但是现在流行的图像标注软件,例如labelimg、labelme等软件并不适合遥感影像数据集的标注工作。原因有二:一是主流的标注软件是在已经裁剪好的图片进行打标签,而遥感影像要保证样本的数据量通常需要设置比较高的重叠度去对影像裁剪,这就使得我们如果用labelimg去打标签的话,同一个样本需要打多次标签,这无疑增加了很多工作量;二是,对于同一个地方的遥感影像通常会有多时段的数据样本,这样如果我们每次都按照传统的打标签方法会导致工作量成倍数增长。
因此,如果我们使用Arcgis Pro对遥感影像进行标注能够很好的帮我们解决这两个问题。使用Arcgis Pro进行数据标注可以在我们对一整幅遥感影像的样本处理好后再进行切片导出,可以按照重叠度导出,轻松增加多倍的样本数据量。使用Arcgis Pro进行标注还有一个好处就是可以导出当前不同深度网络使用的不同数据集。

一、创建训练方案
1、单击功能区上的 影像 选项卡,在 影像分类组 中,单击 分类工具 并选择训练 样本管理器

训练样本管理器窗口默认显示国家土地覆被数据库(NLCD2011) 的分类方案。这里我们则创建一个新方案,只有一类就是我们感兴趣的建筑
2、在 影像分类 窗口,单击 创建新方案

移除 NLCD2011 方案。重命名新建方案并向其中添加一个建筑类。
3、右键 新建方案 并选择 编辑属性,名称 输入 建筑,单击 保存
4、选择 建筑 方案后,单击 添加新类 按钮

在添加新类窗口中,设置以下参数:
名称:输入 建筑
值:输入 5
颜色:选择 红色
二、创建训练样本
1、在训练 样本管理器 窗口中,选择 建筑 类,单击面工具绘制建筑轮廓

2、在影像中根据建筑外轮廓绘制面

3、将影像内所有的建筑都创建训练样本

训练样本管理器窗格 部分中的训练样本表中列出了表示每个类的样本数量和像素百分比。
如果使用分割选取器来收集训练样本,则样本数是选择用于定义类的分割数量。
当使用统计分类器(例如最大似然法)时,这一点尤为重要,因为分割数量代表了样本的总数量。 例如,如果收集八个段作为一个类的训练样本,则可能不是一个用于生成可靠分类的具有统计显著性的样本数量。 但是,如果收集相同训练样本作为像素,则训练样本可能由数百或数千个像素表示,那么这就是具有统计显著性的样本数量。当使用非参数机器学习分类器时(例如随机树和支持向量机),训练样本的数量和百分比则不太重要。
4、保存样本文件,将要素类命名为 建筑 保存至gdb数据库中

5、从gdb数据库加载刚保存的 建筑 要素类
打开属性表中会根据训练样本管理器中设置的类别参数,创建Classcode、Classname、Classvalue和RGB、Count等字段
其中Classvalue是后续导出样本所参考的重要字段。

三、导出训练数据进行深度学习
1、在功能区上单击 分析 选项卡。在地理处理组中单击 工具,点击 Spatial Analyst工具 —— 影像分割和分类 —— 导出训练数据进行深度学习

2、在导出训练数据进行深度学习工具中,输入以下参数并单击运行:
输入栅格:选择源影像。这里我们选择image.tif。
输出文件夹:选择存储输出影像片和元数据的文件夹。这里我们在工程下创建一个output的文件夹用来存储输出的数据。
输入要素类或分类栅格或表:选择 建筑.shp。
类值字段:选择 Classvalue。
缓冲半径:用于描绘训练样本区域的,围绕每个训练样本的缓冲区的半径。可以借此从点创建圆形面训练样本。
输入掩膜面:用于描绘将创建影像片的区域,系统默认仅会创建完全位于面内的影像。
图像格式:指定将用于影像片输出的栅格格式,包含TIFF、MRF、PNG、JPEG。
切片大小XY:影像切片的大小
步幅XY:创建下一个影像切片时 x y方向上移动的距离,即两张切片的重叠部分。
旋转角度:
参考系统:指定将用于解释输入影像的参考系类型。 指定的参考系必须与训练深度学习模型所使用的参考系相匹配。
■ 地图空间 —将使用基于地图的坐标系。
■ 像素空间 —将使用图像空间,没有旋转且没有失真。
输出无要素切片:指定是否将导出不捕获训练样本的影像。
■ 选中 - 将导出所有影像,包括没有训练样本的影像。
■ 未选中 - 仅会导出训练样本的影像。
元数据格式:指定输出元数据标注的格式。这里根据我们训练的情况,选择的是RCNN掩膜的方法。
包含以下几种方式:
■ KITTI 标注 —元数据遵循与卡尔斯鲁厄理工学院和丰田工业大学 (KITTI) 对象检测评估数据集相同的格式。 KITTI 数据集是一款视觉基准套件。 标注文件是纯文本文件。 所有的值(数值和字符串)均由空格分隔开,每行对应一个对象。 此格式将用于对象检测。
■ PASCAL 可视化对象类 —元数据遵循与模式分析、统计建模和计算学习、可视化对象类 (PASCAL_VOC) 数据集相同的格式。 PASCAL VOC 数据集是用于对象类识别的标准化影像数据集。 标注文件为 XML 格式,包含有关影像名称、类值和边界框的信息。 此格式将用于对象检测。 这是默认设置。
■ 已分类切片 —每有一个输入影像,就将输出一个分类影像。 对于每个影像片,未使用其他元数据。 只有统计数据输出具有更多关于类的信息,如类名称、类值和输出统计数据。 此格式主要用于像素分类。 当输出是来自两影像中的一个分类影像时,此格式也用于更改检测。
■ RCNN 掩膜 —输出将为在样本所在的区域上具有掩膜的影像。 该模型将为影像中对象的每个实例生成边界框和分割掩膜。 此格式基于特征金字塔网络 (FPN) 和深度学习框架模型中的 ResNet101 核心支柱。 此格式将用于对象检测。
■ 已标注切片 —每个输出切片都将使用特定类进行标注。 此格式将用于对象分类。
■ 多标注切片 —每个输出切片都将使用一个或多个类进行标注。 例如,可将切片标注为“农业”,也可将其标注为“多云”。 此格式将用于对象分类。
■ 导出切片 —输出将为不带标注的影像。 此格式用于影像转换技术,例如 Pix2Pix 和超分辨率。
■ CycleGAN —输出将为不带标注的影像。此格式用于影像转换技术 CycleGAN,该技术用于训练不重叠的影像。

3、样本输出

其中images和labels中存放的是样本导出的切片和标注。

至此我们的样本制作工作已经完成,接下来可以使用PyTorch,TensorFlow,以及国内的PaddlePaddle、Jittor、MegEngine等深度学习框架进行模型训练。
人工智能是新一轮科技革命和产业变革的重要驱动力,深度学习已成为其中最有影像的关键共性技术。遥感影像智能解译通过深度学习技术引入遥感数据的解译中来极大提升对遥感数据的自动化处理和分析能力。遥感影像智能解译样本库的构建是一项持续性工作,如何充分利用已有各类样本数据集,将其进行归一化整合处理后纳入样本库中,建立一个多类型、多尺度、多级别的遥感影像样本库是进行遥感解译的关键一步。