Press "Enter" to skip to content

ENVI深度学习1.2版本对象检测教程——以寻找特殊路面标志为例

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

遥感中深度学习的一个常见用途是对象检测(目标识别)。也就是说,识别特定对象,例如车辆和人造结构。对象检测将特征定位在对象级别,而不是像素级别。对象是具有相似空间、光谱和纹理特征的像素组。相比之下,像素分割是逐个像素地定位特征。对象检测不仅提供特征的位置,还提供形状、面积、长度等特征。本教程使用 ENVI 深度学习来训练对象检测模型以在航拍图像中找到特定目标。以下为处理步骤:

 

·   第一步:标记目标。通过在图像周围绘制边界框来定位图像中的特征(对象)。

 

·   第二步:为每个边界框分配一个类标签。与像素分割不同,对象检测可用于提取接触或重叠的对象。

 

·   第三步:模型训练。将标记的数据传递给对象检测模型,以便它了解特征的外观。

 

·   第四步:模型分类。经过训练的模型可用于在同一图像或具有相似属性的其他图像中寻找更多相同的特征。

 

数据链接: https://pan.baidu.com/s/1ribDtHDK6gCBaIg7IO2e-A

 

提取码: envi

 

1.1  使用注记标记目标

 

对象检测第一步是标记目标,需要至少一张输入图像来收集感兴趣的对象样本。这些图像是训练栅格。这些训练栅格可以大小不一,但它们必须具有一致的光谱和空间特性。标记训练栅格的简单方法是使用 深度学习标记工具 。

 

在 Toolbox 中,选择 DeepLearning/Deep Learning Guide Map 。深度学习向导工具提供了使用 ENVI 深度学习的分步方法,指导用户完成标记、训练和分类所需的步骤。

 

在向导工具中,单击 ObjectDetecion>Train a New Model>Label Rasters ,打开标记工具,同时保持向导工具打开,因为在本教程后面需要使用它。(也可直接在 Toolbox , DeepLearning/Deep Learning Labeling Tool 单独打开标记工具)

 

图 1  标记工具

 

第一步:建立一个深度学习项目

 

建立项目可帮助组织与标记过程相关的所有文件,包括训练栅格和标注。它们还跟踪类名称和您为训练参数指定的值。

 

(1)      选择一个文件目录,在里面创建一个名为 ProjectFiles 的 空文件夹 。

 

(2)      从 Deep Learning Labeling Tool  菜单栏中选择 File > New Project  。出现“ Create New Labeling Project ”创建新标签项目对话框, Project Type 选项自动设置为 Object Detection 。

 

(3)      在项目名称字段中,输入 HandicapSpots 。

 

(4)      单击项目文件夹旁边的浏览按钮,然后选择您在步骤( 1 )中创建的项目文件目录,单击确定。

 

注:当创建一个新项目并选择需要标记的训练栅格时, ENVI 会在项目文件夹里面为输入的每个训练栅格创建一个单独的文件夹。每个子文件夹将包含标注过程中创建的注记和标签栅格。

 

第二步:定义类别

 

这一步是定义要使用的类。使用标注工具的 ClassDefinitions 类定义选项定义要标注的要素类别名称。在本教程中定义了一个类别。

 

(1)      单击类定义选项左下角的绿色加号 “添加”按钮。

 

(2)      在名称字段中,输入 Handicap Spot ,然后单击 确定按钮。该类别被添加到类定义列表中。

 

(3)      单击 HandicapSpot 旁边的颜色框,并将其更改为蓝色。

 

图 2  定义类别

 

第三步:添加训练栅格

 

这一步是选择要进行训练的栅格。

 

(1)      在深度学习标签工具,单击“ Raster ”栅格选项下方的“add” 添加按钮。出现“ DataSelection ”数据选择对话框。

 

(2)      单击“ DataSelection ”对话框底部的“Open File…” 打开文件按钮。

 

(3)      定位到: \ENVI 练习数据 \304- 技术专题:深度学习图像分类技术 \2- 对象检测。使用 Ctrl  键选择以下文件,然后单击 Open 。

 

·   DRCOG_AerialImage1.dat

 

