概述
一文搞懂如何使用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管理器中查看是这样的:
从说明里面能到到,它主要是服务于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:deeplearningdatadongxiaomaixiaomai_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:deeplearningmodeldongxiaomaiunet_batchsize16_chipsize224_acc86')
固定写法,替换掉文件夹路径即可。到文件夹中查看如下:
然后便可以使用ArcGIS Pro进行推理了。推理阶段在此处就不讲了。
总结
肯定有人看完上面,觉得还不是很清晰,不会咋办。那你来打我,其实改动的地方很少的,我们来看一下去掉每一行运行结果后的完整代码:
其中小部分都是固定写法,大部分都是固定格式,小部分需要根据模型不同更改写法。
这么短几行代码,你去写一个月,还不会,那你来打我。会不会python影响的已经不大了,折腾吧。不得不吹一下,把深度学习封装成如此简洁易用,确实很厉害。
还有之前写过的几篇教程以及大佬写的教程,大家可以拿去练手,基本上都可以获取到数据:
-
ArcGIS Pro深度学习初体验(下)
-
超分辨率,来了!!!
-
利用深度学习检测路面损坏情况
-
【实操】使用ArcGIS的像素分类模型提取道路
喜欢就点赞、关注、转发吧,还有不要问我点赞、关注、转发之后可不可以来打我
最后
以上就是顺心苗条为你收集整理的一文搞懂如何使用ArcGIS API for Python训练深度学习模型一文搞懂如何使用ArcGIS API for Python训练深度学习模型写在前面一、ArcGIS API for Python是什么?二、在哪个环节使用ArcGIS API for Python三、如何写代码总结的全部内容,希望文章能够帮你解决一文搞懂如何使用ArcGIS API for Python训练深度学习模型一文搞懂如何使用ArcGIS API for Python训练深度学习模型写在前面一、ArcGIS API for Python是什么?二、在哪个环节使用ArcGIS API for Python三、如何写代码总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复