准备点云对象检测训练数据 (3D Analyst)

摘要

创建点云训练数据,以使用深度学习创建对象检测模型。

插图

准备点云对象检测训练数据工具说明

使用情况

  • 点云对象检测训练数据由一个目录定义,该目录的扩展名 .pcotd 包含两个子目录:一个包含用于训练模型的数据,另一个包含用于在整个训练过程中验证模型的数据。 必须始终指定输入点云以及表示用于训练和验证的对象边界框的单独多面体要素。 可以提供边界多边形来限制导出用于训练的数据。 验证数据可以通过以下方式定义:

    • 除了输入点云之外,还提供验证点云。 该数据集必须引用与输入点云不同的点集。 还可以指定边界来裁剪验证点云。
    • 仅提供具有训练和验证边界的输入点云。 这将导致训练和验证数据均源自同一输入点云,因此无需为验证点云参数指定数据集。 避免两个边界多边形数据集之间重叠,这样您就不会使用相同的点云数据进行训练和验证。
  • 将点云中存在的每种对象类型包含在多面体边界框中。 训练或验证数据中的未识别对象将导致模型无法有效学习如何识别对象。 如果点云包含未识别的对象,请使用边界要素将导出的训练数据集限制到对象正确包含在边界框中的位置。

  • 表示对象的点不需要进行分类即可在训练数据集中用于对象检测。 这简化了标记对象的任务,仅将边界框创建为多面体要素。 可以通过多面体要素类的交互式 3D 编辑来生成边界框。 但是,如果对象由分类点云表示,则可以通过从点云提取对象工具创建这些点的边界框。

  • 输入点云应该具有相当一致的点密度。 评估点云以确定其是否包含点密度较高的位置,例如通过重叠航线测量或者闲置的地面扫描仪采集的区域。 对于具有重叠航线的机载激光雷达,可以使用分类 LAS 重叠工具来标记重叠点并实现更加一致的点分布。 可以使用稀疏化 LAS 工具将具有过采样热点的其他类型的点云稀疏化为规则分布。

  • 对于点云中的点,可以在训练数据中通过其类代码将其从排除,从而通过减少必须处理的点的数量来帮助提高模型训练的性能。 排除的点应属于易于分类的类,并且无需为正在训练模型的对象提供足够的背景。 请考虑过滤掉分类为重叠或噪声的点。 如果在训练数据的生成过程中计算距地面的高度,也可以过滤掉地面分类点。

  • 如果可能,请指定足以捕获模型将要训练的对象的块大小。 虽然每个块可能无法始终包含整个对象,但在训练数据中创建的重叠块将捕获足够数量的对象的不同表示,用于训练成功的模型。

  • 块点限制应反映数据的块大小和平均点间距。 可以将用作栅格数据的 LAS 点统计工具以及方法参数的点计数选项配合使用,并将所需块大小作为输出栅格的像元大小,以估算给定块中的点数。 此栅格的图像直方图可以演示数据集中每个块的点分布。 如果直方图传达了大量具有宽方差的块,则可能指示存在包含密集点集合的潜在热点的不规则采样数据。 如果块包含的点数超过块点限制,则将多次创建该块,以确保在训练数据中表示其所有点。 例如,如果点限制为 10,000,并且给定块包含 22,000 个点,则将创建三个 10,000 个点的块,以确保每个块中的采样均匀。 还应该避免明显高于大多数块中标称点计数的块点限制。 在某些架构中,将对数据进行上采样以符合点限制。 由于这些原因,请使用接近覆盖训练数据中大部分块的预期点计数的块大小和块点限制。 创建训练数据后,工具的消息窗口中将显示直方图,并且其图像存储在包含训练和验证数据的文件夹中。 可以查看此直方图以确定是否指定了适当的块大小和点限制组合。 如果这些值指示点限制不理想,请针对块点限制参数使用更合适的值来重新运行该工具。

  • 块点限制应考虑计算机上将用于训练的专用 GPU 内存容量。 训练期间的内存分配将取决于每个块的点数、所使用的属性以及给定批处理中同时处理的块总数。 如果需要较大的块大小和点限制以高效地训练模型,则可以在训练步骤中减小批处理大小,以确保能够处理较多的点。

  • 确保将输出写入相应位置,该位置的磁盘空间足够容纳训练数据。 此工具将创建未压缩的 HDF5 文件的部分重叠块,这些文件将在 4 个块中复制每个点。 在超过最大点限制的块中,可能会对某些点复制四次以上。 生成的训练数据将占用的磁盘空间至少是源点云数据的三倍。

  • 该工具的消息窗口显示每种类型对象的四分位比。 该比率是通过将第三个四分位数中的物体体积除以第一个四分位数来计算的。 该指标可作为对象之间大小变异性的指标。 四分位比越大表明物体体积的变异性越大,而四分位数越小则表明变异性越小。 如果体积存在显着变化,您可能需要调整训练点云对象检测模型工具的架构设置参数中的体素参数以获得准确的模型。

参数

标注说明数据类型
输入点云

将用于创建对象检测训练数据的点云。

LAS Dataset Layer; File
输入训练要素

多面体要素将识别将用于训练模型的对象。

Feature Layer
输入验证要素

多面体要素将识别在训练过程中用于验证模型的对象。

Feature Layer
块大小

将根据输入点云创建的每个训练数据块的直径。 通常,块大小应足够大,才能捕获感兴趣对象及其周围环境。

Linear Unit
输出训练数据