·   DRCOG_AerialImage2.dat

 

(4)      单击“ DataSelection ”对话框中的“ SelectAll ”全选按钮,点击确定。

 

在“ Raster ”选项中,每个“ Classes ”类单元格显示一个红色分数: 0/1 。“ 0 ”表示尚未绘制任何类标签。“ 1 ”表示定义的类别总数。“ Label Raster ” 标签栅格列显示红色“ No ”,表示尚未创建标签栅格。

 

图 3  添加训练栅格

 

第四步:导入注记

 

本教程提供了已经标注好的注记文件,直接导入已有注记文件。

 

(1)      在标签工具中,选择 DRCOG_AerialImage1.dat 文件。

 

(2)      单击 设置按钮并选择“ ImportAnnotations ”导入注记。将出现“选择标注文件名”对话框。

 

(3)      选择 Handicap_Parking_Spots1.anz 并单击 Open 。将出现“将输入注记与类定义匹配”对话框。

 

(4)      单击“ HandicapSpot ”按钮。在 AnnotationRectangle  和 HandicapSpot  之间连接一条红线。

 

图 4  导入注记

 

(5)      单击 OK 。几秒钟后注记和图像出现。矩形标注为蓝色,围绕在图像上残疾人士停车位符号周围。

 

图 5  显示已有注记

 

(6)      在标签工具中,选择 DRCOG_AerialImage2.dat 。

 

(7)      单击右下角的 设置按钮并选择“ ImportAnnotations ”导入注记。

 

(8)      选择 Handicap_Parking_Spots2.anz 并单击“ Open ”。

 

(9)      在 MatchInput Annotations to Class Definitions  对话框中,单击“ HandicapSpot ”按钮,然后单击 OK 。几秒钟后,上一个图像和注记从显示中移除,而新图像和注记显示。

 

 

图 6  导入已有注记

 

标签工具 Classes 一列显示 1/1 ,表示已为图像绘制了类别,共计 1 个类别。图层管理器 列出了在 标注工具中打开的最新图像 DRCOG_AerialImage2.dat 以及最新添加的注记文件。该层被命名为“对象检测标签”。

 

(10) 放大图像并浏览注记和目标。可以看到蓝色边界框如何围绕目标标记。

 

图 7  标记目标

 

(11) 双击图层管理器 中的“ ObjectDetecion Labels ”对象检测标签。出现元数据查看器。它表明该标注层包含 84  条记录或边界框。

 

(12) 关闭元数据查看器。

 

第五步:标注更多目标

 

接下来,将手动标记第一张图像中遗漏的更多目标。

 

(1)      在标签工具中,选择 DRCOG_AerialImage1.dat 。

 

(2)      单击“Draw” 绘制按钮。显示第一个图像和标注。

 

(3)      在图层管理器 中,选择 DRCOG_AerialImage1.dat 以使其成为活动图层。

 

(4)      单击 ENVI  工具栏中的 StretchType 下拉列表并选择 OptimizedLinear 。将线性拉伸应用于图像。

 

图 8  拉伸图像

 

(5)      单击 ENVI  工具栏中的 Zoom 下拉列表并选择 400%(4:1) 。

 

图 9  放大图像

 

(6)      在 ENVI  工具栏的 Go To 字段中,输入这些像素坐标: 28981p,73399p 。确保在每个值之后包含“ p ”,且逗号为英文字符。然后按键盘上的 Enter 键。展示集中在一个有四个残疾人停车位的区域:

 

图 10  定位目标

 

在标注工具中,下拉列表允许您选择要为其绘制标注的类别。本例中列表显示了唯一可用的类,即 HandicapSpot :

 

图 11 选择类型绘制目标

 

光标变成了十字线符号, ENVI  工具栏中的 Annotation 下拉列表设置为了 Rectangle 。现在已准备好绘制更多边界框。

 

(7)      在显示屏上按住鼠标左键,在四个障碍标志之一周围画一个框。一定要包括所有的彩绘标志。当释放鼠标按钮时,该框变为蓝色。框周围的青色选择手柄可在任何方向调整框大小。

 

图 12  绘制目标样本

 

