准备深度学习分析

在本教程的第一部分,您将设置 ArcGIS Pro 工程,选择一个深度学习预训练模型,准备影像使其与模型更匹配并了解迁移学习的需求。

设置工程

首先,您将下载一个包含本教程所有数据的工程,并在 ArcGIS Pro 中将其打开。 然后,您要将影像添加到工程文件夹。

  1. 下载 Seattle_Building_Detection.zip 文件并在计算机上找到下载的文件。
    注:

    大多数 Web 浏览器默认将文件下载到计算机的 Downloads 文件夹中。

  2. 右键单击 Seattle_Building_Detection.zip 文件,然后将其提取到计算机上的某个位置(例如 C: 盘上的某个文件夹)。
  3. 打开提取的 Seattle_Building_Detection 文件夹,然后双击 Seattle_Building_Detection.aprx 以在 ArcGIS Pro 中打开工程。

    工程文件夹中的 .aprx 文件

  4. 如果出现提示,请登录到您的 ArcGIS 组织账户或使用授权用户账户登录 ArcGIS Enterprise
    注:

    如果您没有 ArcGIS Pro 的访问权限或者 ArcGIS 组织帐户,请参阅软件访问权限选项

    工程随即打开。

    初始视图

    地图仅包含默认地形底图。 在此工作流中,您将使用航空影像检测建筑物。 现在,您要将该影像添加到地图。

  5. 单击功能区上的视图选项卡。 在窗口组中,单击目录窗格

    “目录窗格”按钮

    随即显示目录窗格。

  6. 目录窗格中,依次展开文件夹Seattle_Building_DetectionImagery_data

    文件夹、Seattle_Building_Detection 和 Imagery_data 已展开

  7. 右键单击 Seattle_imagery.jp2,然后选择添加到当前地图

    “添加于当前地图”菜单选项

  8. 如果系统提示您计算统计数据,请单击

    对影像执行某些任务需要统计数据,例如使用拉伸渲染图像。 影像将显示在地图上。 该影像表示西雅图区域。

    地图上的 Seattle_imagery.jp2

    注:

    此航空影像来自美国国家农业影像计划 (NAIP) 网站。 覆盖整个美国区域的 NAIP 影像可通过 USGS Earth Explorer 网站下载。

  9. 进行放大和平移以检查影像。 可以观察到影像中有许多建筑物。

选择一个预训练模型并进行检查

您希望使用深度学习提取航空影像中的建筑物。 如果您还没有可用的深度学习模型,则需要先从头开始训练一个模型,为其提供大量示例以向模型展示什么是建筑物。 高性能模型可能需要接触成千上万个示例。 作为替代方法,您可以使用已训练的模型。 您将检索一个这样的模型,并了解其规范。

注:

ArcGIS Pro 中使用深度学习工具需要在计算机上安装正确的深度学习库。 如果您未安装这些文件,请保存工程,关闭 ArcGIS Pro,然后按照ArcGIS Pro 中为深度学习做好准备中提供的步骤说明操作。 在这些说明中,您还可以了解如何检查您的计算机硬件和软件能否运行深度学习工作流,以及获取其他有用的提示。 完成后,您可以重新打开工程并继续本教程。

  1. 转至 ArcGIS Living Atlas of the World 网站。
  2. 在搜索框中,输入 Pretrained model,然后按 Enter 键。

    搜索框中的 Pretrained model

  3. 浏览结果列表以查看可用的 50 多个预训练模型。

    预训练模型结果列表

  4. 在搜索框中,输入 Building Footprint Extraction ,然后按 Enter 键。

    搜索框中的 Building Footprint Extraction

    结果列表包含用于世界上不同区域的预训练深度学习模型。 由于您的感兴趣区域位于美国,所以您将选择针对该区域训练的模型。

    Building Footprint Extraction 结果列表

  5. 在结果列表中,单击 Building Footprint Extraction – USA

    Building Footprint Extraction – USA 结果

    模型的描述页面随即显示。 其中包含大量有关模型的重要信息。 最需要了解的是模型预期的输入类型。 如果您的输入数据与模型训练数据的类型不够相似,则模型会表现不佳。

  6. 花费一些时间来阅读该页面的内容。 尤其需要查看以下示例图片中显示的部分:

    项目详细信息页面的内容

    您了解了模型的一些基本资料:

    • 输入 - 模型预期使用 8 位 3 波段高分辨率 (10-40 cm) 影像作为输入。 要了解您的数据是否符合这些规范,您需要进一步调查数据。 您将在本教程中进一步执行此操作。
    • 输出 - 模型将生成一个包含建筑物覆盖区的要素类。 获取建筑物覆盖区面作为输出正是您需要的。
    • 适用地理位置 - 此模型应适用于美国。 这一点很完美,因为您的感兴趣区域位于美国。
    • 模型架构 - 该模型使用 MaskRCNN 模型架构。 您应记录此信息,因为在工作流的后续部分会需要它。

    该模型似乎非常适合您的工程,因此您将下载模型。

  7. 概述下,单击下载

    下载按钮

    片刻之后,下载将完成。

  8. 在计算机上找到已下载的文件 usa_building_footprints.dlpk
    提示:

    大多数 Web 浏览器默认将文件下载到计算机的 Downloads 文件夹中。

  9. Seattle_Building_Detection 文件夹中创建一个名为 Pretrained_model 的文件夹。

    Pretrained_model 文件夹

  10. usa_building_footprints.dlpk 模型文件从下载位置移动到 Pretrained_model 文件夹。