输出训练数据(*.pcotd 文件)的位置和名称。

File
训练边界要素
(可选)

将根据用于训练模型的输入点云描绘点的子集的面要素。 如果未提供验证点云参数值,则此参数为必需项。

Feature Layer
训练代码字段
(可选)

该字段标识训练多面体要素中每种类型对象的唯一 ID。 如果未定义字段,则为对象分配 ID 0。

Field
验证点云
(可选)

在训练过程中将用于验证深度学习模型的点云。 该数据集必须引用与输入点云不同的点集,才能确保经过训练的模型的质量。 如果未提供验证点云,则输入点云可用于通过为训练边界要素验证边界要素参数提供面要素类来定义训练和验证数据集。

LAS Dataset Layer; File
验证边界要素
(可选)

将描绘用于在训练过程中验证模型的点子集的面要素。 如果未提供验证点云,则将从输入点云中获取点;对于训练边界要素参数,面将为必需项。

Feature Layer
验证代码字段
(可选)

该字段标识验证多面体要素中每种类型对象的唯一 ID。 如果未定义字段,则为对象分配 ID 0。

Field
块点限制
(可选)

训练数据的每个块中可以存储的最大点数。 如果某个块中包含的点数超过该值,则将针对同一位置创建多个块,以确保训练时使用所有这些点。 默认值为 500,000。

Long
参考高度面
(可选)

将用于为点云数据中的每个点提供相对高度值的栅格表面。 与栅格不重叠的点将在分析中忽略。

Raster Layer
排除的类代码
(可选)

将从训练数据中排除的类代码。 可以指定 0 到 255 范围内的任何值。

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

指定训练数据是否仅包含包含对象的块,或者是否也包含不包含对象的块。 用于验证的数据不会受到该参数的影响。

  • 选中 - 仅包含对象的块将在训练数据中导出。
  • 未选中 - 包含对象和不包含对象的块都将导出到训练数据中。 这是默认设置。

Boolean

arcpy.ddd.PreparePointCloudObjectDetectionTrainingData(in_point_cloud, in_training_features, in_validation_features, block_size, out_training_data, {training_boundary}, {training_code_field}, {validation_point_cloud}, {validation_boundary}, {validation_code_field}, {block_point_limit}, {reference_height}, {excluded_class_codes}, {blocks_contain_objects})
名称说明数据类型
in_point_cloud

将用于创建对象检测训练数据的点云。

LAS Dataset Layer; File
in_training_features

多面体要素将识别将用于训练模型的对象。

Feature Layer
in_validation_features

多面体要素将识别在训练过程中用于验证模型的对象。

Feature Layer
block_size

将根据输入点云创建的每个训练数据块的直径。 通常,块大小应足够大,才能捕获感兴趣对象及其周围环境。

Linear Unit
out_training_data

输出训练数据(*.pcotd 文件)的位置和名称。

File
training_boundary
(可选)

将根据用于训练模型的输入点云描绘点的子集的面要素。 如果未提供 validation_point_cloud 参数值,则此参数为必需项。

Feature Layer
training_code_field
(可选)

该字段标识训练多面体要素中每种类型对象的唯一 ID。 如果未定义字段,则为对象分配 ID 0。

Field
validation_point_cloud
(可选)

将用于验证深度学习模型的点云的源。 该数据集必须引用与输入点云不同的点集,才能确保经过训练的模型的质量。 如果未提供验证点云,则输入点云可用于通过为 training_boundaryvalidation_boundary 参数提供面要素类来定义训练和验证数据集。

LAS Dataset Layer; File
validation_boundary
(可选)

将描绘用于在训练过程中验证模型的点子集的面要素。 如果未提供验证点云,则将从输入点云中获取点;对于 training_boundary 参数,面将为必需项。

Feature Layer
validation_code_field
(可选)

该字段标识验证多面体要素中每种类型对象的唯一 ID。 如果未定义字段,则为对象分配 ID 0。

Field
block_point_limit
(可选)

训练数据的每个块中可以存储的最大点数。 如果某个块中包含的点数超过该值,则将针对同一位置创建多个块,以确保训练时使用所有这些点。 默认值为 500,000。

Long
reference_height
(可选)

将用于为点云数据中的每个点提供相对高度值的栅格表面。 与栅格不重叠的点将在分析中忽略。

Raster Layer
excluded_class_codes
[excluded_class_codes,...]
(可选)

将从训练数据中排除的类代码。 可以指定 0 到 255 范围内的任何值。

Long
blocks_contain_objects
(可选)

指定训练数据是否仅包含包含对象的块,或者是否也包含不包含对象的块。 用于验证的数据不会受到该参数的影响。

  • BLOCKS_WITH_OBJECTS仅包含对象的块将在训练数据中导出。
  • ALL_BLOCKS包含对象和不包含对象的块都将导出到训练数据中。 这是默认设置。
Boolean

代码示例

PreparePointCloudObjectDetectionTrainingData 示例(Python 窗口)

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

import arcpy
arpy.env.workspace = r"C:\GIS_Data"
arcpy.ddd.PreparePointCloudObjectDetectionTrainingData("Training.lasd", r"Objects.fgdb\Training_FCs",
                                                       r"Objects.fgdb\Validation_FCs", "12 Meters",
                                                       "Training_Cars.pcotd", training_code_field="Car_Type",
                                                       validation_code_field="Car_Type", reference_surface="DEM.tif",
                                                       excluded_classes=[2, 7, 18])