(8)      按住鼠标左键在其余三个障碍标志周围绘制方框。要从第四个框中清除选择手柄,请单击显示中的任意位置,右键选择保存结果。

 

图 13  添加目标样本

 

1.2  训练对象检测模型

 

深度学习模型训练是反复将标签栅格暴露给模型的过程。随着时间的推移,该模型学习将标签栅格中的光谱和空间信息转换为分类图像,该分类图像映射了其在训练期间显示的特征。

 

(1)      单击标签工具底部的 “ Train… ”训练按钮。训练深度学习模型对话框出现。

 

(2)      Training/Validation Split (%) ,训练 / 验证拆分滑块可让您指定用于训练与验证的数据量。保持默认值 80% 。

 

(3)      启用 Shuffle Rasters 打乱栅格选项。

 

(4)      其余参数提供对训练过程的专门控制。要了解有关这些参数的更多信息,请单击训练对话框左下角的蓝色帮助按钮。对于本教程,使用以下值:

 

·   Pad SmallFeatures : 填充小目标,选是。当特征要素很小时,启用 Pad SmallFeatures 选项,例如 : 车辆、公用设施、道路标记等。绘有边界框的目标在 X 和 Y 方向上必须至少有 25 个像素。如果标记的目标比这个小, Pad Smallfeatures 选项将用额外的像素填充它们,使它们在两个方向上至少是 25 个像素。

 

·   AugmentationScale : 缩放增强,是

 

·   AugmentationRotation : 旋转增强,是

 

·   Number ofEpochs : 时代数, 60

 

·   Patchesper Batch : 每批切片数, 2

 

·   FeaturePatch Percentage : 特征切片百分比, 1

 

·   BackgroundPatch Ratio : 背景切片比率, 0.15

 

(5)      单击 Output Model 旁边的浏览按钮 输出模型。

 

(6)      选择一个输出文件夹并将模型文件命名为 TrainedModel.h5 。然后单击打开。这个模型将是指标“最好的”训练模型,它是 epoch 中验证损失最低的模型。

 

(7)      Output Last Model ,输出最后一个模型字段留空。在训练深度学习模型对话框中,单击 OK 。

 

图 14  训练对象检测模型

 

(8)      在 DeepLearning Labeling Tool  中,所有训练栅格的“ LabelRaster ”列更新为“ OK ”,表示 ENVI  已自动创建用于训练的标签栅格。这些标签栅格也称为对象检测栅格。它们看起来与输入栅格完全相同,但它们具有关于边界框标记的附加元数据。

 

图 15  自动生成标签栅格

 

(9)      随着训练的进行, TrainingModel  对话框会显示当前 epoch  编号以及该 epoch  的相关训练和验证损失;此外, TensorBoard 页面会显示在新的 Web  浏览器中。

 

图 16  训练指标

 

由于涉及到大量计算,训练模型需要较长时间。过程可能需要几分钟到半小时才能完成,具体取决于您的系统硬件和 GPU 。如果不想等待那幺久,可以现在取消训练步骤,在分类步骤中使用已训练好的模型 ( ObjectDetectionModel_HandicapSpots.h5 ) 。该文件包含在练习数据中。

 

查看训练指标

 

TensorBoard 是 TensorFlow  附带的可视化工具包。它显示训练期间的实时指标。有关其使用的详细信息,可参阅 TensorBoard 在线文档。

 

按照如下步骤:

 

(1)      单击 TensorBoard 工具栏中的设置 图标。出现设置对话框。

 

(2)      启用 Reload Data 重新加载数据选项。

 

(3)      将 Reload Period 重新加载周期设置为 15 秒。

 

(4)      通过单击 TensorBoard  网页中的任意位置关闭设置对话框。

 

(5)      将 TensorBoard 左侧的 Smoothing 值设置为 0  。

 

(6)      前几个 epoch  完成后,单击 TensorBoard 中的 epoch_loss   以展开此部分并查看训练和验证损失值图。损失是一个无单位的数字,表示分类器验证和训练数据的拟合程度。值 0  表示完美拟合。值离 0  越远,拟合越不准确。每个批次 ( batch_loss )和每次迭代( epoch_loss )都提供损失图。理想情况下, epoch_loss 图中报告的训练损失值应在前几个迭代训练期间迅速减小,然后随着迭代数量的增加收敛到 0 。下图 epoch_loss 显示了一个在 60 次 epoch 训练期间的指标。验证损失为蓝色;训练损失是橙色的:

 

