一文搞懂如何使用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:\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的像素分类模型提取道路

喜欢就点赞、关注、转发吧,还有不要问我点赞、关注、转发之后可不可以来打我

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

  1. rest api是什么_一文搞懂什么是RESTful API

    RESTful接口实战 首发公众号:bigsai 转载请附上本文链接 文章收藏在回车课堂 前言 在学习RESTful 风格接口之前,即使你不知道它是什么,但你肯定会好奇它能解决什么问题?有什么应用场景 ...

  2. 一文读懂机器学习、数据科学、人工智能、深度学习和统计学之间的区别!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 作者:Vincent Granville 来源:机器之心公众号 链接:http://www.d ...

  3. 一文读懂机器学习、数据科学、人工智能、深度学习和统计学之间的区别

    在这篇文章中,数据科学家与分析师 Vincent Granville 明晰了数据科学家所具有的不同角色,以及数据科学与机器学习.深度学习.人工智能.统计学.物联网.运筹学和应用数学等相关领域的比较和重 ...

  4. 一文搞懂 Service Mesh 和 API Gateway 关系和区别

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 关于Service Mesh和API Gateway之间的关系,这个问题过去两年间经常被问起,社区也有不少文章和资 ...

  5. 一文搞懂各大APP!网站python网络爬虫!

    1)爬取汽车之家数据,利用论坛发言的抓取以及NLP,对各种车型的车主做画像. 2 ) 抓取各大电商的评论及销量数据,对各种商品(颗粒度可到款式)沿时间序列的销量以及用户的消费场景进行分析. Pytho ...

  6. 一文搞懂AWS EC2, IGW, RT, NAT, SG 基础篇下

    B站实操视频更新 跟着拉面学习AWS--EC2, IGW, RT, NAT, SG 简介 长文多图预警,看结论可以直接拖到"总结"部分 本文承接上一篇文章介绍以下 AWS 基础概念 ...

  7. 一文搞懂 Traefik2.1 的使用

    原文链接:一文搞懂 Traefik2.1 的使用 一文搞懂 Traefik2.1 的使用 核心概念 安装 ACME 中间件 灰度发布 流量复制 TCP 简单 TCP 服务 带 TLS 证书的 TCP ...

  8. 一文搞懂 Cocos Creator 3.0 坐标转换原理

    一文搞懂 Cocos Creator 3.0 坐标转换原理 屏幕坐标 UI 触点坐标 UI 多分辨率适配方案 UI 触点获取 不同坐标之间的转换 屏幕坐标与 3D 节点世界坐标互转 3D 节点之间的坐 ...

  9. ES6学习——一文搞懂ES6

    ES6学习--一文搞懂ES6 es6介绍 ES全称EcmaScript,是脚本语言的规范,而平时经常编写的EcmaScript的一种实现,所以ES新特性其实就是指JavaScript的新特性. 为什么 ...

最新文章

  1. Gluster 常用命令
  2. Apache Kafka源码分析 – Log Management
  3. 学习vue的双向数据绑定的原理
  4. 我们为什么不能只用O记号来谈论算法?
  5. java word转pdf linux_Linux平台中使用PHP把word转pdf的实现方法
  6. 公司这套架构统一处理try...catch这么香,求求你不要再满屏写了,再发现扣绩效!...
  7. 男人 30 岁前要做的 22 件事
  8. 机器心理学家:可能是未来唯一不会被AI取代的职业
  9. 《犯罪心理学》读书笔记(part10)--犯罪心理的性别差异(上)
  10. android星星闪效果,css3夜空中闪烁的星星效果
  11. 极坐标可以用计算机吗,极坐标
  12. 垃圾网线,毁我青春(ubuntu安装失败)
  13. 打开APP validate fail
  14. Docker 制作带有中文字体的镜像
  15. MySQL + navicat
  16. 乐信、趣店同源“异路”
  17. 再见,Java 8!Java 17 发布,堪称史上最快的 JDK
  18. 如何用python点亮一盏灯
  19. 电解电容使用久了电容量真的会下降吗?
  20. rust各地辐射值_辐射率表

热门文章

  1. 汉仪尚巍手书_汉仪尚巍手书
  2. 初学者如何从零开始学习人工智能?看完你就懂了
  3. 城镇固定资产投资增速27.6%
  4. Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)
  5. php fopen创建文件,php fopen函数用法(打开创建文件)
  6. mysql 性能分析之 profiling
  7. 电脑莫名奇妙上不去网怎么办,简单2行指令全解决ipconfig/release和ipconfig/renew
  8. 大数据NiFi(七):NiFi集群页面管理节点操作
  9. FFT :100 Gsps 数据吞吐率的高度并行4096点FFT
  10. python自动化定位方式