检查影像属性

现在,您将进行研究以了解您的数据与理想的 8 位 3 波段高分辨率 (10-40 cm) 影像输入的匹配程度。

  1. ArcGIS Pro 中,返回到 Seattle_Building_Detection 工程。
  2. 内容窗格中,右键单击 Seattle_imagery.jp2,然后选择属性

    属性菜单选项

  3. 图层属性窗口中,单击并展开栅格信息

    “栅格信息”部分

  4. 查找波段数字段。

    “波段数”字段

    其值为 4。 NAIP 项目采集由红、绿、蓝和近红外四个光谱波段组成的多光谱影像。 近红外波段通常用于可视化植被健康。 而模型预期为三个波段(红、绿和蓝)。 您需要修复此差异。

  5. 查找像元大小 X像元大小 Y 字段。

    “像元大小 X”和“像元大小 Y”字段

    两个字段的值均为 1。 这意味着影像中的每个像元(或像素)的测量值为 1 米乘 1 米。 此 NAIP 影像确实采用 1 米的分辨率捕获。 该分辨率低于模型建议的 10-40 cm 分辨率。 您还需要修复此问题。

  6. 查找像素深度字段。

    “像素深度”字段

    其值为 8 位,即与模型要求的 8 位相匹配。

  7. 单击确定关闭图层属性窗口。

    您将学习另一种可视化波段数的方式。

  8. 内容窗格中,右键单击 Seattle_imagery.jp2,然后选择符号系统

    符号系统菜单选项

  9. 符号系统窗格中,对于红色,单击 Band_1 以展开下拉列表。

    “红色”的值下拉列表

    其中列出了四个波段。 当查看多光谱影像时,在给定时间只能显示三个波段,通过红色、绿色和蓝色通道将所选的三个波段组合成 RGB 合成。 但是,您可以看到影像中显示四个波段,且它们可以用于不同的分析目的。

  10. 关闭符号系统窗格。

    “关闭”按钮

您发现您的影像与预训练模型的预期之间有两个条件不匹配:波段数和分辨率。 在此工作流的后续部分,您将了解如何修复这两个问题。

选择相关的影像波段

现在,您将修复波段不匹配问题。 您的影像具有四个光谱波段:

  • 波段 1 - 红
  • 波段 2 - 绿
  • 波段 3 - 蓝
  • 波段 4 - 近红外

而模型预期采用三波段输入(红、绿、蓝)。 要修复该问题,您需要生成一个仅包含 NAIP 影像的前三个波段的新图层,以便更符合模型的预期。 此步骤十分重要,如果跳过此步骤,模型可能表现不佳。

注:

了解您的影像的准确波段顺序至关重要。 例如,一些其他类型影像的波段顺序可能有所不同:波段 1 - 蓝、波段 2 - 绿、波段 3 - 红。 您可以在影像的属性或文档中查找该信息。

