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

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了ENVI深度学习1.2版本对象检测教程——以寻找特殊路面标志为例脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

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

提取码:envi

1.使用注记标记目标

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

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

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

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

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

图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旁边的颜色框,并将其更改为蓝色。

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

图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”,表示尚未创建标签栅格。

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

图3 添加训练栅格

第四步:导入注记

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

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

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

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

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

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

图4 导入注记

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

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

图5 显示已有注记

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

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

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

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

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

图6 导入已有注记

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

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

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

图7 标记目标

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

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

第五步:标注更多目标

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

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

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

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

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

@H_117_360@

图8 拉伸图像

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

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

图9 放大图像

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

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

图10 定位目标

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

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

图11选择类型绘制目标

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

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

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

图12 绘制目标样本

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

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

图13 添加目标样本

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。

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

图14 训练对象检测模型

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

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

图15 自动生成标签栅格

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

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

图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训练期间的指标。验证损失为蓝色;训练损失是橙色的:

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

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

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

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

图18 显示训练指标

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

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

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

3. 执行分类

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

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

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

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

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

图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将出现在视图中,覆盖在图像上。

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

图20 对象检测分类

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

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

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

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

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

图21 对象检测结果 

 

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

脚本宝典总结

以上是脚本宝典为你收集整理的ENVI深度学习1.2版本对象检测教程——以寻找特殊路面标志为例全部内容,希望文章能够帮你解决ENVI深度学习1.2版本对象检测教程——以寻找特殊路面标志为例所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。