训练点云分类模型 (3D Analyst)

摘要

为点云分类训练深度学习模型。

了解有关训练点云分类模型的详细信息

使用情况

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

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

  • 可以使用具有 CUDA 功能的 NVIDIA 显卡或 CPU 来训练点云分类模型。 使用 GPU 通常比使用 CPU 更快。 仅在没有可用 GPU 的情况下使用 CPU。 使用 CPU 进行训练时,首先使用 RandLA-Net 架构,因为它消耗的内存比 PointCNN 少。 您还可以使用尽可能小的训练样本进行试验,以估计在使用完整训练数据集进行训练之前处理数据所需的时间。

  • 当使用 GPU 在多显卡计算机上训练模型时,该工具将使用计算机上最快的显卡。 您还可以使用 GPU ID 环境设置指定 GPU。 如果计算机上有多个显卡,您可以将计算资源最多的显卡用于训练,将资源较少的显卡用于显示器,从而最大程度提高训练性能。 如果所选 GPU 也用于显示器,则其可用内存将降低,因为被操作系统和训练过程中使用显示器的应用程序所消耗。

  • 使用预训练模型是有利的,特别是在面临数据、时间或计算资源的限制时。 预训练模型减少了对大量训练的需求,并提供了一个可靠的起点,可以加速有用模型的创建。 为了利用预训练模型,新的训练数据必须与预训练模型兼容。 确保新训练数据与用于创建预训练模型的训练数据具有相同的属性和类代码。 如果训练数据中的类代码与预训练模型中的类并不多,则必须相应地重新映射训练数据的类。

  • 当该工具运行时,其进度消息会报告有关每个时期所实现的训练结果的以下统计数据:

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

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

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

  • 创建一个文件夹来存储每轮结束时创建的检查点模型。 该文件夹的名称与后缀为 .checkpoints 的模型相同,并且存储在输出模型位置参数值中。 训练完成后,将在检查点文件夹中创建一个名称以输出模型名称值开头并以 _stats.csv 结尾的 CSV 表。 该表包括与每个类代码和历元获得的结果相关的以下字段:

    • Epoch- 与该行中的结果相关联的轮数。 该值与在检查点模型目录中创建的模型对应。 通过将在轮数中训练的模型应用于验证数据来获得结果。
    • Class_Code- 报告其结果的类代码。
    • Precision- 正确分类的点(正确)占所有被分类点(正确和误报)的比率。
    • Recall- 正确分类的点(正确)占所有使用该值进行分类的点(正确和误报)的比率。
    • F1_Score- 精度和召回率值的谐波均值。
  • 训练期间使用的专用内存是给定轮数中分配给深度学习框架的内存与迭代中每批数据大小的总和。 每批数据的大小取决于属性选择参数中指定的其他点属性的数量、任何给定块中的点总数,以及在批大小参数中指定的每批的块数。 导出训练数据时,将确定每个块的最大点数,并且在估计训练操作的潜在内存占用量时应假定该值。

  • 属性选择参数的相对高度选项添加了一个属性,该属性标识点距参考表面的高度,例如裸露地表高程模型。 使用此属性可以潜在地提高模型在训练过程中学习方向关系的能力。

参数

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

点云训练数据(*.pctd 文件)不能用于训练分类模型。

File
输出模型位置

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

Folder
输出模型名称

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

String
预训练模型
(可选)

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

File
属性选择内容
(可选)

指定将用于训练模型的点属性。 仅点云训练数据中存在的属性可用。 默认情况下,不包含其他属性。

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

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

Long
类重映射
(可选)

定义在训练深度学习模型之前,类代码值如何映射到新值。

Value Table
感兴趣内容的类代码
(可选)

将用于过滤训练数据中的块的类代码。 指定了感兴趣区域的类代码后,所有其他类代码都将重新映射为背景类代码。

Long
背景类代码
(可选)

指定了感兴趣内容的类代码后,将用于所有其他类代码的类代码值。

Long
类描述
(可选)

有关训练数据中每个类代码代表内容的描述。

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

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

  • 验证损失使用将熵损失函数应用于验证数据时可以获得最低结果的模型。
  • 召回率将使用针对所有类代码均能获得召回率的最佳宏平均值的模型。 每个类代码的召回率值均由正确分类的点(正确)占所有使用该值进行分类的点(预期正确)的比率确定。 这是默认设置。
  • F1 得分将使用针对所有类代码均能获得精度和召回率宏平均值的最佳谐波均值的模型。 这样可以在精度和召回率之间取得平衡,从而有利于提高整体性能。
  • 精度将使用针对所有类代码均能获得精度的最佳宏平均值的模型。 每个类代码的精度均由正确分类的点(正确)占所有被分类点(正确和误报)的比率确定。
  • 精度将使用可以在验证数据的所有点之间获得最高正确分类点比率的模型。
String
最大轮数
(可选)

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

