“ 在之前发布的文章中:ArcGIS API for Python:深度学习模块概览 提到了很多计算机视觉领域的深度学习模型。其中大家反馈最多的便是超分辨率模型,今天,它来了。本文会带大家实操体验超分辨率模型,能动手的话就一起折腾吧。”
所有工作开始之前,我们首先检查环境是否满足:
ArcGIS Pro版本:>=2.6
ArcGIS API for Python版本:>=1.8.1
可以直接打开Pro进行确认:
如果环境满足的话,那我们就直接开始吧。还是老一套的深度学习三步走,样本准备->模型训练->推理。有一点需要注意的是,模型训练阶段目前只能使用ArcGIS API for Python进行训练,所以推荐使用Notebook进行模型训练。使用Pro中的Notebook可以参考我上一篇文章:为什么选择在Jupyter Notebook中编写代码 。
样本准备
样本准备阶段,需要在ArcGIS Pro中完成。使用的工具也是我们的熟面孔了:导出训练数据进行深度学习:
你问我使用的数据?,别问,问就是棕榈树。(原谅我没得影像,大伙们有影像可以"借用"的话,可以在讨论区留言或者是进入公众号私发消息给我,定当万分感谢),先看一下影像:
影像获取:关注公众号,回复“超分辨率”获取下载链接。首先进行样本导出:
如果不想导出全图的话,可以导出部分有建筑物的影像,在环境中选择范围就可以了:
导出之后可以查看导出的数据集文件夹:
此时样本数据在Pro中的流程便结束了,后面会使用Python API继续操作,都放在模型训练阶段。
模型训练
接下来使用ArcGIS API for Python进行模型训练,如果你不会Python的话也没关系,跟着折腾就对了,折腾着折腾着说不定就会了。
打开我们的Notebook,首先导入我们需要的Python包:
from arcgis.learn import prepare_data,SuperResolution
然后使用prepare_data方法进行模型训练前最后的数据准备:
#这里的path是上一步中导出的训练数据文件夹
path = r'F:\deeplearning\data\superResolutionTree\data_chip_size512'
data = prepare_data(path,
chip_size=512,
batch_size=4,
dataset_type="superres", # 这个参数必须是这样的
downsample_factor=8) # downsample_factor可以不写
data
在prepare_data方法中有几点需要注意的:
- dataset_type=“superres”,参数必须要填写为superres
- downsample_factor 此参数是为了将我们的训练数据进行下采样得到模糊的图片,也就是我们的label图像,默认值为4,可以不填
数据准备完成后,可以查看一个batch的训练数据:
data.show_batch()
左边的就是我们下采样之后的label图像,右边的是我们的原始图像。
接下来使用SuperResolution模型进行模型训练,首先实例化模型:
model = SuperResolution(data)
然后进行学习率的查找:
lr = model.lr_find()
lr
查找完学习率之后便可以训练模型了:
model.fit(100,lr)
接下来就可以泡杯茶等着了。(不过平时在训练的时候我都会学习一下开源的框架,比如说Fastai、Pytorch。如果有想一起学的话,讨论区扣1或者是公众号私发消息1,整个学习群,打卡学习,共同进步。)
模型训练完后,可以查看一下训练损失曲线:
model.plot_losses()
然后可以查看一下当前模型的效果:
model.show_results()
左中右分别是:需要进行超分辨率重建的低分辨率原始影像、使用模型进行超分辨率重建后的影像以及高分辨率原始影像。
不过超分辨率模型还有一个评价指标不得不提一下:PSNR,知乎上查到的计算公式如下:
数学公式真让人头大,有部分资料帮助大家了解这个指标:
再回到我们的深度学习工作流中来,SuperSolution提供了一个方法来查看PSNR:
model.psnr_metric()
觉得模型效果满意的话,便可以使用model.save方法保存模型:
model.save(r’F:/deeplearning/models/superResolutionTree/tree_SuperResolution_chipsize512_batchsize4_psnr12’)
推理
模型推理阶段可以使用model.predict方法改善图像质量:
model.predict('test.png',height=1024,width=1024)
上面看到的就是我们将256 x 256分辨率放大到1024 x 1024。有一点需要注意的是:模型无法按照直接放大的方式重建图片,在细节方面是根据之前训练时的算法进行重建的。
我们同样可以使用ArcGIS Pro中的工具(使用深度学习分类像素)进行推理:
(在Esri官网案例(文末链接)中超分辨率模型使用场景为:从高分辨率底图卫星影像中训练模型,然后使用模型重建某些无高分辨率的底图卫星影像。但是在我在尝试的过程中发现直接使用卫星底图在国内的网络环境下可能不好使,所以换用了其他的。大家在推理阶段可以多多尝试,本文主主要带大家走一遍流程)
然后用使用深度学习分类像素
工具进行此范围推理:
最后除了不要忘掉在环境中设置处理器类型以及处理范围外,像元大小很重要,决定着我们最终推理得到的影像质量。我们要选择与训练数据一致的像元大小(至少是相似的):
推理前:
推理后:
Esri官网案例:
https://developers.arcgis.com/python/sample-notebooks/increase-image-resolution-using-superresolution/