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

摘要

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

插图

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

使用情况

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

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

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

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

  • 点云中的点可以通过其类代码从训练数据中排除,以通过减少必须处理的点的数量来帮助提高训练模型的性能。 排除的点应该属于可以轻易分类的类,并且不一定为正在训练模型的对象提供足够的上下文。 考虑过滤掉分类为重叠或噪点的点。 如果在训练数据的生成期间计算距地面的高度,则还可以过滤出地面分类点。

  • 如果可能,请指定一个块大小,使其能够充分捕获将用于训练模型的对象。 虽然每个块可能不总是包含整个对象,但是在训练数据中创建的重叠块将捕获对象的足够数量的变化表示,以便训练成功的模型。

  • 块的点限制应反映数据的块大小和平均点间距。 给定块中的点数可以使用用作栅格数据的 LAS 点统计工具,使用方法参数的点计数选项进行估算,并将所需的块大小作为输出栅格的像元大小。 此栅格的影像直方图可以说明数据集中每个块的点分布。 如果直方图显示具有大幅变化的大量块,则其可以指示存在包含密集点集合构成的潜在热点的不规则采样数据。 如果块包含的点多于块的点限制,则将多次创建该块,以确保在训练数据中表示其所有点。 例如,如果点限制为 10,000,并且给定的块包含 22,000 个点,则将创建三个包含 10,000 个点的块,以确保每个块中的均匀采样。 还应该避免块的点限制显著高于大多数块的标称点数量的情况。 在一些架构中,数据会进行上采样以满足点限制。 由于这些原因,使用与覆盖训练数据中的大多数块的预期点计数接近的块大小和块点限制。 创建训练数据后,工具的消息窗口中将显示直方图,并将其图像存储在包含训练数据和验证数据的文件夹中。 可以检查该直方图以确定是否指定了适当的块大小和点限制组合。 如果这些值指示点限制欠佳,则使用更合适的块点限制参数值重新运行工具。

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

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

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

参数

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

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

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])

许可信息

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