Long
每轮的迭代 (%)
(可选)

在每轮训练中处理的数据的百分比。 默认值为 100。

Double
学习率
(可选)

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

Double
批大小
(可选)

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

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

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

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

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

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

指定将用于训练模型的神经网络架构。 指定预训练模型时,将自动设置用于创建预训练模型的架构。

  • PointCNN将使用 PointCNN 架构。
  • RandLA-Net将使用 RandLA-Net 架构。 RandLA-Net 建立在简单随机抽样和局部特征聚合的原则之上。 这是默认设置。
  • 语义查询网络将使用语义查询网络(SQN)架构。 SQN 不需要像其他神经网络架构那样对训练数据进行全面分类。
String

派生输出

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

此工具生成的结果模型。

File
输出模型统计数据

.csv 文件包含每个类代码和轮数的精度、召回率和 F1 得分。

Text File
输出轮数统计数据

包含在每轮中获得的训练损失、验证损失、准确度、精度、召回率和 F1 得分的 .csv 文件。

Text File

arcpy.ddd.TrainPointCloudClassificationModel(in_training_data, out_model_location, out_model_name, {pretrained_model}, {attributes}, {min_points}, {class_remap}, {target_classes}, {background_class}, {class_descriptions}, {model_selection_criteria}, {max_epochs}, {epoch_iterations}, {learning_rate}, {batch_size}, {early_stop}, {learning_rate_strategy}, {architecture})
名称说明数据类型
in_training_data

点云训练数据(*.pctd 文件)不能用于训练分类模型。

File
out_model_location

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

Folder
out_model_name

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

String
pretrained_model
(可选)

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

File
attributes
[attributes,...]
(可选)

指定将用于训练模型的点属性。 仅点云训练数据中存在的属性可用。 默认情况下,不包含其他属性。

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

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

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

定义在训练深度学习模型之前,类代码值如何映射到新值。

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

将用于过滤训练数据中的块的类代码。 指定了感兴趣区域的类代码后,所有其他类代码都将重新映射为背景类代码。

Long
background_class
(可选)

指定了感兴趣内容的类代码后,将用于所有其他类代码的类代码值。

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

有关训练数据中每个类代码代表内容的描述。

Value Table
model_selection_criteria
(可选)

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

  • VALIDATION_LOSS使用将熵损失函数应用于验证数据时可以获得最低结果的模型。
  • RECALL将使用针对所有类代码均能获得召回率的最佳宏平均值的模型。 每个类代码的召回率值均由正确分类的点(正确)占所有使用该值进行分类的点(预期正确)的比率确定。 这是默认设置。
  • F1_SCORE将使用针对所有类代码均能获得精度和召回率宏平均值的最佳谐波均值的模型。 这样可以在精度和召回率之间取得平衡,从而有利于提高整体性能。
  • PRECISION将使用针对所有类代码均能获得精度的最佳宏平均值的模型。 每个类代码的精度均由正确分类的点(正确)占所有被分类点(正确和误报)的比率确定。
  • ACCURACY将使用可以在验证数据的所有点之间获得最高正确分类点比率的模型。
String
max_epochs
(可选)

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

Long
epoch_iterations
(可选)

在每轮训练中处理的数据的百分比。 默认值为 100。

Double
learning_rate
(可选)

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

Double
batch_size
(可选)

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

Long
early_stop
(可选)

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

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

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

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

指定将用于训练模型的神经网络架构。 指定预训练模型时,将自动设置用于创建预训练模型的架构。

  • POINTCNN将使用 PointCNN 架构。
  • RANDLANET将使用 RandLA-Net 架构。 RandLA-Net 建立在简单随机抽样和局部特征聚合的原则之上。 这是默认设置。
  • SQN将使用语义查询网络(SQN)架构。 SQN 不需要像其他神经网络架构那样对训练数据进行全面分类。
String

派生输出

名称说明数据类型
out_model

此工具生成的结果模型。

File
out_model_stats

.csv 文件包含每个类代码和轮数的精度、召回率和 F1 得分。

Text File
out_epoch_stats

包含在每轮中获得的训练损失、验证损失、准确度、精度、召回率和 F1 得分的 .csv 文件。

Text File

代码示例

TrainPointCloudClassificationModel 示例(独立脚本)

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

import arcpy

arcpy.env.workspace = "D:/Deep_Learning_Workspace"
arcpy.ddd.TrainPointCloudClassificationModel(
    "Powerline_Training.pctd", "D:/DL_Models", "Powerline", 
    attributes=['INTENSITY', 'RETURN_NUMBER', 'NUMBER_OF_RETURNS'],
    target_classes=[14, 15], background_class=1,
    class_descriptions=[[1, "Background"], [14, "Wire Conductor"], [15, "Transmission Tower"]],
    model_selection_criteria="F1_SCORE", max_epochs=10)

相关主题