使用ArcGIS Pro对卫星图进行建筑轮廓识别和车辆检测
本文简述了当今火爆的“深度学习”是什么,以及如何在 ArcGIS Pro 进行深度学习的环境配置,最后通过使用建筑轮廓识别和识别车辆两个示例进行演示。本文首发在我的博客。
一、“机器学习”是什么
“机器学习”一词的火爆程度无需多言,今年 ChatGPT 的火爆让每一个都了解到了“人工智能”的巨大潜力。虽然你或多或少接触到“机器学习”、“人工智能”、“深度学习”这些概念,但是依旧会觉得很模糊,容易混淆。
以下图表展示了“人工智能(AI)”,“机器学习(ML)”,“深度学习(deep learning)”和“数据科学(data science)”之间的关系。机器学习是人工智能的一个分支,它使用算法来处理结构化数据以解决问题。传统的结构化数据需要用户对数据进行标记,例如将猫和狗的图片进行标记,以使算法能够理解这些动物类型的特征,并能够在其他图片中识别它们。
深度学习是机器学习的一种子集,它使用具有多层算法的神经网络。通过不同的网络层对输入数据进行分析,每一层都定义了数据中特定的特征和模式。例如,如果您希望识别建筑物和道路等要素,您可以使用包含不同建筑物和道路图像的训练集来训练深度学习模型。该模型通过神经网络中的各个层对图像进行处理,并找到用于对建筑物或道路进行分类的特定标识符。
此图由 Jen Looper 创作,灵感来自此图 this graphic 。
二、机器学习的应用
机器学习的应用现在几乎无处不在,它就像我们的智能手机、联网设备和其他系统生成的数据一样无处不在。考虑到最先进的机器学习算法的巨大潜力,研究人员一直在探索它们解决多维和多学科现实问题的能力,并取得了巨大的积极成果。
应用机器学习的示例
您可以通过多种方式使用机器学习:
- 从病人的病史或报告中预测疾病的可能性。
- 利用天气数据来预测天气事件。
- 理解一篇文章的情感。
- 为了检测假新闻,以阻止宣传的传播。
金融、经济、地球科学、空间探索、生物医学工程、认知科学,甚至人文领域都采用了机器学习来解决其领域中艰巨的数据处理问题。
三、ArcGIS Pro 中深度学习
单独使用 Python 的深度学习包也可以完成深度学习的任务,但是 Python 语言并不能完成很方便的进行深度学习全流程的操作,比如用于对象检测和语义分割的YOLOv8,在训练模型时要使用其他软件来进行标签(LABEL)数据集的制作,而**使用 ArcGIS Pro 可以支持深度学习全流程,同时满足数据标注、推理、预测、样本导出、后处理工具(栅格砖面、规则化建筑物面)需求。**具体有以下 6 类应用:
1 影像分类
图像分类涉及为数字图像分配标注或类。可以在 GIS 中用于对图像中的要素进行分类。
2 对象检测
对象检测是在图像中定位要素的过程。 可以在 GIS 中使用它来定位卫星、航空或无人机影像中的特定要素并在地图上绘制这些要素。
3 语义分割
当图像中的每个像素被归为一类时,将会进行语义分割。 在 GIS 中,这通常被称为像素分类、图像分割或图像分类。 它通常用于创建土地利用分类地图。
4 实例分割
实例分割是一种更加精确的对象检测方法,将在其中绘制每个对象实例的边界。
5 影像转换
6 变化检测
变化检测深度学习任务可以检测两个日期之间感兴趣要素的变更,并生成变化的逻辑图。
四、ArcGIS Pro 中深度学习环境的配置
ArcGIS Pro 中的所有深度学习地理处理工具都要求安装支持的深度学习框架库。
1 自动安装(推荐):
参考 ArcGIS Pro 的deep-learning-frameworks,在GitHub - Esri/deep-learning-frameworks: Installation support…下载特定版本的深度学习安装包然后运行安装程序即可。
本站提供了 3.0 到 3.3 版本的深度学习安装包,并且提供百度网盘和阿里云盘两种网盘分享,有需要的可以关注微信公众号【renhai-lab】然后发送私信【ArcGISPro 深度学习环境安装包】即可以免费获取。
3.2 版本的深度学习安装包中主要包含 Python DL 库:
核心框架
- tensorflow-gpu (2.7.0): TensorFlow 的 GPU 版本,深度学习的支柱框架之一,提供了构建和训练各种神经网络的工具。
- pytorch (1.8.2): 另一个非常流行的深度学习框架,以其灵活性和易用性著称,尤其在研究领域很受欢迎。
- keras (2.7.0): 构建在 TensorFlow 之上的高级 API,简化了模型构建过程,对快速原型设计很有帮助。
模型库
- tensorflow-hub (0.12.0): 提供预训练的 TensorFlow 模型,可以方便地用于迁移学习,加速开发过程。
- timm (0.4.12): PyTorch Image Models (TIMM) 提供了各种 SOTA 的图像模型,方便研究人员和开发者使用。
- transformers (4.5.1): Hugging Face 开发的自然语言处理库,包含 BERT、GPT 等预训练模型,用于各种 NLP 任务。
辅助工具
- tensorboard (2.6.0): TensorFlow 的可视化工具,用于监控模型训练过程、分析模型结构等。
- onnx (1.9.0): Open Neural Network Exchange (ONNX) 格式,用于不同深度学习框架之间交换模型。
其他相关
- deep-learning-essentials (3.1): 看名字就知道,这是一个包含各种深度学习相关包的集合,方便一次性安装。
- neural-structured-learning (1.4.0): 用于训练结合结构化信号的神经网络,例如知识图谱等。
2 手动安装:
参考Install Offline 脱机安装和深度学习库安装程序之后,我们使用 conda 安装含有深度学习的 Python 环境:
1.打开终端,使用以下命令安装:
conda create -n your-clone-name --clone arcgispro-py3 --pinned
建议 clone 环境而不是从 0 安装 arcpy
2.激活环境
activate your-clone-name
3.安装 deep learning
conda install deep-learning-essentials
4.将默认环境切换到深度学习环境
proswap your-clone-name
3 显卡需求
GPU requirement | Supported |
---|---|
GPU 类型 | 只能是 NVIDIA 显卡,CUDA 计算能力最低 3.7,最好是 6.1 以上。参阅 CUDA-enabled cards 列表来确定 GPU 的计算能力。 |
GPU 驱动 | NVIDIA GPU drivers — version 456.38 or higher is required. |
GPU 显存 | 最小: 4GB 推荐: 8GB 及以上, 这取决于深度学习模型架构和所使用的批处理大小 |
4 测试环境是否安装成功
在终端输入python
进入 python 控制台或者在 jupyter notebook 分别运行运行以下两行命令:
import torch
print(torch.cuda.is_available())
无报错则安装成功,第二行输出“True”则代表 GPU 可用。
五、示例一:使用 ArcGIS Pro 的深度学习模型提取建筑物轮廓
建筑物轮廓在城市规划和开发的底图和分析工作流中非常有用。通常他们被称作建筑足迹(Building Footprint)。往常,建筑足迹需要进行手动的绘制,耗时费力。深度学习模型能够学习这种复杂的工作流程,并生成高质量的结果。
本示例使用了esri_analytics提供的深度学习模型,从 8 位,3 波段高分辨率(15-25 厘米)图像中提取包含建筑足迹的要素类(如下图红色区域)。
ArcGIS 官方提供的预训练模型还有汽车检测 - 美国,云掩膜生成 (Sentinel-2),人体检测(无人机影像),土地覆盖分类 (Sentinel-2),土地覆盖分类 (Landsat 8),道路提取-全球 ,太阳能板检测 - 美国,树木检测,水体提取 (SAR) - 美国等等。
1.模型的详细信息
- 输入 - 栅格、镶嵌数据集或影像服务。
- 输出 - 包含建筑物覆盖区的要素类。
- 计算 - 此为计算密集型工作流,建议使用计算能力为 6.0 或以上的 GPU。
- 适用地理位置 - 此模型适用于中国的城市区域。
- 架构 - 此模型使用 ArcGIS API for Python 中实施的 MaskRCNN 模型架构。
- 准确率指标 - 此模型的平均精确率得分为 0.58。
2.下载模型
访问arcgis 网站进行下载,也可以从 ArcGIS Pro 直接访问模型,或在 ArcGIS Image for ArcGIS Online 中使用模型。
3.准备影像
具有以下特征的正射校正影像(动态或持续性正射产品):
- 分辨率 - 高分辨率(15 - 25 厘米)
- 位深度 - 8 位无符号
- 波段 - 三个波段(例如,红色、绿色和蓝色)
偏离像底点的影像或具有高倾斜角度的影像无法生成合适的结果,可以通过建筑物底面和屋顶的偏离角度来判断。
首先我们创建一个工程,使用我们创建的深度学习环境。
打开工程后,导入栅格数据,这里我导入了广东某市旧城片区的 19 级谷歌卫星影像图,右键在数据库中创建一个面对象的要素类,创建一个面作为边框。之后进行投影栅格
的操作:
4.使用模型进行建筑足迹检测
在影像分析模块下找到深度学习中的使用深度学习检测对象
工具,在参数对话框下填入输入栅格,在模型定义字段中选择BuildingFootprintExtraction_China.dlpk
模型,这是 arcgis 自己的模型文件。等待一会之后,对话框会加载出默认参数:
参数 | 说明 |
---|---|
Padding | 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 增加此值以减少边伪影,使输出更加平滑。 内边距的最大值可以是切片大小值的一半。 |
batch_size | 模型推断每个步骤中处理的影像切片数。 这取决于显卡的内存。 |
threshold | 二值化阈值,0 到 1 之间,用来控制图像分割的预制。 |
return_bboxes | 如果值为 True,则工具返回的结果将在检测到的要素周围绘制边界框。 |
tile_size | 影像切片的宽度和高度,影像将按照此值分割以进行预测。 |
非极大值抑制 | 使用非极大值抑制参数标识和移除对象检测中重复的要素。 |
参数面板也需要调整,像元大小调整到 0.1,处理器选择 GPU,处理范围选择当前显示范围:
分割之后的结果为:
5.规则化建筑足迹
分为两步
第一步使用成对融合
工具:
单击地理处理窗格中的工具箱选项卡,展开分析工具,然后浏览至成对融合工具。运行工具后
第二步使用规则化建筑物覆盖区
工具:
单击地理处理窗格中的工具箱选项卡,展开 3D Analyst 工具,然后浏览至规则化建筑物覆盖区工具。
方法(可选)- 选择直角。 将容差值设置为 2,将精度值设置为 0.25。
最终输出的效果如上图所示,可能是由于卫星图精度不够,很难达到预想的效果。
后面又换了一个精度比较高的卫星图航拍影像,测试结果如下:
对比官方图还是差距比较大,只适合类似于下图图示较为规则的建筑,复杂的建筑很难达到效果。
六、示例二:使用 ArcGIS Pro 的深度学习模型对卫星图进行车辆计数
相比于识别建筑足迹,识别车辆会简单很多,我使用的模型是官方提供的汽车检测 - 美国模型。
1 准备卫星图
添加三波段卫星影像(5 - 20 厘米空间分辨率),然后放大到感兴趣区域。同样的我们使用深度学习检测对象
工具,参数如下:
环境如下:
2 进行深度学习检测
方法和示例一一样,我们直接看处理结果:
红色方框框出的汽车表示识别出的汽车。
出来的识别准确率还是比较高的,除了被树遮住一半以上的车辆、以及防晒布包裹的车辆,其它的车都能准确识别。
生成的面要素我们查看其属性表,包含 OID、置信度、面积等,初步可以统计识别区内车辆的数量:
其他的模型使用方法一样,大家可以自己试一试!
【更多官方使用 ArcGIS Pro 进行深度学习案例】:
-
从切片影像图层中提取建筑物,并应用深度学习和自定义栅格函数以进行山体滑坡敏感性分析。
-
在 ArcGIS Pro 中使用深度学习分类对象(最完整的一个案例)
在毁灭性的伍尔西大火后对房屋执行自动损失评估。
2018 年伍尔西大火烧毁了南加州数千英亩的土地。过去,分析人员必须手动查看航空图像才能确定建筑物损坏的范围。深度学习可以自动化这个过程。在此 ArcGIS 实验室中,您将扮演野火分析师的角色。首先,您将准备航空图像和训练样本数据。然后,您将训练深度学习模型以将建筑物分类为损坏或未损坏。最后,您将应用并评估模型的准确性。
-
在本教程中,您将准备并训练一个深度学习模型,以使用 2016 年的 Landsat 8 影像识别这些森林。 然后,您将从 2021 年开始在影像上为同一研究区域部署模型,以了解红树林的范围随时间变化的情况。 这些结果有助于资源保护管理者更好地了解森林如何受到自然和建筑环境的影响。
文章索引
【ArcGIS Python 系列】系列笔记为学习 ArcGIS Pro 和
Arcpy
过程中的总结,记下来方便回看,最新版本会优先发布在我的博客和GITHUB。
【ArcGIS Python 系列】教程部分:
- 一、Arcpy 介绍和安装【ArcGIS Python 系列】
- 二、ArcGIS Pro 和 ArcMap 的区别【ArcGIS Python 系列】
- 三、Arcpy 基础【ArcGIS Python 系列】
- 四、探索空间数据【ArcGIS Python 系列】
- 五、处理地理数据异常【ArcGIS Python 系列】
- 六、处理几何数据【ArcGIS Python 系列】
- 七、处理栅格数据【ArcGIS Python 系列】
- 八、制图模块【ArcGIS Python 系列】
- 九、自定义工具箱【ArcGIS Python 系列】
- 十、ArcGIS_Pro 常见问题【ArcGIS Python 系列】
- 利用 ArcGIS Python 批量处理地理数据的坐标系
- 使用 ArcGIS Python 检测洪水影像的区域
- 利用 ArcGIS_Python 制作考虑路况的交通等时圈
- 利用 ArcGIS Pro 制作弧线 OD 图【ArcGIS Python 系列】
- 使用 ArcGIS Pro 对卫星图进行建筑轮廓识别和车辆检测
- ArcGIS_Pro 官方课程整理
- 持续更新…
【ArcGIS Python 系列】jupyter notebook:
- 4.2.3-arcpy 基础(代码练习).ipynb
- 4.2.4-探索空间数据(代码练习).ipynb
- 4.2.5-示例 1:使用 Arcpy 进行 GIS 人口空间分布数据探索.ipynb
- 4.2.7-处理几何数据代码练习和示例 2.ipynb
- 4.2.8-栅格数据(代码练习).ipynb
- 4.2.9-制图模块.ipynb
- 4.2.12-实操 1-利用 Python 批量处理地理数据的坐标系.ipynb
- 4.2.13-实操 2-使用 Python 对图像中的洪水进行分类.ipynb
- 4.2.14-实操 3-制作考虑路况的交通等时圈.ipynb
如果你觉得本系列文章有用,欢迎关注博客,点赞 👍 和收藏,也欢迎在评论区讨论,也欢迎访问我的爱发电支持我,或者对此文章进行赞赏。
更多
PyTorch 深度学习系列课程介绍
状态 | 简介 |
---|---|
01-PyTorch 基础知识 | 本章将介绍本章将介绍在 PyTorch 中,机器学习和深度学习的基本构建模块——张量(tensor )。 |
02-快速入门:使用 PyTorch 进行机器学习和深度学习的基本工作流程 | 通过训练和使用线性回归模型来介绍标准 PyTorch 工作流程。 |
03-使用 PyTorch 处理最简单的神经网络分类任务 | 使用 PyTorch 解决几个不同的分类问题。 |
04-一文看懂什么是卷积神经网络? | 介绍卷积神经网络的相关知识,并利用卷积网络来处理和分类图像。 |
05-PyTorch 自定义数据集 Datasets、Loader 和 tranform | 使用 torchvision.datasets 以及我们自己的自定义 Dataset 类来加载食物图像,然后我们将构建一个 PyTorch 计算机视觉模型,对三种食物进行分类。 |
06-PyTorch 迁移学习:在预训练模型上进行训练 | 使用 PyTorch 利用预训练模型来进行训练。 |
07-从头开始创建一个 Vision Transformer (ViT) | PyTorch 是机器学习研究中最受欢迎的深度学习框架,让我们通过复制机器学习论文来了解原因。 |