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

摘要

使用 PointCNN 架构为点云分类训练深度学习模型。

使用情况

  • 该工具通过深度学习框架使用 PointCNN 实施。

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

  • 可以使用具有 CUDA 功能的 NVIDIA 显卡或 CPU 来训练点分类模型。 该工具将尝试选择计算机上具有 CUDA 功能的速度最快的显卡。 如果存在多个 GPU 并且工具未使用速度最快的显卡,则可通过 GPU ID 环境设置来指定所需 GPU。 如果所选的 GPU 也用于显示,则操作系统和当时使用该显示的任何其他应用程序都会减少其可用内存。 要最大化 GPU 内存进行训练,请考虑使用不会用于训练的显卡来驱动计算机的显示。

    使用 GPU 通常比使用 CPU 快得多。 仅当不存在可用 GPU 时,才应使用 CPU。 如果使用 CPU 进行训练,请提供尽可能小的训练样本,以估计执行训练操作之前处理数据所花费的时间。

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

  • 指定预训练模型后,要训练的模型将采用预训练模型中的权重,并对权重进行微调以对预训练模型中的相同对象进行分类。 因此,训练数据必须具有与预训练模型相同的属性和类代码。 如果训练数据使用不同的类代码表示预训练模型中的相同对象,请相应地重新映射训练数据的类代码。

  • 创建一个文件夹来存储每个时期创建的检查点模型。 该文件夹的名称与后缀为 .checkpoints输出模型位置参数值相同,并且在同一位置创建。 训练完成后,将创建一个名称与后缀为 _stats.csv输出模型名称参数值相同的 CSV 表,并将其添加到检查点文件夹。 下表提供了有关获取的每个类代码和时期的结果的以下字段:

    • Epoch- 与该行中的结果关联的时期数。 该值与在检查点模型目录中创建的模型对应。 通过将在时期中训练的模型应用于验证数据来获得结果。
    • Class_Code- 报告其结果的类代码。
    • Precision- 正确分类的点(正确)占所有被分类点(正确和误报)的比率。
    • Recall- 正确分类的点(正确)占所有使用该值进行分类的点(正确和误报)的比率。
    • F1_Score- 精度和召回率值的谐波均值。
  • 在训练过程中,PointCNN 从训练数据中学习模式,并最小化熵损失函数。 当工具运行时,进度消息将返回以下针对每个时期获得的训练结果的统计汇总:

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

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

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

  • 训练期间使用的专用内存是给定时期中分配给深度学习框架的内存与迭代中每批数据大小的总和。 每批数据的大小取决于属性选择参数中指定的其他点属性的数量、任何给定块中的点总数,以及在批大小参数中指定的每批的块数。 导出训练数据时,将确定每个块的最大点数,并且在估计训练操作的潜在内存占用量时应假定该值。

参数

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

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

File
输出模型位置

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

Folder
输出模型名称

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

String
预训练模型
(可选)

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

File
属性选择内容
(可选)

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

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

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

Long
类重映射
(可选)

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

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

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

Long
背景类代码
(可选)

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

Long
类描述
(可选)

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

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

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

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

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

Long
每个时期的迭代 (%)
(可选)

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

Double
学习率
(可选)

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

Double
批大小
(可选)

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

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

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

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

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

  • 单周期学习率学习率将在每个时期中循环,使用 1cycle 技术的 Fast.AI 实施来训练神经网络,从而帮助改进卷积神经网络的训练。 这是默认设置。
  • 固定学习率在整个训练过程中将使用相同的学习率。
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})
名称说明数据类型
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将使用来自具有近红外信息的点云的近红外波段值。
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

派生输出

名称说明数据类型
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)

环境

特殊情况

许可信息

  • Basic: 需要 3D Analyst
  • Standard: 需要 3D Analyst
  • Advanced: 需要 3D Analyst

相关主题