ENVI_Deep_Learning工具教程
(2019-05-20 18:14:50)
标签:
envienvinet5u-net深度学习教程 |
该教程使用ENVI552软件内置的示例数据,使用ENVI深度学习来识别海港的高分辨率正射影像中的集装箱。包含以下内容:
(1)系统要求
ENVI深度学习需要ENVI 5.5 Service Pack 2的安装和许可。下表列出了当前版本的ENVI Deep Learning支持的平台:
平台 |
硬件 |
操作系统 |
版本 |
Windows |
Intel/AMD 64-bit |
Windows |
10, 2016 Server |
Linux |
Intel/AMD 64-bit |
Linux |
Kernel 3.10 或更高, glibc 2.17或更高 |
ENVI Deep Learning使用TensorFlow™,最低硬件和软件要求:
支持CUDA Compute Capability 3.5或更高版本的NVIDIA显卡。 有关支持CUDA的GPU卡列表,参阅https://developer.nvidia.com/cuda-gpus 。
NVIDIA GPU驱动程序:CUDA 9.0 384.x或更高版本。驱动地址:https://www.nvidia.com/Download/index.aspx?lang=en-us
本教程测试的硬件参数:
电脑型号 |
戴尔Precision 7520笔记本 |
处理器 |
Intel(R) Xeon(R) CPU E3-1505M v6 @ 3.00GHz |
内存容量 |
16.0GB |
显卡 |
1、NVIDIA Quadro M2200 |
2、Intel(R) HD Graphics P630 |
|
硬盘 |
1、THNSN5256GPUK NVMe TOSHIBA 256GB (256GB) |
2、ST2000LM007-1R8174 (2.0TB) |
|
主板 |
0DFG9Y (A00) |
网卡 |
1、Intel(R) Dual Band Wireless-AC 8265 |
2、Intel(R) Ethernet Connection (5) I219-LM |
|
声卡 |
1、英特尔(R) 显示器音频 |
2、Realtek High Definition Audio |
|
显示器 |
LGD:9b04 |
当前操作系统 |
Windows 10 64位 |
(2)教程中使用的文件
安装ENVI的data\deep_learning目录中提供了本教程的示例数据文件:
Windows:C:\ Program Files \ Harris \ ENVIxx \ data \ deep_learning
Linux:/ usr / local / harris / envixx / data / deep_learning
数据情况说明:
数据 |
描述 |
OaklandPortOrthophoto1.dat |
高分辨率正射影像(HRO)子集,4个波段,0.3米空间分辨率,于2015年2月20日获得,ENVI格式。注:图像由美国地质调查局提供。 |
OaklandPortOrthophoto2.dat |
|
ShippingContainerROIs.xml |
基于点的ROI用于创建标签图像 |
(3)背景
遥感深度学习的一个常见用途是特征提取。即,识别图像中的特定特征,例如车辆、道路中心线或公用设施。通过标记标签的过程,可以在一个或多个图像中标记要素的位置。通过训练,可以将标记数据传递给深度学习模型,以便了解该特征的外观。最后,训练的模型可用于在相同图像或具有类似属性的其他图像中检测更多相同特征。
查看数据情况:
打开OaklandPortOrthophoto1.dat数据,这是2015年2月在美国加利福尼亚州奥克兰海港的一个小区域的高分辨率(0.3米)正射影像。
此正射影像包含四个波段 除了红、绿、蓝色波段之外,还包含近红外波段。
(4)构建标签栅格
训练模型需要一个或多个包含标记像素数据的图像,即标签栅格。标记的像素数据可以来自感兴趣的区域(ROI)或现有的分类图。可以使用ENVI的ROI工具在感兴趣的特征上绘制点、线或多边形。也可以加载标记的基于点的ROI。ROI标识图像中的集装箱。正射影像和ROI将用于创建标签栅格。
创建标签栅格的步骤如下:
1)、在图层管理器中右键单击OaklandPortOrthophoto1.dat,然后选择New Interest of Interest。打开感兴趣区域(ROI)工具。
2)从ROI工具菜单栏中,选择“File”>“Open”:
选择ShippingContainerROIs.xml并单击“打开”。“Shipping Containers”ROI图层将添加到图层管理器中,并右键删除ROI#1
3)放大显示可以看到集装箱顶部的红色ROI点。ROI工具中的计数字段显示有505个点记录。
4)在ENVI工具箱中,选择Deep Learning > Deep Learning Guide Map。该工具可根据指导完成ENVI深度学习中的各个步骤。在Deep Learning Guide Map中,单击“Train a New Model”,然后单击“Build Label Raster from ROI”。
在ROI对话框的Build Label Raster中,Input Raster字段将自动填充OaklandPortOrthophoto1.dat,不需要在这里改变任何参数。单击“Input ROI”旁边的“浏览”按钮,在“ROI Selection”对话框中选择Shipping Containers并单击OK。单击“Output Raster”旁边的“浏览”按钮,导航要保存本教程输出文件的文件夹,并将输出文件命名为LabelRasterContainers.dat。
5)在Build Label Raster对话框中单击OK。处理完成后,将显示标签栅格。标签栅格包含原始图像波段以及由二进制掩码组成的附加波段。掩码带根据提供的ROI实例指示输入栅格中的哪些像素对应于集装箱。
注:ENVI在蓝色背景下显示红色的蒙版像素,正射影像的band1显示在绿色和蓝色通道中。


