创建可用于点云分类的深度学习模型涉及两个主要步骤:准备训练数据和实际训练。 第一部分通常是最难的,因为要由您来提供训练数据。 提供训练数据后,剩下的大部分工作将由计算机执行。
训练数据是分类的点,您将这些点作为示例供神经网络学习。 通常,您提供的示例越多,培训的效果就越好。 您的示例必须尽可能准确,因此注意正确性很重要。 分类的范围必须取决于您的应用程序感兴趣的任何要素或景观元素。 训练数据也需要具有多样性,以便模型更加通用,并且验证数据具有多样性,因此获得的性能指标将更加真实。 多样性将带来更好的训练。
点云通常包含各种事物的样本,无论激光或照片可以显示哪些内容。 将每个点都分类为特定事物是不现实的,也是不可取的。 您需要的是正确分类感兴趣点。 您可以将其他点放在背景中,或其他所有分类中。 例如,如果您对电力线、植被或建筑物感兴趣,请确保对它们进行正确分类。 您可以将所有其他点保持未分类状态(例如,对于 LAS 格式激光雷达为 1 类)。
使用多少数据进行训练并没有固定的规则。 通常,您可以提供的示例越多越好。 当然,这是有实际限制的,您付出的努力也会有所减少。
准备训练数据
对于训练,您将需要一个点云,该点云可以很好地表示您打算分类的数据。 理想的情况是将要分类的数据与培训数据一样作为同一工程、同一硬件、同一集合规范的一部分进行收集。 这样成功的可能性最大。 您可以使用其他数据,但希望其特征与训练数据相似。 标称点间距和密度是关键因素。 定位精度是另一个因素。 如果您选择在训练中包括点属性(例如激光雷达返回数和强度)以改善模型预测,请确保这些属性存在于分类目标数据中。
您可以使用手动和自动技术对训练数据进行分类。 可以使用交互式 LAS 类代码编辑工具和一组基于规则的分类器。 有时,将这些结合使用可能会有所帮助。 例如,使用分类 LAS 地面和分类 LAS 建筑物地理处理工具建立基本分类。 然后,从数据集中选择一些具有良好代表性的子区域或切片(如果使用切片 LAS)作为训练站点。 手动清理这些区域,并在适当时添加一些其他类。 将这些经过编辑和改进的子区域用作训练数据。
还需要验证数据。 它用于在训练过程中对模型提供公正的评估,并且对于识别和防止过度拟合很有用,其中模型仅在训练数据上有效,而在其他方面无效。 验证数据应与训练数据相似,因为它涵盖了有代表性的感兴趣区域,并使用来自不同位置的相同分类方案。 您可以使用与训练相同的工程数据,只是属于不同的子集。 通常,需要比验证数据更多的训练数据。 没有固定的规则,但使用比验证数据多几倍的训练数据很常见。
考虑使用参考表面(例如 DEM)向训练数据添加相对高度属性。 许多感兴趣的要素,例如车辆、路灯和交通标志,都出现在特定的高度范围内。 在各地点之间地面本身的高程可能会有很大差异,但这些要素相对于地面的高度却没有很大的差异。 在这方面,每个点记录的相对于地面的高度属性可以帮助预测该点属于哪种类型的要素或类别。
您可以从训练中排除特定点。 例如,您可能不想包含噪声分类点,因为它们可能会产生负面影响。 此外,如果您使用参考表面来添加点的相对高度属性,则可以选择排除地面点,从而减少使用的点数。 反过来,这将减少培训所需的时间。
定义训练和验证数据后,您需要找出训练应用于评估点的适当采样邻域或块大小。
块大小
训练和验证数据分为可管理的小块。 这些块是圆形的,用于管理投影和非投影(例如十进制度)坐标中的数据。 然后将这些点块放入深度学习库可访问的格式。 适当调整块大小。 它们的目标是相对于可用的 GPU 内存包含合理数量的点。 训练将根据每次由训练参数(称为批量大小)所设置的块数,加载点和辅助数据结构。 这里需要注意几个变量之间的相互作用。 批量控制一次处理多少个块。 块是点及其属性的集合。 块中的点数由块的大小和块所在位置的点密度决定。 如果点云的密度一致,则块将包含相对一致的点数。 您可以使用点密度变化很大的数据集,但是可能需要更多的训练才能使其正常工作。
虽然您估计的块中点数的平均值可能是正确的,但总会有偏差,并且您必须为块中的点数建立上限。 您可以使用块点限制参数执行此操作。 当块包含的点超过该值时,将在同一位置创建多个块,以确保使用其所有数据。
尝试使用大小平均包含大约 8,000 个点的块开始。
估计块大小(即块的直径)需要您知道数据的标称点间距或点密度,以及每个块所需的点数:
point_density = 1 / (point_spacing)
block_area = desired_block_point_count / point_density
block_size = 2 * square_root(block_area / Pi)
在评估块大小时,您还可以考虑感兴趣的对象或要素的大小。 例如,如果您的要素明显小于上面估算的块大小,则可以选择相应地减小块大小。
对于具有 8 GB 专用 RAM 的 GPU,请使用默认的批量大小 2 一次将两个块的点一起加载到 GPU 中。 监控 GPU 的内存使用情况。 如果您发现训练期间仍有大量 GPU 内存可用,则可以安全地增加批量大小,以一次处理更多块。
培训
训练涉及使用训练和验证数据创建卷积神经网络 (CNN)。 生成的模型用于通过称为推断的过程对 LAS 格式点云进行分类。 PointCNN 是 ArcGIS 用于训练和推断的开源深度学习框架。 您可以在自己的数据上使用该模型,也可以将其共享给他人使用。 训练过程需要大量资源,可能会花费很长时间。 幸运的是,结果是紧凑的。 模型本身的大小通常在 15–20 MB 之间。
输出模型由多个文件组成,这些文件都放置在输出文件夹中。 其中包括 Esri 模型定义 (*.emd) 文件,这是一个包含参数设置和 *.pth 数据文件的 JSON 文件,以及您可以查看以评估训练结果的其他文件。 深度学习包 (*.dlpk) 也会输出到文件夹中。 它包括所有打包在一起的相关文件,以便共享和发布。
默认情况下,您需要从头开始训练模型,但是您可以在此过程中包括预训练模型。 执行此操作时,您可以通过改进现有模型来生成新模型。 其他训练提供了模型可用来提高其预测点的正确分类的能力的更多示例。
训练工具上每块的最小点数设置用于跳过点数不足的训练块。 通常,工程边缘周围的块具有的点数较少。 此外,在创建训练数据时,可能已有一个或多个块达到块点数限制。 随后的块将保留溢出点。 在这两种情况下,具有相对较少点的块都不是特别有用,因此最好不要将它们包括在训练过程中。
管理类
训练点云分类模型地理处理工具上的管理类类别包含与类重新映射、感兴趣的类和类命名关联的参数。
当您需要输出模型使用一组不同的类代码及其相对于输入训练数据的含义时,类重新映射会很方便。 这对于合并类也很有用。 例如,将三个植被类合并为一个。
感兴趣的类代码是训练的重点。 默认情况下,输入训练数据中的所有类均用于创建模型。 如果您只对要素的一个类或类型感兴趣,则多个类可能会使训练不必要地复杂化。 例如,如果您只对创建模型来分类电力线电缆感兴趣,则可以将其设置为感兴趣的代码(例如,LAS 标准的第 14 类)。 执行此操作时,系统将提示您输入背景类代码。 那是其他所有事物的代码。 因此,即使训练数据可能包含更多类,但训练的模型只能够对其中的两个进行分类:感兴趣的类和背景。
训练参数
训练点云分类模型地理处理工具上的“训练参数”类别包含特定于训练过程本身的参数,而不是所涉及的数据和类。
训练是一个迭代过程。 重复进行数据遍历,直到满足条件为止。 一个条件是最大纪元数。 纪元代表训练数据的一次遍历。 在一个纪元内,数据将被批量处理。 批处理是一个或多个块的集合。 每个纪元的迭代次数是一个纪元内批处理的的百分比。 因此,当指定为小于 100% 时,将处理批量的子集。 批量大小是一个批处理中的块数。 批处理中的块将并行处理。 如果您的 GPU 具有足够的专用 RAM,则可以使用更大的批量大小进行训练,这通常会减少总体训练所需的时间。
学习率
学习率是一个调整参数,它控制着每次模型权重的更新,以达到最小损失的目标,从而控制调整模型的程度。 它影响新信息覆盖旧信息的程度,因此代表了模型学习的速度。
学习率的确定涉及到折衷。 值太小会导致训练时间长,甚至可能卡住模型。 值太大可能导致学习次优的权重集和不稳定的学习过程。
很难得出学习率的初始值。 训练点云分类模型工具可以为您估算一个值。 默认情况下,建议您在第一次训练模型时将其保留为空白。 让工具估算学习率。 训练点云分类模型工具在其消息中报告学习率。 它还在一个名为 model_metrics.html 的文件中报告学习率,该文件将在训练过程完成后写入输出模型文件夹。 要了解有关训练点云分类模型生成结果的详细信息,请参阅评估点云训练结果。