检测变化

获得 Image Analyst 许可后可用。

此工作流可检测两个不同时段的两个图像之间的变化。 最终输出是一个二进制栅格,其中包含两个值中的一个(有变化或无变化)。 下图显示了三个图像:来自时间段 1 的图像、来自时间段 2 的图像以及这两个时间段之间的变化。

检测变化的结果

要训练变化检测器模型,您需要来自时间段 1 的图像、来自时间段 2 的图像以及标识两个时间段之间变化的要素类或栅格。 以下是两个栅格和训练样本的示例:

用于检测变化的训练样本

第一个是 2000 年的图像。 中间的是 2003 年的图像。 第三个是变化的要素类训练样本。

使用深度学习的典型变化检测工作流主要分三步:

  1. 创建并导出训练样本。 使用标注对象以供深度学习窗格创建训练样本,然后使用导出训练数据进行深度学习工具将样本转换为深度学习训练数据。
  2. 训练深度学习模型。 使用训练深度学习模型工具通过在上一步中创建的训练样本训练模型。
  3. 执行推断。 使用使用深度学习检测变化工具。 您将使用在步骤 2 中创建的模型。

有关更多示例、支持的元数据格式和模型类型架构,请参阅深度学习模型架构

创建并导出训练样本

创建训练方案和训练样本并导出训练数据。

如果栅格数据集或要素类中存在现有训练样本,则可以使用导出训练数据进行深度学习工具继续执行下面的“训练深度学习模型”部分。

  1. 创建训练方案。

    此方案将用作图例,因此其必须包含深度学习工作流中的所有类。

    1. 将要用于生成训练样本的图像添加到地图。
    2. 内容窗格中,选择之前添加的图像。
    3. 单击影像选项卡。
    4. 单击深度学习工具,然后单击标注对象以进行深度学习

      影像分类窗格随即显示,其中包含空白方案。

    5. 影像分类窗格中,右键单击新建方案并单击编辑属性

      编辑新方案

    6. 名称文本框中输入方案的名称。

      编辑方案名称。

    7. 单击保存
  2. 向方案添加新类。
    1. 右键单击之前创建的方案,然后选择添加新类
    2. 名称文本框中键入类的名称。

      编辑新类。

    3. 提供类值。

      值不能为 0。

    4. (可选)选择类的颜色。
    5. 单击确定

      该类即会添加至影像分类窗格中的方案。

    6. (可选)重复步骤 2a 到 2e 添加更多类。
  3. 创建训练样本。

    这些训练样本显示了在两张图像之间出现的变化区域,因此您可以训练深度学习模型。

    1. 影像分类窗格中,选择要为之创建训练样本的类。
    2. 选择绘制工具,例如多边形
    3. 在要用于表示类的像素周围绘制一个多边形。

      多边形可以重叠;但是,如果您对某个对象不确定,不要将其包含在训练样本中。 新记录将添加到影像分类窗格的标注对象组。

      新发展

    4. 重复步骤 3a 到 3c 为方案中的所有类创建训练样本。

      建议您采集具有统计显著性数量的训练样本来表示方案中的每个类。

  4. 在创建完训练样本后,在影像分类窗格中单击保存

    已标注训练样本

    1. 保存当前训练样本窗口中,浏览至地理数据库。
    2. 提供要素类的名称,然后单击保存
  5. 关闭影像分类窗格。
  6. 打开导出训练数据进行深度学习工具,以将训练样本导出为影像片。

    影像片为包含一个或多个要检测对象的小影像。 影像片用于训练深度学习模型。

    1. 提供输入栅格值。

      通常,这是发生任何变化之前的最早图像。

    2. 提供其他输入栅格值。

      通常,这是发生变化后的最新图像。

    3. 提供输入要素类或分类栅格或表值。

      这是您之前创建的已标注对象的训练样本文件。

    4. 提供类值字段值。

      这是为变化指定的标注要素类。 该要素类包含名为 ClassValue 的字段以供使用。

    5. 提供输出文件夹值。

      这是将存储输出影像片和元数据的文件夹的路径和名称。

    6. (可选)为元数据格式参数指定值。

      最适合变化检测的元数据格式为已分类切片

    7. 单击运行导出训练数据。
导出训练数据进行深度学习工具参数

训练深度学习模型

训练深度学习模型工具使用已标注影像片确定每张影像中用于表示对象的像素组合。 您将使用这些训练样本训练深度学习模型。 在该工具中,仅需要输入训练数据输出模型参数。

