ArcGIS Pro中使用超分辨率

ArcGIS Pro中使用超分辨率

“ 在之前发布的文章中: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/

在这里插入图片描述

### 如何在 ArcGIS 中确定地或影像的分辨率 #### 使用属性表法确定影像分辨率 为了获取影像的具体分辨率,在 ArcGIS Pro 中可以通过查看影像层的属性来实现。具体来说,可以在 ArcGIS Pro 的功能区的视选项卡中的 Windows 群组中单击目录窗格[^1]。随后找到对应的栅格数据集并右键点击选择“Properties”,在弹出窗口内的源标签页下可以看到关于该影像的空间参考信息,其中包括像元大小即分辨率为0.5米等详情。 #### 利用空间分析工具计算自定义区域的地分辨率 如果目标是计算特定区域内地的比例尺或者平均地面采样距离(GSD),则可以借助空间分析扩展模块完成此任务。创建一个代表研究范围面要素类之后,利用几何处理函数求取边界框尺寸与中心坐标;接着调用地形测量API接口查询这些位置处的实际地理长度,最后通过简单的算术运算得出所需的结果。 对于已知比例尺情况下的纸质版静态地数字化转换成电子形式时,则可通过量测两点间直线距离除以其对应的真实世界间距获得当前显示级别上的近似分辨率值。 ```python import arcpy def calculate_map_resolution(point1, point2): """ 计算两点间的实际距离以估算地分辨率 参数: point1 (arcpy.Point): 起始点对象 point2 (arcpy.Point): 终止点对象 返回: float: 地分辨率单位为m/pixel 或者 m/inch取决于输入参数 """ distance = math.sqrt((point2.X - point1.X)**2 + (point2.Y - point1.Y)**2) real_world_distance = get_real_world_distance_between_two_points(point1, point2) # 需要自行实现这个方法来获取真实世界的距离 resolution = real_world_distance / distance return resolution ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值