您将使用栅格函数生成新的三波段图层。

  1. 在功能区影像选项卡的分析组中,单击栅格函数按钮。

    栅格函数按钮

  2. 栅格函数窗格的搜索框中,输入提取波段。 在数据管理下,单击提取波段

    “提取波段”栅格函数

  3. 设置以下提取波段参数值:
    • 对于栅格,选择 Seattle_imagery.jp2
    • 对于组合,验证值是否为 1 2 3,参照波段 1(红)、波段 2(绿)和波段 3(蓝)。
    • 对于缺失波段操作,选择失败

    缺失波段操作指定列出的其中一个波段不可用时将执行的操作。 失败表示栅格函数将终止且运行失败。 您选择此选项的原因是,要成功完成本教程,三个波段都必须存在。

    “提取波段”参数值

  4. 单击新建图层

    名为 Extract Bands_Seattle_imagery.jp2 的新图层将显示在内容窗格中。 通过栅格函数创建的图层将动态计算,不会保存在磁盘上。 在当前情况下,您希望将生成的图层作为 TIFF 文件保留在计算机上。 您将使用导出栅格来执行此操作。

  5. 右键单击 Extract Bands_Seattle_imagery.jp2,然后选择数据导出栅格

    “导出栅格”菜单选项

  6. 输出栅格窗格中,对于输出栅格数据集,单击浏览按钮。

    “浏览”按钮

  7. 输出位置窗口中,浏览至 文件夹 > Seattle Building Detection > Imagery Data,对于名称,输入 Seattle_RGB.tif,然后单击保存

    “输出位置”窗口

  8. 输出位置窗口中,接受所有其他默认值,然后单击导出

    “导出”按钮

    注:

    如果影像是 16 位的,导出栅格步骤可将其转换为模型所需的 8 位深度影像。 对于像素类型,选择 8 位无符号,然后选中缩放像素值框。 缩放像素值可确保值真正转换为 8 位(而不是丢弃高值)。 对于 NoData 值,输入原始图像的 NoData 值,例如 0

    要找到 NoData 值,在内容窗格中,右键单击原始图像,选择属性,然后浏览到 > 栅格信息 > NoData 值

    新的 Seattle_RGB.tif 图层将显示在内容窗格中。

  9. 关闭导出栅格窗格。

    现在,您将验证波段数。

  10. 内容窗格中,右键单击 Seattle_RGB.tif,然后选择属性
  11. 图层属性窗口中,单击并展开栅格信息
  12. 查找波段数字段。

    “波段数”字段

    字段值为 3,确定图层现在包含三个波段,符合预训练模型的预期。

  13. 关闭图层属性窗口。

    现在,您将移除在工作流的其余部分不再需要的影像图层。

  14. 内容窗格中,右键单击 Extract Bands_Seattle_imagery.jp2,然后选择移除
  15. 同样,移除 Seattle_imagery.jp2

    您将保存工程。

  16. 快速访问工具栏上单击保存按钮。

    “保存”按钮

现在,您已拥有三波段影像图层,这符合预训练模型的预期。

了解迁移学习的需求

现在,您必须修复分辨率不匹配问题,模型预期使用较高的分辨率 (10-40 cm),而 NAIP 影像采用较低的 1 米分辨率捕获。 如果将 Building Footprint Extraction – USA 预训练模型直接应用于 Seattle_RGB.tif 图层,您会得到质量较差的结果,如以下示例图像所示:

直接应用预训练模型的结果

在该图像中,检测到的建筑物显示为粉色。 由于分辨率不匹配,该模型可以检测到较大的建筑物,但很难识别任何较小的建筑物。

注:

有关直接并成功使用预训练模型的工作流的示例,请参阅使用深度学习预训练模型检测物体教程。

使用迁移学习是一种可修复此问题的方法。 迁移学习是机器学习中的一种技术,从任务中学到的知识将被重用以提高相关任务的性能。 在本例中,原来的任务是在 10-40 cm 分辨率的影像中检测建筑物,新任务是在 1 米分辨率的影像中检测建筑物。

注:

迁移学习也可用于影像分辨率不匹配以外的其他原因。 例如,从已训练的用于检测特定国家建筑物的模型入手,您可以使用迁移学习使模型学习检测其他国家的建筑物。

迁移学习的一个主要优点是,与从头开始训练模型相比,它所需要的训练数据量较小,所需的训练时间较短。

注:

如果您的影像和预期输入之间的差异过大,则迁移学习的效果也会受限。 例如,如果您拥有 30 米分辨率的卫星影像,在其中几乎看不到较小的建筑物,那么通过微调模型使其在该影像上得到较好的效果是不现实的。 新任务与原始任务的差异越大,迁移学习的效果越不明显。

警告:

迁移学习并不适用于所有深度学习预训练模型。 例如,依赖 SAM 和 DeepForest 的模型不支持迁移学习。 您可以在 ArcGIS Living Atlas 网站上查看预训练模型的描述,以确定该模型是否依赖 SAM 或 DeepForest。

在本教程的其余部分中,您将学习如何执行迁移学习以微调预训练模型,从而提高其针对您的数据的性能。


准备用于迁移学习的训练样本

要执行迁移学习,首先需要生成训练示例,以向模型展示数据中建筑物的外观。 如果您从头开始训练模型,可能需要成千上万个建筑物样本。 幸好,借助迁移学习,您仅需要几百个样本。 在教程的这一部分中,您将学习如何生成训练样本。 首先,您将创建一个用于存储样本的空要素类。 然后,您将绘制表示建筑物的面并将其添加到要素类。 最后,您需将要素类和影像导出至用于迁移学习的训练片。

