一文搞懂如何使用ArcGIS API for Python训练深度学习模型

一文搞懂如何使用ArcGIS API for Python训练深度学习模型


写在前面

其实ArcGIS API for Python真的很简单,即使你不懂python,看了我这篇文章之后还不会,你就来打我。当然,我是讲武德的。还有那些有需求的还不看这篇文章的,我劝你们耗子尾汁!

一、ArcGIS API for Python是什么?

可能很多小伙伴都不知道这个是什么,其实直译就可以了:面向python的ArcGIS相关功能接口。在Pro的Python管理器中查看是这样的:
在这里插入图片描述
从说明里面能到到,它主要是服务于Online以及Enterprise,其实就是server、portal那一套。空口说无凭证,我们直接从接口文档里面看功能。
在这里插入图片描述
上图中跟我们有关的是arcgis.learn(深度学习)模块,其余的部分在本文中不会提到。如果想学习的话,可以参考官网的教程以及示例笔记本(notebook),里面很详细的。
在这里插入图片描述
官网地址点击文末蓝色阅读原文即可访问,或者复制下面的链接:

https://developers.arcgis.com/python/

其中最重要的是需要看Sample Notebooks,里面讲的很全很详细(墙裂推荐)。这个部分,可以根据自己需求选择性的去看某一部分。
在这里插入图片描述
那咱们主要是深度学习,就看上图中的第三部分就好了(友情提示,第三部分很多示例笔记本)。随便点一个深度学习相关的,比如说之前公众号中写过的《利用深度学习检测路面损坏情况》:
在这里插入图片描述

二、在哪个环节使用ArcGIS API for Python

在深度学习工作流中,老三步:样本制作 -> 模型训练 -> 推理。其中使用ArcGIS API for Python的是模型训练环节,其实推理阶段倒不是不能使用API去做,只是你需要一个Image Server,当然如果有多个的话,还是很推荐你使用集群去做推理的。

让我们来看一下arcgis.learn模块的东西:
在这里插入图片描述
可能会有人问,样本转换工具是干啥的?如果你之前没有接触过编程,(敲黑板)那得特意留意一下我下面讲的内容:

首先,我们使用ArcGIS Pro导出样本之后,是这个样子的:
在这里插入图片描述
然后,这个文件夹里面存储着很多图片,是没办法直接使用的,因为他们是存储在计算机磁盘空间中的。因此,要使用这些图片、标签等等,就需要做转化,将样本文件从磁盘空间中加载到计算机内存中。这个时候就需要用到样本转换工具,在Pro中工具(下图中的训练深度学习模型工具)内部其实也封装了这个过程。
在这里插入图片描述
通过使用API会让你看到更多工具内部看不到的过程,可能第一次会有所疑惑,用多了就懂了。

关于模型那块是干嘛的就不用我说啦吧,但是其实你发现,ArcGIS API for Python的模型比ArcGIS Pro中的要多很多。所以强烈推荐你们使用API做训练,因为有更多模型,而且不管是ArcGIS Pro训练深度学习模型工具中有没有的模型,都可以使用Pro去做推理。唯一一个需要注意的是API与Pro的版本对应关系,所以建议你们使用最新版本Pro。

另外,API是完全开源的,有兴趣的话可以去github上查看更多源码。

三、如何写代码

好了,看完上面之后下面可以愉快的coding了。真的很简单,你们信我。而且简单的同时你可以训练出世界顶级模型(这句话可不是我说的,是fastai作者说的)。因为arcgis.learn模块内部其实封装的是fastai框架,这个框架的作者在kaggle上很出名的,感兴趣的可以查一下。

不说那么多其他的,那就,来吧,展示:

首先打开notebook,没有用过的可以参考我之前的文章:《为什么选择在Jupyter Notebook中编写代码》,然后导包:

from arcgis.learn import prepare_data,UnetClassifier

其中prepare_data是样本转换工具,UnetClassifer是模型,在本场景中使用的是像素分类,小麦提取。你可以按照自己需求去导入模型,代码上差异并不是很大。

另外不同场景的模型在之前的文章中有总结过:《ArcGIS API for Python:深度学习模块概览》,不熟悉的可以点击查看。

然后使用prepare_data将样本加载到内存中:

# path是样本文件夹路径
path = r'E:\deeplearning\data\dongxiaomai\xiaomai_samplearea_tra30'
data = prepare_data(path,batch_size=16,val_split_pct=0.2)
data

在这里插入图片描述
prepare_data方法有几个参数需要注意一下:

  • path:样本文件夹,必填。
  • chip_size:样本切片大小。
  • val_split_pct:验证集划分比重。
  • bach_size:批大小。

除了一个path是必填的之外,其余的都可以根据实际情况选填。除了上面几个参数之外,接口文档中还有更详细的说明:
在这里插入图片描述
一定要学会从接口文档中查看参数信息

