训练点云对象检测模型 (3D Analyst)

摘要

使用深度学习训练点云的对象检测模型。

使用情况

  • 此工具需要安装 Deep Learning Essentials,该要素提供了多个神经网络解决方案,其中包括用于分类点云的神经架构。

    要设置计算机以在 ArcGIS AllSource 中使用深度学习框架,请参阅安装 ArcGIS 的深度学习框架

  • 在训练过程中使用预训练模型很有帮助,特别是当您的数据、时间或计算资源有限时。 预训练模型减少了大量训练的需要,并为快速创建有用的模型提供了可靠的起点。 要使用预训练模型,新的训练数据必须与预训练模型兼容。 这意味着新的训练数据必须与用于创建预训练模型的训练数据具有相同的属性和对象代码。 如果训练数据中的目标代码与预训练模型中的代码不匹配,则必须相应地重新映射训练数据的目标代码。

  • 点云对象检测模型只能使用支持 CUDA 的 NVIDIA 显卡进行训练。 当处理器类型环境未设置为具有支持 CUDA 的显卡的计算机时,将使用具有最优化硬件的显卡进行训练。 否则,可以在 GPU ID 环境设置中分配特定的显卡。

  • 在训练过程中将报告以下指标:

    • 轮数 - 与结果相关联的轮数编号
    • 训练损失 - 熵损失函数的结果,该结果是训练数据的平均值
    • 验证损失 - 熵损失函数的结果,该结果通过将在轮数中训练的模型应用于验证数据来确定
    • 平均精度 - 验证数据中由轮数训练的模型所正确分类的点(正确)与验证数据中所有点的比率

    具有低训练损失和高验证损失的模型被认为过度拟合训练数据,它从训练数据的伪影中检测模式,从而确定导致模型无法良好运行以验证数据的模式。 达到高训练损失和高验证损失的模型被认为对训练数据拟合不足,其中没有足够有效地学习模式来生成可用的模型。

    了解有关访问点云训练结果的详细信息

  • 创建一个文件夹来存储每轮结束时创建的检查点模型。 检查点文件夹名称以与模型相同的名称开头,以 .checkpoints 为后缀。 它存储在输出模型位置参数值中。

参数

标注说明数据类型
输入训练数据

将用于训练模型的点云对象检测训练数据(*.pcotd 文件)。

File
输出模型位置

现有文件夹将存储包含深度学习模型的新目录。

Folder
输出模型名称

输出 Esri 模型定义文件的名称 (*.emd)、深度学习包 (*.dlpk) 以及将被创建以用于存储它们的目录名称。

String
预训练模型定义文件
(可选)

将优化的预训练对象检测模型。 提供预训练的模型时,输入训练数据的属性和最大点数必须与生成此模型的训练数据所使用的相同。

File
架构
(可选)

指定将用于训练模型的架构。

  • 稀疏嵌入式卷积检测将使用稀疏嵌入式卷积检测(SECOND)架构。 这是默认设置。
String
属性选择内容
(可选)

指定训练模型时将与分类代码配合使用的点属性。 仅点云训练数据中存在的属性可用。 默认情况下,不包含其他属性。

  • 强度将使用激光雷达脉冲返回幅度的测量值。
  • 回波编号将使用从给定的激光雷达脉冲获得的点顺序位置。
  • 回波数将使用在与给定点关联的脉冲中被识别为点的激光雷达回波总数。
  • 红色波段将使用来自具有颜色信息的点云的红色波段值。
  • 绿色波段将使用来自具有颜色信息的点云的绿色波段值。
  • 蓝色波段将使用来自具有颜色信息的点云的蓝色波段值。
  • 近红外波段将使用来自具有近红外信息的点云的近红外波段值。
  • 相对高度将使用每个点相对于参考面(通常是裸地 DEM)的相对高度。
String
每块最小点数
(可选)

训练模型时,给定块中必须存在的最小点数。 默认值为 0。

Long
重新映射对象代码
(可选)

定义在训练深度学习模型之前如何将目标代码重新映射到新值。

  • 当前代码 - 训练数据中的目标代码值
  • 重映射代码 - 现有代码将更改为的目标代码值

Value Table
感兴趣的对象代码
(可选)

将用于过滤训练数据中的对象的对象代码。 当提供对象代码时,未包含的对象将被忽略。

Long
仅训练包含对象的块
(可选)

指定是否仅使用包含对象的块或所有块(包括不包含对象的块)来训练模型。

  • 选中 - 将仅使用包含对象的块来训练模型。 用于验证的数据不会被修改。
  • 未选中 - 将使用所有块来训练模型,包括那些不包含对象的块。 这是默认设置。