创建要素类

首先,您将创建要素类。

  1. 在功能区视图选项卡的窗口组中,单击地理处理

    “地理处理”按钮

    将出现地理处理窗格。

  2. 地理处理窗格的搜索框内,输入创建要素类。 在结果列表中,单击创建要素类工具以将其打开。

    创建要素类工具

  3. 设置以下参数值:
    • 对于要素类名称,输入 Training_examples
    • 对于几何类型,验证是否已选择
    • 对于坐标系,选择 Seattle_RGB.tif

    “创建要素类”参数

  4. 接受所有其他默认值,然后单击运行

    内容窗格中,将显示新的 Training_examples 要素类。 当前仪表盘为空。

绘制训练示例

现在,您将描绘建筑物覆盖区,这些覆盖区将在 Training_examples 图层保存为面要素。

  1. 在功能区编辑选项卡的要素组中,单击创建

    “创建”按钮

    创建要素窗格随即显示。

  2. 创建要素窗格中,单击 Training_examples,然后单击按钮。
  3. 面按钮

    构造工具栏随即显示在地图上。 默认情况下,设置为线模式,该模式用于绘制直线。

    线按钮

  4. 在构造工具栏上,单击直角线按钮。

    “直角线”按钮

  5. 直角线模式将所有直线约束为直线,将所有角度约束为直角。 这在绘制建筑物覆盖区时很有帮助,因为大多数建筑物均为 90 度直角。 在绘制期间,您可以根据需要在此模式和线模式之间切换。
  6. 在功能区上,单击地图选项卡,在导航组中单击书签,然后选择 Labeling extent

    Labeling extent 书签

    您将在此区域中开始绘制用于描绘建筑物的面。 此过程也称为标注,因为您在告知模型感兴趣对象在影像中的位置。

    Labeling extent 书签的范围

    注:

    决定要在影像中的哪个位置创建训练示例时,请选择一个具有该地理位置典型建筑物的区域。

  7. 在地图上,选择一个特定建筑物,然后单击其中一个角(或折点)。
  8. 顺时针单击它的每个角。
  9. 在最后一个角的位置双击以完成面。

    描绘一个面

    注:

    要素类的颜色(此处为浅绿色)是随机指定的,在您的工程中,颜色可能有所不同。

  10. 按照同样的方式,在同一区域再创建两个或三个面。
    提示:

    如果您不喜欢创建的面,可以将其删除。 在功能区编辑选项卡的选择组中,单击选择。 在地图上,单击面。 在编辑选项卡的要素组中,单击删除

    “选择”和“删除”按钮

    您要将面要素保存到要素类。

  11. 在构造工具栏上,单击完成按钮。

    “完成”按钮

  12. 在功能区编辑选项卡的管理编辑内容组中,单击保存

    “保存”按钮

  13. 关闭创建要素窗格。

    在真实项目中,您可能需要再描绘 200 或 300 个建筑物。 但是,为了使本教程尽可能简洁,您将使用我们为您准备的一组训练示例(约 200 个)。

  14. 地理处理窗格的底部,单击目录以返回至改窗格。

    “地理处理”选项卡

  15. 目录窗格中,展开数据库Output_provided.gdb
  16. 右键单击 Training_examples_larger_set,然后选择添加至当前地图

    “添加于当前地图”菜单选项

    该训练样本集随即显示。

    训练样本集

    可以观察到已选择一个矩形范围,并且已为该范围内的每个建筑物创建面。 您将移除 Training_examples 图层,因为不再需要该图层。

  17. 内容窗格中,右键单击 Training_examples 图层,然后选择移除

    “移除”菜单选项

  18. Ctrl+S 以保存工程。

现在,您拥有一个包含超过 200 个训练样本的图层。

添加类字段

