1/3
2/3
3/3
ArcGIS Pro中的深度学习(以井盖识别为例)
爱学习的测绘师
2021年04月17日 13:30
收录于文集
共1篇

一、 什么是深度学习

首先深度学习属于机器学习的一种,而机器学习是实现人工智能的最重要的内容。

人工智能的分类

    深度学习(Deep Learning)其实算是神经网络的延伸,从概念被提出,逐渐的在人工智能领域大显身手。尤其是在2012年,其在图像识别领域获得惊人的成绩。和神经网络一样,深度学习也是一个算法的集合,只不过这里的算法都是基于多层神经网络的新的算法。他是一种新的算法和结构,新的网络结构中最著名的就是CNN,它解决了传统较深的网络参数太多,很难训练的问题,使用了“局部感受野”和“权植共享”的概念,大大减少了网络参数的数量。关键是这种结构确实很符合视觉类任务在人脑上的工作原理。新的方法就多了:新的激活函数:ReLU,新的权重初始化方法(逐层初始化,XAVIER等),新的损失函数,新的防止过拟合方法(Dropout, BN等)。这些方面主要都是为了解决传统的多层神经网络的一些不足:梯度消失,过拟合等。(原理太过复杂,我个人是使用者,非研究者)

有一个很通俗的知乎文章参考https://zhuanlan.zhihu.com/p/65472471

或者视频:深度学习(3Blue1Brown)​


二、Arcgis中的深度学习

    我这里只做了Mask RCNN,主要应用于图像实例分割(Instance segmentation),以下为图像分类、目标检测、语义分割、实例分割之间的区别

    

图像分类,目标检测,语义分割,实例分割之间的区别

在Arcgis pro中的深度学习主要有一下几种任务

Arcgis pro中的深度学习任务

2.1 标注对象以供深度学习使用

深度学习需要大量的人工标注的样本,样本越多其结果就越准确。Arcgis pro的深度学习标注如下:

Arcgis pro的深度学习标注

我们可以新建类别(我这里建立了2类,圆形的井盖和矩形的套篦子),勾画类别(矩形和圆形),标注对象尽量多和全。

标注对象菜单

标注矩形井盖和套篦([bì])子

导出标注数据以供深度学习使用,导出Mask RCNN格式训练数据

导出Mask RCNN格式训练数据

掩膜面要素:系统会只产生此范围内的影像片。

分块大小:对图像进行分块。这里分块大小最好是能全部包含目标大小物体,可以含多个物体。

步幅:创建下一个影像片时 x 方向上移动的距离,一般设置50%即可。

旋转角度:影像片将在旋转角度为 0 的情况下生成,这意味着无旋转。随后系统将以指定的角度旋转该芯片,以创建其他影像片。系统将在多个影像片中以多个角度捕获相同的训练样本,以便用于数据增强。

导出的标注数据如下图所示

标注数据结果

Images:存放切片像片

Labels:存放的是一个标注像片(掩膜照片)

Models: 模型训练完成之后,存放训练好的模型

Json:存放一些统计信息

Emd:模型定义信息,包括深度学习框架,元数据类型,类别等

Map,stats:map是imgaes和labels的映射文件,stats是统计信息文件。


2.2 训练深度学习模型

训练深度学习模型

输入训练数据:上一步导出的训练数据

输出模型:最终训练好的模型存放文件夹

最大新纪元:Epoch(时期),指一个完整的数据集通过了神经网络一次并返回了一次,这个过程称为一次Epoch。也就是所有的训练样本在神经网络中都进行了一次正向传播反向传播(优化权重和偏置)。

模型类型:这里只能是Mask-RCNN

批量大小:batch_size(批),即每批样本的大小。由于一次性把所有数据输入到神经网络中不太现实,因此需要分批(batch)输入,每批包含的样本大小(像片数量)就是batch_size。

批数计算公式

Chip-size:即训练样本中切片的片大小。将从 in_folder 参数中指定的文件夹中的 .emd 文件提取影像片大小

学习率:在整个训练过程中,现有信息将被新获取的信息覆盖的比率。如果未指定任何值,则系统将在训练过程中从学习曲线中提取最佳学习率。

new_weight = existing_weight — learning_rate * gradient

学习率过大和过小的影响

学习率的好坏

程序会自动找到最佳学习率,内部函数为:

learn.lr_find()

骨干模型:指定要用作训练新模型的架构的、预先配置的神经网络。这种方法称为迁移学习。Mask-RCNN的为RESNET50(残差神经网络,总共50层)。

预训练模型:可以对具有相似类的预训练模型进行微调以适应新模型。预训练模型必须已使用将用于训练新模型的相同模型类型和骨干模型进行了训练。

 验证百分比:将用于验证模型(估算误差)的训练样本的百分比。默认值为 10

 当模型停止改进时停止:选上时,代表无论指定的最大Epoch是多少,模型不再改进时,训练都会结束。不选上时代表一直训练,直到达到最大Epoch。

 冻结模型:指定是否冻结预训练模型中的骨干层,以使权重和偏差保持原始设计。只有头部网络的会被训练改变。这是默认设置,如果不冻结模型,则会改变权重和偏差,这会增加计算量和时间,当然会得到比较好的结果。

 GPU:一般使用GPU来训练模型,GPU考验的是CUDA能力。ID一般为0

GPU CUDA计算能力

范围:设置制定范围内的数据进行训练。

并行处理因子:一般默认不去修改

并行处理因子

训练完毕之后,目录结构如下,最主要的是DLPK(Deep learning package)和EMD结果。

训练结果

打开HTML文件显示训练的精度。

学习率曲线

下图中,由于训练集LOSS开始大于验证集LOSS时,这里会停止(过拟合)。

过拟合

这里分数越高,代表模型的准确率越高(主要的评价指标)

AP分数

从下图可以看到标注的图像跟预测的图形几乎一样。

Ground vs Predictions


三、使用深度学习检测对象

使用深度学习检测对象

模型定义:输入上步骤输出的DLPK文件

Padding:这个是外扩宽度,我不是很懂

Batch_size:跟前面的一个意思

Threshold:置信度阈值。每个探测到的对象都有一个置信度(软件自动算的),设置高的置信度,会把置信度低(也就是不准确的探测对象)删除不要。

置信度

Return_boxes:是否返回探测到物体的外接边框

Tile_size切片图像的大小。一般程序依据此大小输入图像

非极大值抑制(NMS):删除多余的预测物体

非极大值抑制

IOU预测的边框和真实的边框 的交集和并集的比例 称为 IoU(Intersection over Union)。

IOU概念

最大重叠度比:删除IOU大于阈值的所有BOX。


以上设置完毕之后,我们对目标进行提取

以下是通过深度学习自动识别的井盖和套篦([bì])子

自动识别提取目标

四、规则化图形

    某些情况下,探测的如果是井盖或者房屋,我们希望图形是规则图形(直角,圆形),那么可以使用此命令。

规则化图形

规则化前

规则化后

完毕,总的来说精度很高了。当然也有识别错误的和漏掉的(算法不会完美)

识别错误

漏掉的

完毕,看完记得三连。Thanks♪(・ω・)ノ