Boolean
对象描述
(可选)

训练数据中每个目标代码的描述。

  • 对象代码 - 模型学习到的对象代码值
  • 描述 - 类代码描述的对象

Value Table
模型选择条件
(可选)

指定将用于确定最终模型的统计基础。

  • 验证损失使用将熵损失函数应用于验证数据时可以获得最低结果的模型。
  • 平均精度将使用在验证数据中由该时期训练的模型正确分类的点(正确)在验证数据中的所有点中实现最高比率的模型。 这是默认设置。
String
最大轮数
(可选)

每个数据块通过神经网络向前和向后传递的次数。 默认值为 25。

Long
学习率策略
(可选)

指定在训练期间修改学习率的方式。

  • 单周期学习率学习率将在每轮中循环,使用 1cycle 技术的 Fast.AI 实施来训练神经网络,从而帮助改进卷积神经网络的训练。 这是默认设置。
  • 固定学习率在整个训练过程中将使用相同的学习率。
String
学习率
(可选)

现有信息将被新信息覆盖的比率。 如果未提供任何值,则系统将在训练过程中从学习曲线中提取最佳学习率。 这是默认设置。

Double
批大小
(可选)

在任何给定时间将要处理的训练数据块的数量。 默认值为 2。

Long
当模型不再改进时,停止训练
(可选)

指定为模型选择标准参数指定的指标在连续 5 轮未记录任何改进后,模型训练是否将停止。

  • 选中 - 当模型不再改进时,模型训练将停止。
  • 未选中 - 模型训练将一直持续,直至达到最大轮数为止。 这是默认设置。
Boolean
架构设置
(可选)

可以修改架构设置以改善训练结果。

  • 选项 - 可以修改的特定于体系结构的选项。
    • 体素宽度 - 训练期间使用的体素的 x 和 y 尺寸。 对应的值以米为线性单位,可以表示为双精度值。
    • 体素高度 - 训练期间使用的体素的 z 维度。 对应的值以米为线性单位,可以表示为双精度值。
    • 体素点限制 - 给定体素中的点数。 对应的值必须是正整数。 当未提供值时,该限制是在训练过程中根据训练数据的块大小和块点限制计算的。
    • 最大训练体素 - 训练数据中可使用的最大体素数。 对应的值应该是正整数。 如果未提供值,则在训练期间计算此限制。
    • 最大验证体素 - 验证数据中可使用的最大体素数。 对应的值应该是正整数。 如果未提供值,则在训练期间计算此限制。
  • - 与正在修改的选项相对应的值。

Value Table

派生输出

标注说明数据类型
输出模型

生成的输出对象检测模型。

File
输出轮数统计数据

输出 ASCII 表,包含在训练过程中获得的纪元统计信息。

Text File

arcpy.ddd.TrainPointCloudObjectDetectionModel(in_training_data, out_model_location, out_model_name, {pretrained_model}, {architecture}, {attributes}, {min_points}, {remap_objects}, {target_objects}, {train_blocks}, {object_descriptions}, {model_selection_criteria}, {max_epochs}, {learning_rate_strategy}, {learning_rate}, {batch_size}, {early_stop}, {architecture_settings})
名称说明数据类型
in_training_data

将用于训练模型的点云对象检测训练数据(*.pcotd 文件)。

File
out_model_location

现有文件夹将存储包含深度学习模型的新目录。

Folder
out_model_name

输出 Esri 模型定义文件的名称 (*.emd)、深度学习包 (*.dlpk) 以及将被创建以用于存储它们的目录名称。

String
pretrained_model
(可选)

将优化的预训练对象检测模型。 提供预训练的模型时,输入训练数据的属性和最大点数必须与生成此模型的训练数据所使用的相同。

File
architecture
(可选)

指定将用于训练模型的架构。

  • SECD将使用稀疏嵌入式卷积检测(SECOND)架构。 这是默认设置。
String
attributes
[attributes,...]
(可选)

指定训练模型时将与分类代码配合使用的点属性。 仅点云训练数据中存在的属性可用。 默认情况下,不包含其他属性。

  • INTENSITY将使用激光雷达脉冲返回幅度的测量值。
  • RETURN_NUMBER将使用从给定的激光雷达脉冲获得的点顺序位置。
  • NUMBER_OF_RETURNS将使用在与给定点关联的脉冲中被识别为点的激光雷达回波总数。
  • RED将使用来自具有颜色信息的点云的红色波段值。
  • GREEN将使用来自具有颜色信息的点云的绿色波段值。
  • BLUE将使用来自具有颜色信息的点云的蓝色波段值。
  • NEAR_INFRARED将使用来自具有近红外信息的点云的近红外波段值。
  • RELATIVE_HEIGHT将使用每个点相对于参考面(通常是裸地 DEM)的相对高度。
