基于多时相影像进行地表覆盖变化监测是遥感的一个重要应用,在城市违法建设监测、水政违法建设监测、森林砍伐监测等领域得到广泛应用。由于遥感算法、数据源质量等原因,遥感变化信息提取一般采用目视解译方式进行。
本教程介绍采用深度学习方法进行城市建筑物、构筑物、填河、动土、堆土等目标的变化监测。
本教程在 ENVI5.6+Deep Learning1.1.3 中完成。 ENVI Deep Learning 1.1.3 适配 ENVI 5.6 ,要求计算机必须具备 NVIDIA 显卡,对显卡环境要求如下:
l 显卡驱动版本要求 450.36.06 或更高版本。
l 要求显卡 CUDA 计算能力( Compute Capability )在 3.5 ~ 8.6 之间。
推荐 8G 以上显存的显卡,如性价比较高的 NVIDIA GeoForce 系列显卡 GeoForce RTX 3080 、 3090 等。
在使用深度学习方法提取变化目标之前,首先要明确变化地物类型,本文将变化地物类别划分为如下几类:建筑物(主要为变化厂房),构筑物(新修道路等),填河,动土,堆土等。其影像特征如下图所示:
|
|
建筑物 |
构筑物 |
|
|
动土 |
填河 |
图:变化目标
如下图所示,左侧为第一时相影像右侧为第二时相影像,通过两时期对比,展示更多变化目标特征。
|
建筑物 |
|
建筑物(厂房) |
|
构筑物 |
|
构筑物(新修道路等) |
|
填河 |
|
动土 |
|
动土 |
|
堆土 |
图:变化目标特征
数据源使用高分一号 PMS 传感器融合校正后的正射影像 DOM 产品,研究区如下图所示:
表:数据源
卫星 |
数据级别 |
波段 |
分辨率(米) |
时间 |
高分一号 PMS |
正射镶嵌影像 DOM |
R 、 G 、 B 3 波段 |
2 |
两时期 |
图:研究区
图:技术流程
预处理主要包括两时期影像的波段合成。在 ENVI 工具箱中选择, Raster Management/Build Layer Stack ,选择两时相 3 波段影像数据,其他参数按照默认,设置文件输出路径,点击 OK 进行波段合成,得到两时期 6 波段合成结果。
图:两时期波段合成
深度学习操作流程主要包括三个部分:首先,创建标签图像。标签栅格的生成一般先选择典型子区绘制样本后生成标签栅格;第二,训练深度学习模型。有了标签栅格就可以初始化深度学习模型并进行模型训练,推荐使用随机化参数组的方法进行模型训练;第三,使用训练好的模型进行目标提取。训练好模型之后就可以使用训练好的模型进行目标提取。这三步操作是深度学习的主要内容,之后可进一步将分类结果转换为矢量 ROI 再次进行编辑生成新的标签栅格重复训练模型,直到得到较好的结果。
图:深度学习操作流程
创建标签图像之前首先需要获取样本。通过人工目视解译的方法绘制研究区范围内 ROI 样本,在 ENVI 上方工具栏点击 ROI 按钮,创建变化图斑 ROI ,沿着变化图斑轮廓绘制变化图斑样本。如下图所示:
图:绘制 ROI 样本
如果已有 Shapefile 矢量样本,也可在 ROI 工具面板选择 File>Import>ImportVector 导入已有的 Shapefile 矢量作为 ROI 样本文件。
图:研究区矢量样本
关于样本的获取,通常有如下三个原则:
l 样本区域范围内,全面覆盖多种地物类型。
l 绘制样本尽可能的多。
l 样本轮廓尽可能精确,不要多余地物。
沿矢量周围扩展 1000*1000 像素生成缓冲区并将缓冲区合并,之后生成最小外接矩形(最小外接矩形生成工具可参考 3.4.4 节内容),使用外接矩形将影像切片创建模型训练样本库。矢量裁剪在 Toolbox 中选择 Extensions/Frame Subset via Shapefile 矢量分幅裁剪工具对影像进行分幅裁剪。
注:矢量分幅裁剪工具可在 AppStore 中下载, App Store 访问地址: https://envi.geoscene.cn/appstore/
图:矩形裁剪创建样本库
标签栅格用于深度学习模型训练,需要通过样本 ROI 和栅格影像构建标签栅格。对于大批量标签栅格的生成,可使用 ENVI Modeler 建模工具进行批量标签栅格的生成。在 ENVI 工具箱选择 Task Processing/ENVI Modeler 打开建模工具,构建如下批处理模型,点击 Run 按钮运行模型,生成批量标签栅格。
注: GenerateOutput Filename 节点可在 App Store 中下载。
图: ENVI Modeler 批处理生成标签栅格
图:标签栅格库
对于深度学习模型的训练,推荐使用随机化参数组的方法训练模型。在进行随机化参数训练之前,需要先初始化一个深度学习模型。在 Toolbox 工具箱选择 Deep Learning/Train TensorFlow Mask Model ,点击 Input Model 下方的 New Model 弹出初始化模型参数设置对话框, Number of Bands 为波段合成后影像的波段数量,这里两时期波段合成后为 6 波段影像。 Number of Classes 为变化类别,这里变化类别设置为 1 类即为变化地物类, Output Model 选择初始化模型输出路径点击 OK ,生成初始化模型。
图:初始化模型
接下来使用随机化参数训练工具进行深度学习模型训练。在 Toolbox 中,选择 Deep Learning/Deep Learning Guide Map 打开深度学习向导工具,在工具对话框选择 Tools>Randomize Training Parameters Using the ENVI Modeler 打开深度学习模型随机化参数训练工具。直接点击上方工具栏的 Run 按钮,弹出随机化参数训练对话框。
图:随机化参数模型训练
l Iterations :为迭代训练的次数,这里默认 16 次,表示一共训练得到 16 组模型。
l Input Model :选择初始化模型或者选择需要再次训练的模型。
l Training Rasters :选择上一步生成的标签栅格。
l Validation Rasters :同样选择上一步生成的标签栅格,工具会自动选择 80% 数据用于训练, 20% 数据作为验证。也可以将标签栅格库分为两部分,一部分用于训练一部分用于验证。
l Augment Scale :是否使用缩放增强。增强是深度学习常用的一种技术, ENVI 深度学习使用缩放和旋转来补充原始训练数据。它可以减少你所需的标记数量,特别是捕捉各种方向不同和大小不一的同种要素,增强还可以提高模型的能力,将它所学到的知识推广到新的图像中。但在样本充足的前提下使用增强会使模型的泛化能力过高,影响提取精度。这里选择 No ,不进行缩放增强。
l Augment Rotation :选 No ,不进行旋转增强。
l Raster to Classify :选择要进行变化地物提取的栅格影像,这里选择波段合成后的研究区影像。
l Output Directory :选择提取结果存放路径。
通过查看随机化参数训练工具的提取效果,选择泛化能力最强的模型作为深度学习变化监测提取模型。如下图显示了不同泛化能力模型的提取效果,图中泛化能力强的模型不仅没有“漏提”,还发现了人工没有发现的变化图斑,但泛化能力强的模型也有“过提”的缺点,但相比“漏提”,我们更能接受“过提”。
图:泛化能力弱
图:泛化能力强
选择好模型之后就可以使用已经训练好的模型进行变化地物提取。在 Toolbox 中,选择 Deep Learning/TensorFlow Mask Classification 打开深度学习模型分类工具, InputRaster 选择研究区数据, Input Trained Model 选择训练好的最优模型, Output Classification Raster 选择提取结果输出路径和文件名, OutputClass Activation Raster 选择类激活栅格输出路径,点击 OK 。
图:使用已训练好的模型进行分类
得到深度学习提取的变化图斑结果,如下图所示图中红色图斑表示发生变化的区域,黑色为背景区域。
图:深度学习变化监测结果
分类后处理主要包括小图斑处理( Classification Aggregation )、聚类处理( Clump )、主次要分析( Majority/MinorityAnalysis )。通过分类后处理可对一些细小图斑进行过滤。
l 小图斑处理
在 Toolbox 中,选择 Classification/PostClassification/Classification Aggregation ,在弹出的参数对话框中 InputRaster 选择分类后结果, Minimum Size 和 Aggregate Unclassified Pixels 按照默认设置,设置输出路径点击 OK ,得到小图斑处理结果。
l 聚类处理
在 Toolbox 中,选择 Classification/PostClassification/Clump Classes , 选择上一步的输出结果,在弹出的对话框中, Class Order 删除 Unclassified 这一类,其他参数按照默认,设置输出路径点击 OK ,得到聚类处理结果。
l 主次要分析
在 Toolbox 中,选择 Classification/PostClassification/Majority/Minority Analysis ,选择上一步的输出文件,在弹出的参数设置对话框中选择变化类别, Analysis Method 默认 Majority 进行主要分析, Kernel Size 设置为 27 × 27 ,其他参数按照默认,设置结果输出路径点击 OK ,得到主要分析处理结果。
在 Toolbox 中,选择 Classification/PostClassification/Classification to Vector 将分类栅格转为矢量。选择上一步的输出结果,在弹出的对话框中, Export Classes 选择变化类别,其他参数按照默认,设置输出路径点击 OK ,得到矢量结果。
图:分类栅格转矢量
通过输出的矢量结果生成最小外接矩形,在 Toolbox 中,选择 Vector/Vector to Bounding Box ,在弹出的对话框中选择上一步输出的矢量, OrientedBounding Box 选择 Yes ,根据图斑边界生成最小外接矩形,设置文件输出路径点击 OK ,得到最终结果。
图:生成最小外接矩形
本次深度学习变化监测在 ENVI5.6+ENVIDeep Learning1.1.3 中完成,计算机环境: Dell Precision T3640 图形工作站( CPU : Intel i9-9900K , GPU : NVIDIA RTX2080ti 显存 11GB ,内存: 64GB ,硬盘: SSD 固态),模型训练时间: 35 分钟,目标提取时间: 5 小时 30 分钟, 22135 平方公里范围内共发现变化图斑 42255 个。
图:变化监测提取结果
使用训练样本对深度学习训练模型进行精度验证,结果如下:
Loss (损失): 0.111
Accuracy (正确率): 0.946
Precision (用户精度): 0.783
Recall (生产者精度): 0.953
F1 ( F1 分数): 0.853
区域内人工目视绘制变化图斑共计 653 个,深度学习模型全部识别发现,无“漏提”现象。同时深度学习还发现了大量人工没有发下的遗漏变化图斑。监测结果如下图所示,图中红色矢量为人工目视解译绘制的变化图斑,黄色矩形框为深度学习发现的变化区域。
|
|
|
|
|
|
|
|
|
|
图:深度学习变化监测结果
虽然泛化能力强的模型很少有“漏提”现象,但模型最主要的误差来源于“过提”,即深度学习模型发现的变化目标远远多于实际监测所需的变化目标,不过对于“过提”可以通过人工目视等方法进行快速过滤排除。产生“过提”误差的主要原因有如下两个: 1. 几何畸变 2. 时相偏差。
1 )几何畸变
这里的几何畸变主要是非系统误差,如传感器平台的高度、经纬度、速度和姿态的不稳定,地球曲率及空气折射,地形影响等。几何畸变造成的提取误差如下如所示:
图:道路扭曲
图中前一时相竖直道路在第二时相的影像中发生扭曲,被深度学习检测为变化区域。
图:高层建筑位置偏差
图中前一时相的高层建筑与后一时相的高层建筑因为拍摄角度的差异造成位置的偏差,被深度学习检测为变化区域。
图:山地地形差异
山部地区的“过提”为本次深度学习变化监测的主要误差,大约占“过提”图斑的 80% 以上,造成这个结果的主要原因是地形与太阳角度差异引起的几何畸变。通过两期影像对比可发现山顶和山脊线位置有明显位移,两期影像叠加有“双眼皮”现象。
关于影像几何畸变造成的误差可通过如下两个方法进行改进: 1. 高精准 DOM 。通过高精准 DOM 对影像进行严格的正射校正,从而消除几何畸变造成的误差。 2. 监测区辅助数据。可通过添加矢量监测区域进行过滤,排除监测区以外的地物干扰,或通过 DEM 等辅助数据进行山地区域变化图斑的过滤。
2 )时相偏差
另一类造成误差的主要原因是时相偏差。下图显示了两时相季节差异造成的提取误差。黄色变化框内,前一时相无植被覆盖,后一时相有植被覆盖,深度学习提取结果认为此处为变化区域,但这种变化是实际监测中所不需要的。
图:两时期植被差异
除此之外还有一些移动物体和蔬菜大棚等也造成了干扰变化,影响了深度学习变化监测的提取结果,但此干扰在提取结果中所占比重不大。
图:变化物体
图:两时期大棚变化
总结:本次深度学习变化监测技术路线清晰明确,具有一定通用性,获取结果较为可靠。此方法可有效发现地表变化图斑,为变化图斑绘制提供辅助发现。
0人已收藏
0人已打赏
免费0人已点赞
分享
水利软件
返回版块13.32 万条内容 · 182 人订阅
回帖成功
经验值 +10
全部回复(0 )
只看楼主 我来说两句抢沙发