示例:端到端深度学习工作流

深度学习模型通常很大并且需要强大的算力。 通过将模型训练与 ArcGIS API for Python 相结合,您可以创建既紧凑又适合移动部署的深度学习模型。

在此示例笔记本工作流中,多任务道路提取器模型用于从卫星影像中提取道路网络。

要求

要执行此工作流,必须满足以下要求:

  • 训练数据集,由巴黎地区的道路中心线的 SpaceNet 数据组成。
    注:

    如果无法访问训练数据集,则需要栅格服务器才能以所需的格式生成合适的训练数据。

  • 深度学习的运算量非常大,建议您使用支持 GPU 的高级笔记本运行时。

Python 库导入

导入以下 Python 库:

from arcgis.gis import GIS
gis = GIS("home")

import os, zipfile
from pathlib import Path

from arcgis.learn import prepare_data, MultiTaskRoadExtractor

将数据上传到工作空间

将数据集上传到 Files 下的笔记本工作空间,作为包含标注图像片的 .zip 文件,位于名为 images 的文件夹中。

#Adding zipped file from workspace
filepath = training_data = gis1.content.get('itemID')
filepath = training_data.download(save_path='/arcgis/home/input', file_name=training_data.name)
filepath
assert os.path.exists(filepath) == 1

#Extract zip
with zipfile.ZipFile(filepath, 'r') as zip_ref:
    zip_ref.extractall(Path(filepath).parent)
 
#Get the data path
output_path = Path(os.path.join(os.path.splitext(filepath)[0]))

准备数据

ArcGIS API for Python 中的 prepare_data() 函数为深度学习工作流准备数据。 函数读取训练样本,并通过对训练数据应用各种转换和增强来自动化数据准备过程。 这些增强功能允许使用有限的数据来训练模型,并防止模型过度拟合。

data = prepare_data(
    path=output_path,
    batch_size=4,
    chip_size=512
)
data.classes

有关 prepare_data() 函数参数的信息,请参阅 arcgis.learn API 参考

显示数据

准备好数据后,您可以使用 show_batch() 函数来可视化其中的样本。

data.show_batch(alpha=1)

加载模型架构

arcgis.learn 中的多任务道路提取器支持的两个架构可使用参数 mt1_model 进行设置。 该参数可以设置为 linknethourglass 架构。

可以选择在此阶段设置模型特定高级参数:

  • gaussian_thresh - 设置高斯阈值,用于设置所需的道路宽度。
  • orient_bin_size - 设置方向角的图格大小。
  • orient_theta - 设置方向掩膜的宽度。

model = MultiTaskRoadExtractor(data, mtl_model="hourglass")

计算学习率

ArcGIS API for Python 使用 fast.ai 的学习率查找器来找到训练模型的最佳学习率。 使用 lr_find() 方法找到最佳学习率来训练稳健的模型。 在模型的第一次运行中确定学习率后,您就可以在重新训练模型时将其作为固定值传递以供进一步运行。

lr = model.lr_find()
#lr =  0.0005754 #from the first run

模型拟合

fit() 方法用于训练您的模型。 该方法需要输入 epoch 参数。 epoch 定义了模型公开到整个训练数据集的次数。 每个 epoch 都允许模型根据数据学习并调整其权重。 在下面的示例中,为了测试目的,该模型运行了三个 epoch。

建议您从 25 个 epoch 开始,以获得更准确的部署模型。

model.fit(3, lr=lr, early_stopping=True)

可视化结果

为了在笔记本中验证模型的结果,您可以使用 show_results() 方法将模型的预测与随机实际地表图像进行比较。

model.show_results(rows=4, thresh=0.2)

保存模型

确认训练模型的准确性后,请保存它以供将来部署。 默认情况下,模型将作为 .dlpk 文件保存到训练数据文件夹内的模型子文件夹中。

model.save('/arcgis/home/road_model_for_spacenet_data')

部署模型

保存的 .dlpk 文件现在可以与其他数据集一起部署并在您的组织内共享。 有关如何使用 .dlpk 文件的信息,请参阅示例:使用预训练模型进行推断