现在,您已描绘建筑物覆盖区面,您必须将其全部指定为属于一个特定的类。 在某些工作流中,标注的对象可能属于不同的类(或类别),例如建筑物覆盖区、树木或车辆。 在本教程中,仅有一个类:建筑物覆盖区。 您将向 Training_examples_larger_set 图层添加一个 Class 字段并填充字段。

  1. 内容窗格中,右键单击 Training_examples_larger_set 图层并选择属性表

    “属性表”菜单选项

    图层的属性表随即出现,其中显示各个面的相关信息。

  2. Training_examples_larger_set 属性表中,单击添加

    “添加”按钮

  3. 字段:Training_examples_larger_set 选项卡上,在表的最后一行输入以下信息。
    • 对于字段名称,输入 Class
    • 对于数据类型,单击长整型,然后将其更改为短整型

    短整型数据类型存储整数值。

    新的 Class 字段

  4. 在功能区字段选项卡的更改组中,单击保存

    “保存”按钮

  5. 关闭字段:Training_examples_larger_set 窗口。

    Class 字段已创建完成,您将使用数值填充此字段。 您随机决定使用数值 1 表示建筑物覆盖区类。

  6. Training_examples_larger_set 属性表中,单击计算

    计算按钮

  7. 计算字段窗口中,设置以下参数值:
    • 对于字段名称,选择 Class
    • 对于 Class =,输入 1

    “计算字段”窗口

  8. 接受所有其他默认值,然后单击确定
  9. Class 列,验证值 1 是否已分配至每个面要素。

    Class 列已填充

    通过 Class 字段,模型将了解所有训练样本均为同一种对象:由 1 表示的建筑物覆盖区。

  10. 关闭 Training_examples_larger_set 属性表。

了解有关训练片和裁剪影像的详细信息

深度学习模型不能在一次运行中针对大型区域执行训练,它只能处理较小的裁切影像,即影像片。 影像片由影像切片和相应的标签切片组成,标签切片显示对象(在本例中为建筑物)的位置。 这些影像片将在迁移学习训练过程中传入模型。

训练片示例
图中显示了训练片,及其影像切片(左)和相应的标注切片(右)。

您将使用 Seattle_RGB.tif 影像和 Training_examples 图层来生成训练片。 有一点十分重要,即避免生成包含未标注建筑物的影像片。 这种影像片的存在等同于向模型展示建筑物,同时声明它们不是建筑物。 这会使模型困惑,进而降低其性能。 为防止此情况,您将创建一个影像片,该影像片限于训练样本所在的范围。

训练片示例,其中一些建筑物未被标注
示例显示一个影像片,其中的一些建筑物未被标注。 必须避免使用此类影像片。

  1. 目录窗格的底部,单击地理处理

    “地理处理”选项卡

  2. 地理处理窗格中,单击后退按钮。

    “返回”按钮

  3. 搜索并打开裁剪栅格工具。

    “裁剪栅格”工具

  4. 设置以下裁剪栅格参数值:
    • 对于输入栅格,选择 Seattle_RGB.tif
    • 对于输出范围,选择 Training_examples_larger_set
    • 对于输出栅格数据集,单击浏览按钮。 在输出栅格数据集窗口中,浏览至文件夹 >Seattle_Building_Detection > Imagery_data,对于名称,输入 Seattle_RGB_clip.tif,然后单击保存

    “裁剪栅格”参数

  5. 单击运行

    内容窗格中,将显示 Seattle_RGB_clip.tif 图层。

  6. 内容窗格中,单击 Seattle_RGB.tif 旁边的框以关闭该图层。

    Seattle_RGB.tif 已关闭

    在地图上,您现在仅会看到裁剪的图层和训练样本。 影像中显示的所有建筑物都有对应的建筑物面。

    地图上的裁剪图层和训练样本

生成训练片