在加载完数据值后,还可以查看一下我们的样本数据大概都是啥样的:

data.show_batch()

在这里插入图片描述
上图中红色半透明部分是我标注的样本,在data.show_batch方法里,会将样本叠在原始影像上,从而很方便的查看一个batch中的数据是啥样的。你可以多运行几次这行代码看看。

数据加载完成后,便可以实例化我们的模型:

model = UnetClassifier(data)

这一步就很简单了,直接模型括号里面填上上一部中加载的样本对象。然后使用model.lr_find()函数查找学习率:

lr = model.lr_find()
lr

在这里插入图片描述
这一步是固定写法,就是查找最合适的学习率。学习率查找完成后,便可以训练模型了:

model.fit(200,lr)

在这里插入图片描述
训练模型中有几个参数注意一下:

  • epochs:必填,训练轮数。

  • lr:必填,学习率。

  • early_stopping:选填,在模型停止改进时停止训练。

在接口文档中,此部分要找到对应的模型下面,查接口参数:
在这里插入图片描述
训练完成之后,可以查看一下损失曲线:

model.plot_losses()

在这里插入图片描述
固定写法,不需要改动。

还可以使用model.show_results方法查看当前模型在验证集上的表现情况:

model.show_results()

在这里插入图片描述
左边为真实标签,右边为当前模型推理所得。这种方法可以很直观的看到模型的表现如何。另外除了此种方法之外,还有其他精度指标可查看:

model.mIOU()

在这里插入图片描述
因为是图像分割,所以比较在意mIOU,其他的模型视情况选择精度指标查看。接口文档中都可以查到,比如说本文中用到的mIOU指标,在接口文档中查看:
在这里插入图片描述
如果说,你对模型满意的话,便可以使用model.save方法保存模型了:

model.save(r'E:\deeplearning\model\dongxiaomai\unet_batchsize16_chipsize224_acc86')

固定写法,替换掉文件夹路径即可。到文件夹中查看如下:
在这里插入图片描述
然后便可以使用ArcGIS Pro进行推理了。推理阶段在此处就不讲了。

总结

肯定有人看完上面,觉得还不是很清晰,不会咋办。那你来打我,其实改动的地方很少的,我们来看一下去掉每一行运行结果后的完整代码:
在这里插入图片描述
其中小部分都是固定写法,大部分都是固定格式,小部分需要根据模型不同更改写法。

这么短几行代码,你去写一个月,还不会,那你来打我。会不会python影响的已经不大了,折腾吧。不得不吹一下,把深度学习封装成如此简洁易用,确实很厉害。

还有之前写过的几篇教程以及大佬写的教程,大家可以拿去练手,基本上都可以获取到数据:

喜欢就点赞、关注、转发吧,还有不要问我点赞、关注、转发之后可不可以来打我
在这里插入图片描述

### 如何在 ArcGIS Pro 中使用深度学习进行影像转换 #### 工具概述 ArcGIS Pro 提供了一套完整的工具链来处理深度学习任务中的影像数据准备、模型训练和预测应用。其中,`深度学习导出训练数据工具` 是用于生成适合机器学习框架(如 TensorFlow 或 PyTorch)使用的标注数据集的关键组件[^1]。 #### 数据准备流程 为了实现影像转换的目标,在 ArcGIS Pro 的工作流中需要完成以下几个核心操作: 1. **设置输入栅格** 需要在 `深度学习导出训练数据工具` 中指定输入栅格文件作为基础影像源。如果涉及多波段或多光谱影像,则可以通过 `附加输入栅格` 参数引入其他相关影像层。 2. **定义切片参数** 利用该工具的选项配置输出图像芯片的尺寸、重叠比例以及其他属性。这些参数直接影响最终生成的数据质量及其适配特定神经网络架构的能力。 3. **调用 prepare_data 函数** 将上述步骤产生的元数据传递至 Python 脚本环境下的 `arcgis.learn.prepare_data()` 方法,进一步整理成标准格式以便后续建模阶段加载使用。 ```python from arcgis.learn import prepare_data data = prepare_data( path_to_exported_tiles, chip_size=256, batch_size=8, model_architecture="unet" ) ``` 此处展示了如何通过代码接口读取由前序环节所生产的片段集合,并初始化一个适用于语义分割任务 (采用 U-Net 架构) 的批次迭代器实例。 #### 结果可视化与评估 除了基本的数据预处理之外,借助于 ArcGIS API for JavaScript 这样的前端库还可以增强交互体验效果。例如展示不同模式下地理实体间的关系或者动态调整渲染样式等功能特性均有助于深入理解转化后的成果表现形式[^2]。 最后值得一提的是,《基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局技术》一文中提到的技术思路或许能够为更复杂的场景分析提供灵感来源[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值