标签栅格提供了深度学习模型所需的实例,以学习集装箱的外观。
(5)训练深度学习模式
训练涉及重复将标签栅格传递给模型。随着时间的推移,模型将学习标签栅格中的光谱和空间信息转换为类激活栅格,突出训练期间显示的特征。
1)在“Deep Learning Guide Map”地图中,单击“Train Model”。将出现“Train TensorFlow Mask Model”对话框。训练过程的第一步是建立或初始化新的深度学习模型,ENVI使用TensorFlow™技术进行深度学习,初始化定义TensorFlow模型结构。
2)在Train TensorFlow Mask Model对话框中,单击位于Input Model标签正下方的New Model。在Initialize ENVINet5 TensorFlow Model对话框中,在Number of Bands字段中输入值4,正在初始化将在4波段正射影像上训练模型。选择接受“Model Name”,“Patch Size”和“Output Model”的默认参数,单击确定。
3)LabelRasterContainers.dat文件出现在Training Rasters字段中,无需在此处选择任何内容。
验证栅格是单独的标签栅格,可用于评估TensorFlow模型的准确性,通常与用于训练的标签栅格分开。虽然使用不同的标签栅格进行训练和验证,分类准确性通常会更好,但仍然可以使用相同的栅格。单击“Validation Rasters”旁边的“添加文件”按钮,选择LabelRasterContainers.dat并单击“打开”。
4)接下来的8个参数(通过损失权重的Epoch数)是希望控制更多训练参数的高级设置。设置以下值:
·Number of Epochs: 25
··Number of Patches per Epoch: 300
·Number of Patches per Batch: 留空,ENVI将自动确定最佳值。
·Patch Sampling Rate: 16
·Solid Distance: 4.0
·Blur Distance: Min 0, Max 20
·Class Weight: Min 1, Max 3
·Loss Weight: 2.5
单击“Output Model.”旁边的“浏览”按钮,选择输出文件夹并将模型文件命名为TrainedModelContainers.h5,然后单击“保存”。
最后,在Train TensorFlow Mask Model对话框中单击OK。
5)由于涉及的计算量较大,训练模型需要花费大量时间。根据系统和图形硬件,处理可能需要几分钟到几个小时。“Training Model”对话框显示培训进度以及更新的验证损失值。
报错:
解决方案:修改··Number of Patches per Epoch: 200,再次训练。
资源占用情况:
处理完成后,训练好的模型就可以用于分类。
(6)执行分类
现在已经有一个经过训练的模型,将使用相同的模型在海港的另一个正射影像中找到集装箱。这是ENVI深度学习的好处之一,可以训练一次模型并将其多次应用到空间和光谱相似的其他图像上。
1)在“Deep Learning Guide Map”中单击“Classify Raster Using a Trained Model”。在出现的TensorFlow Mask分类对话框中,单击“Input Raster”旁边的“浏览”按钮,选择“Data Selection”对话框中的“Open File”按钮,导航到包含教程数据的目录选择OaklandPortOrthophoto2.dat,并单击数据选择对话框中的确定按钮。
2)输入模型字段已填充文件TrainedModelContainers.h5,不需要在这里改变任何参数。
单击“Output
Raster”旁边的“浏览”按钮,选择一个输出文件夹并将输出文件命名为ClassActivationContainer
“分类栅格”对话框显示分类的进度:
3)处理完成后,右键单击图层管理器中的ClassActivationContainer
不同训练结果可能与此处显示的略有不同,训练深度学习模型涉及一定程度随机性的随机过程。因此,永远不会从多次训练中获得完全相同的结果。
如果获得完全黑色的类激活栅格,则模型可能无法准确地再现训练数据。或者,训练确实可以收敛,但却是错误的解决方案。如果发生这种情况,需要重新运行训练步骤以查看否能产生有效结果。同时尝试增加Class Weight或Blur Distance的Max值。
单独查看灰度图像难以相对于场景中的其他对象识别集装箱。需要更有意义的可视化方式显示结果:
管理图层
1)在图层管理器中,右键单击以下图层,然后选择删除:
·LabelRasterContainers.dat
·OaklandPortOrthophoto1.dat
2)打开ENVI工具栏中的“Data Manager”按钮,右键单击OaklandPortOrthophoto2.dat并选择Load Default显示真彩色正射影像。
3)在图层管理器中,单击并拖动调整图层顺序,使得ClassActivationContainer
注意:类激活栅格覆盖的区域比正射影像小。 因为在分类过程中,ENVI在类激活栅格周围创建一个93像素的透明边框。
色彩分割类激活栅格
为了更好地可视化类激活栅格,可以对其应用栅格色彩分割。色彩分割将图像的像素值划分为不同颜色的离散范围。
1)在图层管理器中,右键ClassActivationContainer
选择ClassActivationContainer
2)在图层管理器中,取消选中ClassActivationContainer
通过基于深度学习的特征提取较好结果,并不总是一个快速而简单的过程。它通常涉及多次迭代以产生最准确的结果。优化深度学习模型的一种方法是在类激活栅格中创建最高像素值的ROI,然后使用ROI构建新的标签栅格,再使用新标签栅格优化训练模型。这完全是可选步骤,但它可以帮助改善分类结果。
(7)将类激活值转换为ROI
1)在“Deep Learning Guide Map”中,单击“Refine a Trained Model”,然后单击“Class Activation to Pixel ROI”。
2)单击“Input
Raster”旁边的“浏览”按钮,在“Data
Selection”对话框中选择ClassActivationContainer
“阈值”滑块是选择类激活栅格中的最小数据值以保留输出ROI。需要注意,像素值的范围是0~1.0,表示与集装箱匹配的概率。将阈值更改为0.60。,将输出ROI保留最高40%的类激活像素。
接受自动阈值方法的默认值Otsu,仅在阈值设置为0时应用。
在“输出ROI”字段中,接受ClassActivationToPixelRO
3)处理完成后,取消选中“Layer Manager”中的“Raster Color Slice”以隐藏该图层。
从ENVI主菜单栏中,选择“File”>“Open”,打开刚刚创建的ROI文件(.xml)。将出现“Select Base
ROI Visualization Layer”对话框,选择OaklandPortOrthophoto2.dat并确定,像素ROI显示在正射影像上。
以上步骤演示了如何将阈值应用于类激活栅格,以及如何将最高像素值转换为基于像素的ROI。如果ROI在识别感兴趣的功能方面做得很有效,可以使用它们来创建新的标签栅格并优化TensorFlow模型。