现在,您将生成训练片。 首先,您将创建一个文件夹,以存储与迁移学习过程相关的数据元素。

  1. 单击目录选项卡以切换窗格。
  2. 如有必要,展开文件夹,然后展开 Seattle_Building_Detection
  3. 右键单击 Seattle_Building_Detection,指向新建,然后选择文件夹

    “文件夹”菜单选项

  4. 对于新文件夹名称,输入 Transfer_learning_data 然后按 Enter 键。

    新的 Transfer_learning_data 文件夹

  5. 单击地理处理选项卡以切换窗格。
  6. 地理处理窗格中,单击后退按钮。
  7. 搜索并打开导出训练数据进行深度学习工具。

    导出训练数据进行深度学习工具

  8. 导出训练数据进行深度学习工具设置以下参数值:
    • 对于输入栅格,选择 Seattle_RGB_clip.tif
    • 对于输出文件夹,单击浏览按钮。 在输出文件夹窗口中,浏览至文件夹 > Seattle_Building_Detection > Transfer_learning_data。 对于名称,输入 Training_chips,然后单击确定
    • 对于输入要素类,选择 Training_examples_larger_set

    从裁剪影像生成的影像片和训练数据将存储在名为 Training_chips 的文件夹中。

    “导出训练数据进行深度学习”的参数

  9. 对于类值字段,选择 Class

    根据您之前的定义,Class 字段指定了哪些对象属于哪些标注(在本例中,所有对象均属于类 1,表示建筑物覆盖区)。

    “类值字段”参数

  10. 对于切片大小 X切片大小 Y,验证值是否为 256

    这些参数用于确定影像片在 X 和 Y 方向的大小(以像素为单位)。 在本例中,默认值 256 是不错的选择。

    注:

    您希望使您的训练片与用于训练原始模型的影像片尽可能地相似。 原始模型使用 512 x 512 的影像片训练,这些影像片使用 10-40 cm 分辨率的数据生成。 您的 NAIP 影像的分辨率为 1 米。 该分辨率下 256 x 256 像素的影像片覆盖的面积大致等同于 40cm 分辨率下 512 x 512 的影像片覆盖的面积。 因此,选择 256 x 256 的影像片大小很合适。

    要了解预训练模型中最初使用的影像片大小,其中一种方法是查看 dlpk 包。 在 Microsoft File Explorer 中,在单独的文件夹中创建一个 usa_building_footprints.dlpk 文件的副本,然后将其扩展名从 .dlpk 更改为 .zip。 右键单击 .zip 文件并提取文件。 在提取的文件中,找到 usa_building_footprints.emd 并将其扩展名改为 .txt。 在文本编辑器中打开 usa_building_footprints.txt,然后查找行 "ImageHeight""ImageWidth"

    ImageHeight 和 ImageWidth 参数

  11. 对于步幅 X步幅 Y,输入 64

    此参数控制创建下一个影像片时在 X 和 Y 方向上移动的距离(以像素为单位)。 此值取决于您拥有的训练数据量。 可以将此值设置得更小,从而尽可能多地生成影像片。 您可以使用此值进行试验,但在本教程中,已发现值 64 的运行效果较好。

  12. 对于元数据格式,选择 RCNN 掩膜

    不同的深度学习模型类型需要影像片采用不同的元数据格式。 在工作流前面的部分,您注意到预训练模型基于 MaskRCNN 架构。 在此,您必须选择该模型对应的值。

    “切片大小 X”、“切片大小 Y”等参数

    提示:

    要了解有关任意工具参数的详细信息,请指向该参数然后单击其旁边的信息按钮。

    “信息”按钮

  13. 接受所有默认值,然后单击运行

    片刻之后,该过程将完成。

检查训练片

您将检查其中一些生成的影像片。

  1. 目录窗格中,依次展开文件夹Seattle_Building_DetectionTransfer_learning_dataTraining_chips
  2. 影像切片位于 images 文件夹中,而标注切片位于 labels 文件夹中。

    images 和 labels 文件夹

  3. 展开 images 文件夹,右键单击第一个影像 000000000000.tif,然后选择添加到当前地图。 如果系统提示您计算统计数据,单击

    images 文件夹中的 000000000000.tif 文件

  4. 内容窗格中,关闭 Training_examples_larger_setSeattle_RGB_clip.tif 以便更好地查看切片。

    地图上的切片示例

  5. 目录窗格中,折叠 images 文件夹,展开 labels1 文件夹,然后向地图添加第一个标注切片 000000000000.tif。 如果系统提示您计算统计数据,单击

    labels 文件夹中的 000000000000.tif 文件

    注:

    影像和标注对可以通过其一致的名称来识别。

  6. 内容窗格中,单击以打开和关闭标注切片,从而显示其下方的影像切片。

    训练片示例

  7. 单击其中一些标注切片像素,以在信息弹出窗口中查看其值。

    显示值 28 的弹出窗口

    注:

    在标注切片上,不表示建筑物的像素的值为 0。 所有表示建筑物的像素的值均大于 0。 特殊值来自原始建筑物面的对象 ID,例如之前的示例图上的 28

  8. 可以选择性地向地图添加更多影像和标注切片对,并进行检查。
  9. 完成后,从内容窗格中移除所有切片,然后再次打开 Training_examples_larger_setSeattle_RGB.tif 图层。

    Training_examples_larger_set 和 Seattle_RGB.tif 图层已再次打开

  10. 目录窗格中,折叠 Training_chips 文件夹。

    Training_chips 文件夹已折叠

  11. Ctrl+S 以保存您的工程。

您已生成训练片,现在即可开始迁移学习过程。


执行迁移学习并提取建筑物

现在,您将执行迁移学习。 您将使用生成的影像片进一步训练 usa_building_footprints.dlpk 预训练模型。 然后,会将微调模型用于西雅图的影像并观察到现在的模型性能已显著提高。

微调模型