图 17 Epochs 沿 X  轴列出,从 0  开始

 

(7)      等待训练完成,然后记下 epoch_loss 图上出现最低训练损失值的点。在下面的示例中,它发生在 Epoch 52 期间, X  轴上的值为 0.06241 。将光标移到该数据点上。出现一个黑色弹出窗口。 Value 字段显示此时期 epoch 的损失值。

 

图 18  显示训练指标

 

(8)      当完成评估训练和验证指标时:

 

·   在 Web  浏览器中关闭 TensorBoard  页面。

 

·   关闭标签工具。关闭工具时,与“ HandicapSpot ”项目相关的所有文件和注记都将保存到项目文件目录中。

 

1.3  执行分类

 

现在已经有了一个经过训练可以找到残障停车位的模型,使用这个模型在同一区域的不同航拍图像中查找相似的实例目标。 ENVI 深度学习可以训练一次模型并将其多次应用于空间和光谱相似的其他图像。输出将是围绕目标被标记为“ HandicapSpot ”的 shapefile 格式的边界框 。

 

(1)      从 ENVI  菜单栏中,选择 File>Open 。

 

(2)      转到了练习素材包 / 练习数据,并选择文件 ImageToClassify.dat 。

 

(3)      按键盘上的 F12 键可缩小到图像的全部范围。它覆盖了与购物中心相邻的区域,包括住宅区。图像是在同一天从同一传感器获取的。

 

图19  分类影像

 

(4)      在 Deep Learning Guide Map 中,单击 Back 按钮。

 

(5)      单击 Object Classification 对象分类按钮。出现 TensorFlow  对象分类对话框。 Input Raster 输入栅格选择文件 ImageToClassify.dat 。

 

(6)      单击 Input Trained Model 旁边的 Browse 按钮 。转到保存模型 TrainedModel.h5 的位置并选择该文件。(假如跳过了训练,请选择教程数据中提供的模型 ObjectDetectionModel_HandicapSpots.h5 )单击 Open 。

 

(7)      将 Confidence Threshold 置信阈值设置为 0.85 。通过将其设置为较高的值,发现误报(不是真正残疾人停车位的特征)的概率要低得多。如果将其设置为较低的值,分类器可能会发现更多的误报,从而导致整个场景中有更多的边界框。

 

(8)      将 Intersection Over Union Threshold 值设置为 0 。增加此值将允许在特征周围有更多重叠的边界框。由于我们将置信阈值设置为较高的值,因此边界框重叠的可能性很低。因此可以将 IntersectionOver Union Threshold 设置为 0 ,这实际上会禁用它。

 

(9)      在 Output Classification Vector 输出分类向量字段中,指定文件名为 HandicapSpots.shp 。

 

(10) 启用 Display result 显示结果选项。

 

(11) 单击 OK 。处理完成后, shapefile 将出现在视图中,覆盖在图像上。

 

图 20  对象检测分类

 

(12) 在图层管理器 中,选择 HandicapSpots.shp 以使其成为活动图层。 ENVI  应用程序的右下角显示了 shapefile 的属性表。

 

(13) 在属性表中,单击 Line Color 线条颜色字段,单击出现的下拉箭头,然后选择 蓝色 。 shapefile 颜色变为蓝色。

 

(14) 放大图像并评估结果。分类器在图像中找到了大部分残疾人停车位。同时还有一些错误识别的特征,例如,汽车或游泳池。如果发现识别的目标较少,可以调整阈值重复分类步骤。如果发现识别的目标过多,可以使用 Guide Map 中的 Postprocess Classification Vector 分类矢量后处理工具。该工具可以设置不同的过滤阈值并在输出矢量之前预览结果。

 

下图显示了深度学习识别的残疾人停车位结果。不同的训练结果可能略有不同。

 

 

图 21  对象检测结果

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。