由于输入训练数据基于元数据格式值,因此默认将分配适当的模型类型值。 该工具还会将模型类型值的下拉列表更新为包含支持指定的元数据格式的适当模型类型。 批量大小模型自变量骨干模型参数均基于模型类型值进行填充。 随后将使用输出模型推断两张图像之间的变化。

  1. 打开训练深度学习模型工具。
  2. 对于输入训练数据参数,浏览到存储影像片的训练数据文件夹并将其选中。
  3. 对于输出模型参数,提供在训练后存储输出模型的文件夹的文件路径和名称。
  4. (可选)指定最大轮数参数值。

    一个轮数代表整个训练数据集的完整周期。 在每轮中,您存储在影像片文件夹中的训练数据集都将通过神经网络向前和向后传递一次。 通常,初始检查所用轮数为 20 到 50。 默认值为 20。 如果可以进一步改善模型,则可以使用相同的工具重新对其进行训练。

  5. (可选)在下拉列表中更改模型类型值。

    模型类型决定了将用于训练模型的深度学习算法和神经网络,例如变化检测器架构。 有关模型的详细信息,请参阅 ArcGIS 中的深度学习模型。 有关文档示例、支持的元数据和模型架构详细信息,请参阅深度学习模型架构

  6. (可选)更改模型自变量参数值。

    模型自变量参数将使用模型定义中的信息进行填充。 这些自变量会有所变化,具体取决于指定的模型架构。 可在模型自变量参数中找到适用于工具的模型自变量列表。

  7. (可选)设置批量大小参数值。

    此参数可确定每次训练的训练样本数。 批量大小值取决于诸多因素,例如影像片数、GPU 内存(如果使用了 GPU)以及学习率(如果使用了自定义值)。 通常,默认批量大小即可生成优质结果。

  8. (可选)提供学习率参数值。

    如果未提供任何值,则系统将在训练过程中从学习曲线中提取最佳学习率。

  9. (可选)指定骨干模型参数值。

    默认值基于模型架构。 可使用下拉列表更改默认骨干模型。

  10. (可选)提供预训练模型参数值。

    可以对具有相似类的预训练模型进行微调以适应新模型。 预训练模型必须已使用将用于训练新模型的相同模型类型和骨干模型进行了训练。

  11. (可选)更改验证百分比参数值。

    这是将用于验证模型的训练样本百分比。 该值取决于各种因素,例如训练样本数和模型架构。 通常,对于较小数量的训练数据,10% 到 20% 适用于验证。 如果存在大量训练数据,例如数千个样本,2% 到 5% 等较低的数据百分比适用于验证。 默认值为 10。

  12. (可选)选中当模型停止改进时停止参数。

    如果选中,则当模型不再改进时,无论所指定的最大轮数值为何,模型训练都将停止。 默认选中该选项。

  13. (可选)选中冻结模型参数。

    此参数用于指定是否冻结预训练模型中的骨干图层,以使权重和偏差保持原始设计。 如果选中此参数,将冻结骨干图层,并且不会在骨干模型参数中更改预定义权重和偏差。 如果未选中此选项,则不会冻结骨干图层,可以更改骨干模型参数值的权重和偏差以适应训练样本。 这需要更多的处理时间,但通常会产生更好的结果。 默认选中该选项。

  14. 单击运行开始训练。

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

执行推断

推断指使用在深度学习训练过程中学到的信息对影像中的相似像素和对象进行分类的过程。 您将使用生成的深度学习模型在两张栅格图像之间执行变化检测。 由于您要执行变化检测工作流,因此使用使用深度学习检测变化工具。

  1. 打开使用深度学习检测变化工具。
  2. 对于自栅格参数,浏览至并提供来自时间段 1 的图像,即参考图像。
  3. 对于至栅格参数,浏览至并提供来自时间段 2 的图像,即时间更近的图像。
  4. 对于输出分类栅格参数,输入输出栅格名称。

    输出分类栅格将包含像素值 0 和 1,其中 0 表示无变化,1 表示有变化。

    自变量参数将使用模型定义值中的信息进行填充。 这些参数会有所变化,具体取决于模型架构。 在此示例中,使用了变化检测器模型架构,因此填充了 paddingbatch_size 自变量。

  5. 接受自变量参数的默认值或对其进行编辑。
    1. padding - 影像切片边界处的像素数,将根据这些像素为相邻切片混合预测。 增加此值以减少伪影,使输出更加平滑。 内边距的最大值可以是切片大小值的一半。
    2. batch_size - 模型推断每个步骤中处理的影像切片数。 此值取决于显卡的内存大小。
  6. 单击运行开始推断。
  7. “使用深度学习检测变化”工具参数

相关主题