首先,您将使用训练深度学习模型工具对模型进行微调。

  1. 切换到地理处理窗格,然后单击返回按钮。
  2. 地理处理窗格中,搜索并打开训练深度学习模型工具。

    “训练深度学习模型”工具

  3. 训练深度学习模型工具设置以下参数值:
    • 对于输入训练数据,单击浏览按钮。 浏览至文件夹 > Seattle_Building_Detection > Transfer_learning_data。 选择 Training_chips,然后单击确定
    • 对于输出模型,单击浏览按钮。 浏览至文件夹 > Seattle_Building_Detection > Imagery_data > Transfer_learning_data。 输入 Seattle_1m_Building_Footprints_model,然后单击确定

    “训练深度学习模型”的参数

    Seattle_1m_Building_Footprints_model 将是通过迁移学习过程生成的新微调模型的名称。

    提示:

    如果将每个模型及其对应的训练片保存在同一文件夹中,则更容易记住在哪些数据上训练了哪些模型。

  4. 展开高级部分并设置以下参数值:
    • 对于预训练模型,单击浏览按钮。 浏览至用于保存 usa_building_footprints.dlpk 预训练模型的文件夹,选择该文件夹,然后单击确定
    • 验证是否已选中冻结模型复选框。

    高级部分

    冻结模型选项可确保只有模型的最终图层会受到新训练数据的影响,而其核心图层保持不变。 在许多迁移学习案例中都需要选择此设置,因为它可以避免模型遗忘其核心知识的风险。

    注:

    如果您在输入训练数据旁边看到错误指示符,则表示您安装的深度学习库不是正确的版本。 按 Ctrl+S 以保存您的工程,关闭 ArcGIS Pro 并按照说明安装适用于 ArcGIS 的深度学习框架。 如果您之前安装过深度学习库,请按照从先前版本进行升级下列出的说明操作。 安装完成后,您可以重新打开 ArcGIS Pro 工程,然后继续本教程。

  5. 展开模型参数部分,并验证批量大小是否设置为 4

    “模型参数”部分

    提示:

    要了解有关任意工具参数的详细信息,请单击参数旁边的信息按钮。

  6. 地理处理窗格中,单击环境选项卡。 对于处理器类型,选择 GPU

    “环境”选项卡

    注:

    本教程假定您的计算机具有 GPU 功能。 如果计算机没有 GPU,您仍可使用 CPU 执行该过程,但用于处理数据的时间可能更长。 如果情况为后者,请选择 CPU 选项。

  7. 接受所有默认值,然后单击运行

    该过程的运行可能花费 10 分钟或更长时间。

    提示:

    如果出现内存不足错误,可能是因为计算机没有足够的内存来一次性处理四个切片。 尝试将批量大小值从 4 减小至 21。 减小此值不会影响模型的质量,仅会影响模型训练过程的效率。

现在,您有一个增强的模型 Seattle_1m_Building_Footprints,该模型已经过微调以提高处理您的数据时的性能。

运行推断

完成迁移学习后,您将使用经过微调的模型在 Seattle_RGB.tif 影像图层上运行推断,从而检测其中包含的建筑物。

  1. 地理处理窗格中,单击后退按钮。
  2. 搜索并打开使用深度学习检测对象工具。

    “使用深度学习检测对象”工具

  3. 使用深度学习检测对象工具设置以下参数值:
    • 对于输入栅格,选择 Seattle_RGB.tif
    • 对于输出检测对象,输入 Seattle_buildings
    • 对于模型定义,单击浏览按钮。 浏览至 Seattle_Building_Detection 文件夹,展开 Transfer_learning_dataSeattle_1m_Building_Footprints_model,选择 Seattle_1m_Building_Footprints_model.dlpk,然后单击确定

    “使用深度学习检测对象”的参数

    模型定义加载时,模型的参数会自动填充。

  4. 对于 padding,验证值是否为 64

    填充指示将在输入影像周围添加的像素数。 根据卷积神经网络的工作原理,影像中心像素的关注优先级高于边缘像素。 添加这些填充像素将最大限度地减少这种行为,以使影像中的所有像素都受到模型的同等关注。 您将保留此值的默认设置 64

  5. 对于 batch_size,使用在训练过程中所用的值(4 或更小值)。

    这将确保工具运行所用的内存不超过计算机上的可用内存量。

  6. 对于 threshold,验证值是否为 0.9

    这是介于 0 和 1 之间的边界值。 它表示在将对象声明为建筑物之前,模型必须达到的自信程度。 值 0.9 表示模型的置信度应为 90%。

  7. 对于 tile_size,验证值是否为 256

    这表示模型将用于运行推断的影像片的大小。 此值应与用于训练模型的影像片的大小相同。

    参数列表

  8. 对于非极大值抑制,选中该复选框。

    当存在重复的重叠建筑物覆盖区时,非极大值抑制选项可确保仅保留具有最高置信度的建筑物面要素,而其他要素会被删除。

    “非极大值抑制”选项

  9. 地理处理窗格中,单击环境选项卡。

    “环境”选项卡

  10. 对于处理器类型,选择 GPU

    GPU 选项值

    此时,您可以按原样运行工具:工具将检测整个 Seattle_RGB.tif 影像中的建筑物,此过程可能花费 10 分钟到 1 小时的时间,具体取决于计算机的规格。 为使本教程尽可能简洁,您将仅检测输入影像的一小部分中的建筑物。

  11. 在功能区地图选项卡的导航组中,单击书签,然后选择 Inference extent

    Inference extent 书签

    地图会放大到西雅图的一个较小的区域。

    Inference extent 书签的范围

  12. 地理处理窗格环境选项卡中的处理范围下,对于范围,选择当前显示范围

    “当前显示范围”菜单选项

  13. 单击运行

    处理将在几分钟后完成,Seattle_buildings 输出图层将显示在内容窗格中和地图上。 此时,您可以看到几乎所有建筑物均被检测出来。

    地图上的 Seattle_buildings 输出图层

