本文简述了当今火爆的“深度学习”是什么,以及如何在ArcGIS Pro进行深度学习的环境配置,最后通过使用建筑轮廓识别和识别车辆两个示例进行演示。本文首发在我的博客[1],可以点击底部阅读原文跳转。
目录:
一、“机器学习”是什么
- 二、机器学习的应用
- 应用机器学习的示例
- 三、ArcGIS Pro中深度学习
- 1 影像分类
- 2 对象检测
- 3 语义分割
- 4 实例分割
- 5 影像转换
- 6 变化检测
- 四、ArcGIS Pro中深度学习环境的配置
- 1 自动安装(推荐):
- 2 手动安装:
- 3 显卡需求
- 4 测试环境是否安装成功
- 五、示例一:使用ArcGIS Pro的深度学习模型提取建筑物轮廓
- 1.模型的详细信息
- 2.下载模型
- 3.准备影像
- 4.使用模型进行建筑足迹检测
- 5.规则化建筑足迹
- 六、示例二:使用ArcGIS Pro的深度学习模型对卫星图进行车辆计数
- 1 准备卫星图
- 更多
- PyTorch深度学习系列课程介绍
一、“机器学习”是什么
“机器学习”一词的火爆程度无需多言,今年ChatGPT的火爆让每一个都了解到了“人工智能”的巨大潜力。虽然你或多或少接触到“机器学习”、“人工智能”、“深度学习”这些概念,但是依旧会觉得很模糊,容易混淆。
以下图表展示了“人工智能(AI)”,“机器学习(ML)”,“深度学习(deep learning)”和“数据科学(data science)”之间的关系。机器学习是人工智能的一个分支,它使用算法来处理结构化数据以解决问题。传统的结构化数据需要用户对数据进行标记,例如将猫和狗的图片进行标记,以使算法能够理解这些动物类型的特征,并能够在其他图片中识别它们。
深度学习是机器学习的一种子集,它使用具有多层算法的神经网络。通过不同的网络层对输入数据进行分析,每一层都定义了数据中特定的特征和模式。例如,如果您希望识别建筑物和道路等要素,您可以使用包含不同建筑物和道路图像的训练集来训练深度学习模型。该模型通过神经网络中的各个层对图像进行处理,并找到用于对建筑物或道路进行分类的特定标识符。
此图由 Jen Looper[2] 创作,灵感来自此图 this graphic[3] 。
AI, ML, deep learning, data science
二、机器学习的应用
机器学习的应用现在几乎无处不在,它就像我们的智能手机、联网设备和其他系统生成的数据一样无处不在。考虑到最先进的机器学习算法的巨大潜力,研究人员一直在探索它们解决多维和多学科现实问题的能力,并取得了巨大的积极成果。
应用机器学习的示例
您可以通过多种方式使用机器学习:
- 从病人的病史或报告中预测疾病的可能性。
- 利用天气数据来预测天气事件。
- 理解一篇文章的情感。
- 为了检测假新闻,以阻止宣传的传播。
金融、经济、地球科学、空间探索、生物医学工程、认知科学,甚至人文领域都采用了机器学习来解决其领域中艰巨的数据处理问题。
更多机器学习和深度学习的内容可以关注我的博客[4]或者微信公众号合集:
三、ArcGIS Pro中深度学习
单独使用Python的深度学习包也可以完成深度学习的任务,但是Python语言并不能完成很方便的进行深度学习全流程的操作,比如用于对象检测和语义分割的YOLOv8[5],在训练模型时要使用其他软件来进行标签(LABEL)数据集的制作,而使用ArcGIS Pro可以支持深度学习全流程,同时满足数据标注、推理、预测、样本导出、后处理工具(栅格砖面、规则化建筑物面)需求。具体有以下6类应用:
1 影像分类
图像分类涉及为数字图像分配标注或类。可以在 GIS 中用于对图像中的要素进行分类。
2 对象检测
对象检测是在图像中定位要素的过程。可以在 GIS 中使用它来定位卫星、航空或无人机影像中的特定要素并在地图上绘制这些要素。
计算机视觉中的目标检测
3 语义分割
当图像中的每个像素被归为一类时,将会进行语义分割。 在 GIS 中,这通常被称为像素分类、图像分割或图像分类。它通常用于创建土地利用分类地图。
计算机视觉中的语义分割
4 实例分割
实例分割是一种更加精确的对象检测方法,将在其中绘制每个对象实例的边界。
计算机视觉中的实例分割
5 影像转换
超分辨率示例
6 变化检测
变化检测深度学习任务可以检测两个日期之间感兴趣要素的变更,并生成变化的逻辑图。
深度学习变化检测
四、ArcGIS Pro中深度学习环境的配置
ArcGIS Pro 中的所有深度学习地理处理工具都要求安装支持的深度学习框架库。
1 自动安装(推荐):
参考 ArcGIS Pro 的深度学习库安装程序[6],我们采用下载安装包自动安装的方式,只需要下载特定版本的安装包然后运行安装程序即可。
2 手动安装:
参考Install Offline 脱机安装[7]和深度学习库安装程序[8]之后,我们使用conda安装含有深度学习的Python环境:
1.打开终端,使用以下命令安装:
代码语言:javascript复制conda create -n your-clone-name --clone arcgispro-py3 --pinned
建议clone环境而不是从0安装arcpy
2.激活环境
代码语言:javascript复制activate your-clone-name
3.安装deep learning
代码语言:javascript复制conda install deep-learning-essentials
4.将默认环境切换到深度学习环境
代码语言:javascript复制proswap your-clone-name
3 显卡需求
GPU requirement | Supported |
---|---|
GPU 类型 | 只能是NVIDIA显卡,CUDA计算能力最低3.7,最好是 6.1以上。参阅 CUDA-enabled cards[9] 列表来确定GPU的计算能力。 |
GPU驱动 | NVIDIA GPU drivers[10] — 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官方提供的预训练模型还有汽车检测 - 美国[11],云掩膜生成 (Sentinel-2)[12],人体检测(无人机影像)[13],土地覆盖分类 (Sentinel-2)[14],土地覆盖分类 (Landsat 8)[15],道路提取-全球[16] ,太阳能板检测 - 美国[17],树木检测[18],水体提取 (SAR) - 美国[19]等等。
建筑物提取示意图
1.模型的详细信息
- 输入 - 栅格、镶嵌数据集或影像服务。
- 输出 - 包含建筑物覆盖区的要素类。
- 计算 - 此为计算密集型工作流,建议使用计算能力为 6.0 或以上的 GPU。
- 适用地理位置 - 此模型适用于中国的城市区域。
- 架构 - 此模型使用 ArcGIS API for Python 中实施的 MaskRCNN[20] 模型架构。
- 准确率指标 - 此模型的平均精确率得分为 0.58。
2.下载模型
访问arcgis网站[21]进行下载,也可以从 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 | 影像切片的宽度和高度,影像将按照此值分割以进行预测。 |
非极大值抑制 | 使用非极大值抑制参数标识和移除对象检测中重复的要素。 |
1.参数设置
参数面板也需要调整,像元大小调整到0.1,处理器选择GPU,处理范围选择当前显示范围:
2.环境设置
分割之后的结果为:
分割之后
5.规则化建筑足迹
分为两步
第一步使用成对融合
工具:
单击地理处理窗格中的工具箱选项卡,展开分析工具,然后浏览至成对融合[22]工具。运行工具后
成对融合之后
第二步使用规则化建筑物覆盖区
工具:
单击地理处理窗格中的工具箱选项卡,展开 3D Analyst 工具,然后浏览至规则化建筑物覆盖区[23]工具。
方法(可选)- 选择直角。将容差值设置为 2,将精度值设置为 0.25。
成果图
最终输出的效果如上图所示,可能是由于卫星图精度不够,很难达到预想的效果。
后面又换了一个精度比较高的卫星图航拍影像,测试结果如下:
成果图
对比官方图还是差距比较大,只适合类似于下图图示较为规则的建筑,复杂的建筑很难达到效果。
包含标准化建筑物覆盖区的输出要素图层
六、示例二:使用ArcGIS Pro的深度学习模型对卫星图进行车辆计数
相比于识别建筑足迹,识别车辆会简单很多,我使用的模型是官方提供的汽车检测 - 美国[24]模型。
1 准备卫星图
添加三波段卫星影像(5 - 20 厘米空间分辨率),然后放大到感兴趣区域。同样的我们使用深度学习检测对象
工具,参数如下:
1.参数设置
环境如下:
2.环境设置
2 进行深度学习检测
方法和示例一一样,我们直接看处理结果:
检测结果
红色方框框出的汽车表示识别出的汽车。
出来的识别准确率还是比较高的,除了被树遮住一半以上的车辆、以及防晒布包裹的车辆,其它的车都能准确识别。
生成的面要素我们查看其属性表,包含OID、置信度、面积等,初步可以统计识别区内车辆的数量:
检测到车辆要素的属性表
其他的模型使用方法一样,大家可以自己试一试!
更多:
【ArcGIS Python系列】系列笔记为学习ArcGIS Pro和ArcPy过程中的总结,记下来方便回看,最新版本会优先发布在我的博客[25]和GITHUB[26]。
【ArcGIS Python系列】教程部分:
- 一、Arcpy介绍和安装【ArcGIS Python系列】[27]
- 二、ArcGIS Pro和ArcMap的区别【ArcGIS Python系列】[28]
- 三、Arcpy基础【ArcGIS Python系列】[29]
- 四、探索空间数据【ArcGIS Python系列】[30]
- 五、处理地理数据异常【ArcGIS Python系列】[31]
- 六、处理几何数据【ArcGIS Python系列】[32]
- 七、处理栅格数据【ArcGIS Python系列】[33]
- 八、制图模块【ArcGIS Python系列】[34]
- 九、自定义工具箱【ArcGIS Python系列】[35]
- 十、ArcGIS_Pro常见问题【ArcGIS Python系列】[36]
- 4.2.12-实操1-使用ArcGIS_Python检测洪水影像的区域.ipynb[39]
- 4.2.13-实操2-使用 Python 对图像中的洪水进行分类.ipynb[40]
- 4.2.14-实操3-利用ArcGIS_Python制作考虑路况的交通等时圈.ipynb[41]
- 使用ArcGIS Pro对卫星图进行建筑底面识别和车辆检测[42]
更多
PyTorch深度学习系列课程介绍
状态 | 简介 |
---|---|
01-PyTorch基础知识[47] | 本章将介绍本章将介绍在PyTorch中,机器学习和深度学习的基本构建模块——张量(tensor)。 |
02-快速入门:使用PyTorch进行机器学习和深度学习的基本工作流程[48] | 通过训练和使用线性回归模型来介绍标准 PyTorch 工作流程。 |
03-使用PyTorch处理最简单的神经网络分类任务[49] | 使用 PyTorch 解决几个不同的分类问题。 |
04-一文看懂什么是卷积神经网络?[50] | 介绍卷积神经网络的相关知识,并利用卷积网络来处理和分类图像。 |
05-PyTorch自定义数据集Datasets、Loader和tranform[51] | 使用 torchvision.datasets 以及我们自己的自定义 Dataset 类来加载食物图像,然后我们将构建一个 PyTorch 计算机视觉模型,对三种食物进行分类。 |
06-PyTorch迁移学习:在预训练模型上进行训练[52] | 使用PyTorch利用预训练模型来进行训练。 |
07-从头开始创建一个 Vision Transformer (ViT)[53] | PyTorch是机器学习研究中最受欢迎的深度学习框架,让我们通过复制机器学习论文来了解原因。 |
参考资料
[1]
我的博客: https://cdn.renhai-lab.tech/
[2]
Jen Looper: https://twitter.com/jenlooper
[3]
this graphic: https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining
[4]
我的博客: https://cdn.renhai-lab.tech/categories/deep-learning
[5]
YOLOv8: https://github.com/DataXujing/YOLOv8
[6]
深度学习库安装程序: https://links.esri.com/deep-learning-framework-install
[7]
Install Offline 脱机安装: https://developers.arcgis.com/python/guide/install-and-set-up/
[8]
深度学习库安装程序: https://links.esri.com/deep-learning-framework-install
[9]
CUDA-enabled cards: https://developer.nvidia.com/cuda-gpus
[10]
NVIDIA GPU drivers: https://www.nvidia.com/drivers
[11]
汽车检测 - 美国: https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-car-detection-usa.htm
[12]
云掩膜生成 (Sentinel-2): https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-car-detection-usa.htm
[13]
人体检测(无人机影像): https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-human-detection-drone-imagery-.htm
[14]
土地覆盖分类 (Sentinel-2): https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-land-cover-classification-sentinel-2-.htm
[15]
土地覆盖分类 (Landsat 8): https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-common-object-detection.htm
[16]
道路提取-全球: https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-common-object-detection.htm
[17]
太阳能板检测 - 美国: https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-solar-panel-detection-usa.htm
[18]
树木检测: https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-common-object-detection.htm
[19]
水体提取 (SAR) - 美国: https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-common-object-detection.htm
[20]
MaskRCNN: https://developers.arcgis.com/python/guide/how-maskrcnn-works/
[21]
arcgis网站: https://www.arcgis.com/home/item.html?id=fdfc8a925af740a5a4b01061a2d01d09
[22]
成对融合: https://pro.arcgis.com/en/pro-app/2.8/tool-reference/analysis/pairwise-dissolve.htm
[23]
规则化建筑物覆盖区: https://pro.arcgis.com/en/pro-app/latest/tool-reference/3d-analyst/regularize-building-footprint.htm
[24]
汽车检测 - 美国: https://doc.arcgis.com/zh-cn/pretrained-models/latest/imagery/introduction-to-car-detection-usa.htm
[25]
我的博客: https://cdn.renhai-lab.tech/
[26]
GITHUB: https://github.com/renhai-lab
[27]
https://cdn.renhai-lab.tech/archives/4.2.1-Arcpy介绍和安装
[28]
https://cdn.renhai-lab.tech/archives/4.2.2-ArcGIS Pro和ArcMap的区别
[29]
https://cdn.renhai-lab.tech/archives/4.2.3-arcpy基础
[30]
https://cdn.renhai-lab.tech/archives/4.2.4-探索空间数据
[31]
https://cdn.renhai-lab.tech/archives/4.2.6-处理地理数据异常
[32]
https://cdn.renhai-lab.tech/archives/4.2.7-处理几何数据
[33]
https://cdn.renhai-lab.tech/archives/4.2.8-栅格数据
[34]
https://cdn.renhai-lab.tech/archives/4.2.9-制图模块
[35]
https://cdn.renhai-lab.tech/archives/4.2.10-自定义工具箱
[36]
https://cdn.renhai-lab.tech/archives/4.2.11-ArcGIS_Pro常见问题
[37]
https://github.com/renhai-lab/Urban-Spatial-Data-Analysis-Notebook/blob/4846a410da6c1f858ee64b02c14bdf610e08948a/4-空间数据分析/4.2-【ArcGIS Python系列】/4.2.5-示例1:使用Arcpy进行GIS人口空间分布数据探索.ipynb
[38]
https://github.com/renhai-lab/Urban-Spatial-Data-Analysis-Notebook/blob/4846a410da6c1f858ee64b02c14bdf610e08948a/4-空间数据分析/4.2-【ArcGIS Python系列】/4.2.7-处理几何数据代码练习和示例2.ipynb
[39]
https://github.com/renhai-lab/Urban-Spatial-Data-Analysis-Notebook/blob/ead8d339392f3716d9eb5e99e85d4ed3d43c89d8/4-空间数据分析/4.2-【ArcGIS Python系列】/4.2.12-实操1-利用Python批量处理地理数据的坐标系.ipynb
[40]
https://github.com/renhai-lab/Urban-Spatial-Data-Analysis-Notebook/blob/4846a410da6c1f858ee64b02c14bdf610e08948a/4-空间数据分析/4.2-【ArcGIS Python系列】/4.2.13-实操2-使用 Python 对图像中的洪水进行分类.ipynb
[41]
https://github.com/renhai-lab/Urban-Spatial-Data-Analysis-Notebook/blob/4846a410da6c1f858ee64b02c14bdf610e08948a/4-空间数据分析/4.2-【ArcGIS Python系列】/4.2.14-实操3-制作考虑路况的交通等时圈.ipynb
[42]
https://cdn.renhai-lab.tech/archives/4.2.17-arcpy-dl
[43]
我的博客: https://cdn.renhai-lab.tech/
[44]
我的GITHUB: https://github.com/renhai-lab
[45]
我的GITEE: https://gitee.com/renhai-lab
[46]
我的知乎: https://www.zhihu.com/people/Ing_ideas
[47]
01-PyTorch基础知识: https://cdn.renhai-lab.tech/archives/DL-01-pytorch
[48]
02-快速入门:使用PyTorch进行机器学习和深度学习的基本工作流程: https://cdn.renhai-lab.tech/archives/DL-02-pytorch-workflow
[49]
03-使用PyTorch处理最简单的神经网络分类任务: https://cdn.renhai-lab.tech/archives/DL-03-pytorch_classification
[50]
04-一文看懂什么是卷积神经网络?: https://cdn.renhai-lab.tech/archives/DL-04-pytorch_computer_vision
[51]
05-PyTorch自定义数据集Datasets、Loader和tranform: https://cdn.renhai-lab.tech/archives/DL-05-pytorch-custom_datasets
[52]
06-PyTorch迁移学习:在预训练模型上进行训练: https://cdn.renhai-lab.tech/archives/DL-06-pytorch-transfer_learning
[53]
07-从头开始创建一个 Vision Transformer (ViT): https://cdn.renhai-lab.tech/DL-07-pytorch_Vit/