String
min_points
(可选)

训练模型时,给定块中必须存在的最小点数。 默认值为 0。

Long
remap_objects
[remap_objects,...]
(可选)

定义在训练深度学习模型之前如何将目标代码重新映射到新值。

  • 当前代码 - 训练数据中的目标代码值
  • 重映射代码 - 现有代码将更改为的目标代码值

Value Table
target_objects
[target_objects,...]
(可选)

将用于过滤训练数据中的对象的对象代码。 当提供对象代码时,未包含的对象将被忽略。

Long
train_blocks
(可选)

指定是否仅使用包含对象的块或所有块(包括不包含对象的块)来训练模型。

  • OBJECT_BLOCKS将仅使用包含对象的块来训练模型。 用于验证的数据不会被修改。
  • ALL_BLOCKS将使用所有块来训练模型,包括那些不包含对象的块。 这是默认设置。
Boolean
object_descriptions
[object_descriptions,...]
(可选)

训练数据中每个目标代码的描述。

  • 对象代码 - 模型学习到的对象代码值
  • 描述 - 类代码描述的对象

Value Table
model_selection_criteria
(可选)

指定将用于确定最终模型的统计基础。

  • VALIDATION_LOSS使用将熵损失函数应用于验证数据时可以获得最低结果的模型。
  • AVERAGE_PRECISION将使用在验证数据中由该时期训练的模型正确分类的点(正确)在验证数据中的所有点中实现最高比率的模型。 这是默认设置。
String
max_epochs
(可选)

每个数据块通过神经网络向前和向后传递的次数。 默认值为 25。

Long
learning_rate_strategy
(可选)

指定在训练期间修改学习率的方式。

  • ONE_CYCLE学习率将在每轮中循环,使用 1cycle 技术的 Fast.AI 实施来训练神经网络,从而帮助改进卷积神经网络的训练。 这是默认设置。
  • FIXED在整个训练过程中将使用相同的学习率。
String
learning_rate
(可选)

现有信息将被新信息覆盖的比率。 如果未提供任何值,则系统将在训练过程中从学习曲线中提取最佳学习率。 这是默认设置。

Double
batch_size
(可选)

在任何给定时间将要处理的训练数据块的数量。 默认值为 2。

Long
early_stop
(可选)

指定为 model_selection_criteria 参数指定的指标在连续 5 轮未记录任何改进后,模型训练是否将停止。

  • EARLY_STOP当模型不再改进时,模型训练将停止。
  • NO_EARLY_STOP模型训练将一直持续,直至达到最大轮数为止。 这是默认设置。
Boolean
architecture_settings
[architecture_settings,...]
(可选)

可以修改架构设置以改善训练结果。

  • 选项 - 可以修改的特定于体系结构的选项。
    • VOXEL_WIDTH - 训练期间使用的体素的 x 和 y 维度。 对应的值以米为线性单位,可以表示为双精度值。
    • VOXEL_HEIGHT - 训练期间使用的体素的 z 维度。 对应的值以米为线性单位,可以表示为双精度值。
    • VOXEL_POINT_LIMIT - 给定体素中的点数。 对应的值应该是正整数。 当未提供值时,该限制是在训练过程中根据训练数据的块大小和块点限制计算的。
    • MAX_TRAINING_VOXELS - 训练数据中可使用的最大体素数。 对应的值应该是正整数。 如果未提供值,则在训练期间计算此限制。
    • MAX_VALIDATION_VOXELS - 验证数据中可使用的体素的最大数量。 对应的值应该是正整数。 如果未提供值,则在训练期间计算此限制。
  • 值 - 与正在修改的选项相对应的值。

Value Table

派生输出

名称说明数据类型
out_model

生成的输出对象检测模型。

File
out_epoch_stats

输出 ASCII 表,包含在训练过程中获得的纪元统计信息。

Text File

代码示例

TrainPointCloudObjectDetectionModel 示例(独立脚本)

下面的示例演示了如何在 Python 窗口中使用此工具。

import arcpy

arcpy.env.workspace = "D:/Deep_Learning_Workspace"
arcpy.ddd.TrainPointCloudObjectDetectionModel("Cars.pcotd", "D:/DL_Models", "Cars", 
    attributes=["INTENSITY", "RETURN_NUMBER", "NUMBER_OF_RETURNS", "RELATIVE_HEIGHT"],
    object_descriptions=[[31, "Cars"]], train_blocks="OBJECT_BLOCKS",
    model_selection_criteria="AVERAGE_PRECISION", max_epochs=10)