使用通过迁移学习微调的预训练模型,您已成功检测了西雅图某个区域内的建筑物。

比较结果

现在,您将对两个建筑物覆盖区图层进行比较,这两个图层分别通过运行现有预训练模型和使用迁移学习进行微调的模型获得。 在两种情况下,它们显示了整个影像范围的结果。 虽然您可以使用在先前内容中所学的方法自行生成这两个图层,但为了节省时间,您将使用教程为您准备的图层。 首先,您将打开一个包含这些图层的地图。

  1. 目录窗格中,展开地图。 右键单击 Full extent results,然后选择打开

    “打开”菜单选项

    随即显示该地图。 其中包含两个面要素类:

    • Seattle_buildings_off_the_shelf
    • Seattle_buildings_with_transfer_learning

    您将使用卷帘工具比较两个图层。

  2. 内容窗格中,单击 Seattle_buildings_off_the_shelf 以将其选中。

    已选择 Seattle_buildings_off_the_shelf

  3. 在功能区要素图层选项卡的比较组中,单击卷帘

    卷帘按钮

  4. 在地图上,使用滑动控点重复地从上到下或从一侧向另一侧拖动,从而移开上方图层以显示下方图层。

    卷帘光标

  5. 进行缩放和平移以检查不同的区域,通过视觉评估结果质量的差异。
    提示:

    在卷帘模式下,您可以使用鼠标滚轮放大和缩小视图,也可以按住键盘上的 C 键并使用鼠标拖动以进行平移。

    与现有模型相比,微调模型在识别影像中较小建筑物的覆盖区时效果更好。 现在,您将使用卷帘工具对迁移学习图层中的结果和您在影像中可以观察到建筑物进行比较。

  6. 内容窗格中,关闭 Seattle_buildings_off_the_shelf 图层,然后选择 Seattle_buildings_with_transfer_learning 图层。

    已选择 Seattle_buildings_with_transfer_learning 图层

  7. 使用卷帘工具比较这两个图层。

    您可能注意到,微调模型生成的图层仍不够完美,在各处均有一些缺失的建筑物。 通过迁移学习对模型进行微调往往是一个迭代过程。 您可以通过采集更多的训练示例并执行另一轮迁移学习训练来继续改善模型性能。 以下是简要概述的步骤:

    • 首先,观察模型遗漏的建筑物类型。
    • 针对此类建筑物采集新的示例面,然后生成新的训练片并将其保存到新的文件夹中。 您应该遵循在之前的操作中采用的指导原则,裁剪影像以确保影像片中不包括未标注的建筑物。
    • 从现有预训练模型入手运行一个新的训练会话,为其提供到目前为止创建的所有影像片(即在输入训练数据参数中,您将列出所有影像片文件夹)。 这是确保模型平等对待所有训练片的最佳做法。
  8. 在浏览完影像后,在功能区的地图选项卡中的导航组中,单击浏览按钮以退出卷帘模式。

    “浏览”按钮

  9. Ctrl+S 以保存您的工程。

在本教程中,您在 ArcGIS Pro 中使用了深度学习来提取航空影像中的建筑物覆盖区。 您从 ArcGIS Living Atlas 选择了一个预训练模型,了解了使输入数据与模型预期匹配的重要性。 您使用预期的波段数生成了新的影像图层。 然后,您应用了迁移学习以修复分辨率不匹配情况,然后微调了模型对影像的处理性能:您提供了少量新的训练样本,并进一步训练了模型。 然后,您对一个西雅图的社区应用了微调模型并获得了经过改善的结果。