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

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

文章目录

  • 一文搞懂如何使用ArcGIS API for Python训练深度学习模型
  • 写在前面
  • 一、ArcGIS API for Python是什么?
  • 二、在哪个环节使用ArcGIS API for Python
  • 三、如何写代码
  • 总结


写在前面

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

一、ArcGIS API for Python是什么?

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

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

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

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

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

让我们来看一下arcgis.learn模块的东西:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第6张图片
可能会有人问,样本转换工具是干啥的?如果你之前没有接触过编程,(敲黑板)那得特意留意一下我下面讲的内容:

首先,我们使用ArcGIS Pro导出样本之后,是这个样子的:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第7张图片
然后,这个文件夹里面存储着很多图片,是没办法直接使用的,因为他们是存储在计算机磁盘空间中的。因此,要使用这些图片、标签等等,就需要做转化,将样本文件从磁盘空间中加载到计算机内存中。这个时候就需要用到样本转换工具,在Pro中工具(下图中的训练深度学习模型工具)内部其实也封装了这个过程。
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第8张图片
通过使用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

一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第9张图片
prepare_data方法有几个参数需要注意一下:

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

除了一个path是必填的之外,其余的都可以根据实际情况选填。除了上面几个参数之外,接口文档中还有更详细的说明:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第10张图片
一定要学会从接口文档中查看参数信息

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

data.show_batch()


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

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

model = UnetClassifier(data)

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

lr = model.lr_find()
lr

一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第11张图片
这一步是固定写法,就是查找最合适的学习率。学习率查找完成后,便可以训练模型了:

model.fit(200,lr)

一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第12张图片
训练模型中有几个参数注意一下:

  • epochs:必填,训练轮数。

  • lr:必填,学习率。

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

在接口文档中,此部分要找到对应的模型下面,查接口参数:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第13张图片
训练完成之后,可以查看一下损失曲线:

model.plot_losses()

一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第14张图片
固定写法,不需要改动。

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

model.show_results()

一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第15张图片
左边为真实标签,右边为当前模型推理所得。这种方法可以很直观的看到模型的表现如何。另外除了此种方法之外,还有其他精度指标可查看:

model.mIOU()

在这里插入图片描述
因为是图像分割,所以比较在意mIOU,其他的模型视情况选择精度指标查看。接口文档中都可以查到,比如说本文中用到的mIOU指标,在接口文档中查看:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第16张图片
如果说,你对模型满意的话,便可以使用model.save方法保存模型了:

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

固定写法,替换掉文件夹路径即可。到文件夹中查看如下:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第17张图片
然后便可以使用ArcGIS Pro进行推理了。推理阶段在此处就不讲了。

总结

肯定有人看完上面,觉得还不是很清晰,不会咋办。那你来打我,其实改动的地方很少的,我们来看一下去掉每一行运行结果后的完整代码:
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第18张图片
其中小部分都是固定写法,大部分都是固定格式,小部分需要根据模型不同更改写法。

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

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

  • ArcGIS Pro深度学习初体验(下)

  • 超分辨率,来了!!!

  • 利用深度学习检测路面损坏情况

  • 【实操】使用ArcGIS的像素分类模型提取道路

喜欢就点赞、关注、转发吧,还有不要问我点赞、关注、转发之后可不可以来打我
一文搞懂如何使用ArcGIS API for Python训练深度学习模型_第19张图片

你可能感兴趣的:(ArcGIS,Pro,python,DeepLearning)