李海枫, 黄于鉴, 鲁红英
(成都理工大学 计算机与网络安全学院,成都 610059)
机载LiDAR技术由载体平台与LiDAR两部分组成,搭载平台可分为地基、天基、空基3种形式,地基平台主要包括车辆、船舶、手持设备等;天基平台主要为人造卫星、太空站;空基平台多为直升机、无人机。LiDAR技术是一种采集数据精度高、人工工作量小、获取数据效率高的主动式探测技术,与传统的航空遥感技术相比,机载LiDAR技术不受光照、雾霾、潮湿等环境因素影响,能够全天候地进行数据采集,为大面积测绘提供了一种快速准确的方案[1-2],广泛用于道路提取[3-4]、森林调查[5]、电力线路调查[6]、水文勘探[7]等多种领域。
在处理机载LiDAR数据过程中,往往需要分离点云数据中地面点与地物点,从而制作高精度数据高程模型,该过程通常称为点云滤波。最初点云滤波方法是从点云数据中人工设计算法提取特征,利用特征内在规则区分点云数据;然而提取特征的优劣对滤波精度影响巨大,人工提取特征往往工作量巨大,算法泛用性差、滤波精度低,随着人工智能技术的快速发展,深度学习方法在目标检测、语义分割等领域取得了令人瞩目的成果。深度学习具有自动提取数据特征的优点,避免了主观因素对数据分类的影响;此外,深度学习方法还具有泛用性强和分类精度高的特点,已成为点云滤波主流研究方法之一。
通过对传统点云滤波算法(布料模拟算法、渐进三角网加密算法)和深度学习方法的研究,发现当前基于深度学习的相关研究取得了丰硕的成果;但如何更好地解决提升滤波精度、减少主观因素影响、提高运行速度等问题仍是未来需要进一步解决的难题。在总结前人的研究基础上,本文提出了一种基于深度学习的机载LiDAR点云滤波方法,下面重点从点云滤波系统整体结构、数据处理、深度学习模型中降采样和损失函数,实验结果对比分析等方面进行阐述。
滤波方法主要分为基于规则的滤波方法和基于学习的滤波方法两类。基于规则的分类方法指研究者依据点的各项属性(空间坐标、反射强度、回波次数等),根据地面点与地物点的区别设计分类规则。基于学习的滤波方法是指实际场景中地理特征存在较大区别,人工难以分类,研究人员使用各种数学模型提取点云数据特征进行的分类。
基于规则的滤波方法根据分类规则不同可分为基于坡度的方法、基于数学形态学的方法和基于模拟曲面的方法。基于坡度的方法主要思路是计算点云数据坡度差值,根据点云坡度差值是否在阈值内进行分类,差值在阈值内则为同类点。算法流程简洁且运算效率高,但受算法阈值单一的影响,对不同地形的效果差距较大[8-9];基于数学形态学的方法主要思路是设置滤波窗口,将窗口内点云数据进行形态学开闭运算,地物点经过形态学开运算后高程变化大,而地面点运算后变化较小。这类算法关键点在于对滤波窗口大小的选择,需要研究者根据算法使用经验以及专业知识进行设定,滤波窗口过小会损失陡峭的地面细节,滤波窗口过大会损失平滑的地面细节[10-11];基于模拟曲面的方法是指,通过构造模拟曲面分离地面点与地物点。常规流程是首先建立简单曲面模型,通过设定的拟合规则不断迭代,使模拟曲面逐步接近原始地面。这类方法的代表有渐进加密三角网滤波算法[12]和布料模拟算法[13],两者使用相对简单且效果优秀,广泛应用于多种点云处理软件。
这些方法均为根据数据规律制定规则,通过设定的规则分离地面点与地物点;但真实地形往往存在地形裂变、地形突起等规则难以覆盖的因素,而且使用算法时需要人为设定滤波参数,参数设定的合适与否往往决定了滤波效果,这导致基于规则的滤波方法对不同场景泛用性较差,滤波精度低。
基于学习的滤波方法将滤波视为对于点云数据的分类问题,主要思路是通过数学模型学习数据特征来对数据分类。将标注数据送入设计好的模型来学习数据的特征,该过程称为训练;模型通过学习到的特征对数据分类,该过程称为预测。根据特征提取的方式可分为人工设计特征的滤波方法和直接使用点云的滤波方法,区别在于对点云数据是否进行特征工程。人工设计特征的滤波方式需要根据目的设计特征提取算法,从点云提取点的特征。优秀的特征能使数据能在模型中得到更好的表现,这项工作往往需要具有相关专业知识背景的人员辅助,最后将提取好的特征通过模型进行训练,此类常用的方法有条件随机场[14]、随机森林[15]、支持向量机[16]等。而基于深度学习的方式无需人工设计特征提取算法,自身具有特征提取的能力,通过对数据学习可以自动、有效地提取点云数据特征。但由于点云数据排列不规则的特点,处理图像的各类深度学习模型难以直接使用在点云数据上,早期点云深度学习的研究方法是将点云转化为各种中间形式进行深度学习,如VoxNet将点云转化为体素后使用3D卷积算子进行深度学习[17],MVCNN通过设置多个视角,从点云中获取2D图像后使用2D卷积算子进行深度学习[18]。由于没有直接使用点云形式的数据,在点云形式转化为中间形态的过程中,往往会丢失点云几何信息。从2017年PointNet被提出[19]开始,直接使用点云数据的深度学习模型开始爆发式出现,有关PointNet的论文中不仅提出了一种可以直接使用点云的深度学习模型,并且提出点云数据的3个特性,即顺序不变性、平移不变性和几何不变性[19]。能解决上述3个特性的深度学习算子便可直接使用点云形式的数据进行深度学习。此后如KPconv[20]、RandlaNet[21]等各类可直接使用点云数据的深度学习模型不断出现。
围绕机载LiDAR点云滤波的准确率与效率,设计了点云滤波深度学习模型。整体结构如图1。系统整体运行流程分为训练与测试两部分,训练过程中,点云数据切片后首先经过数据增强模块,数据增强后送入主干网络进行训练,过程中通过损失函数衡量预测值与真实值的差别,并通过反向传播算法逐步更新模型权重,减少预测值与真实值的不同。测试时首先将点云均等划分,经过冗余切片模块进行分割,同时记录下冗余切片处理前的点云数据位置,送入学习后的模型得到结果,仅保留冗余切片处理前的点云数据分类结果。
该模型的主干网络采用编码器加解码器的U型结构,其中编码器通过点云降采样和特征聚合将特征逐层提取并映射到高维的特征空间,解码器负责将提取到的抽象特征进行逐层传播,使点云内所有点获得对应点等级特征,最后全连接层根据提取的点等级特征将点云数据分为地面点和地物点。机载平台LiDAR点云数据存在数据类别不均衡的特点,模型使用了加权交叉熵函数作为损失函数提高模型对于不均衡数据的分类精度。对于数据类别较为单一且相似度较高的情况,通过在训练时增加了数据增强模块对于数据进行增强,提升模型鲁棒性。对于测试过程中数据切片导致点云损失几何信息的情况,设计了冗余分割模块,通过增加测试数据的边缘部分从而减少数据几何信息损失,同时在测试时设置比例因子控制点云滤波速度与准确性。
深度学习属于“数据饥渴型”的技术,高精度、高性能深度学习模型需要大量标记数据。数据包含场景类型越丰富,数据量越大,模型泛化能力越强,滤波效果越好。除此之外,数据增强还在避免过拟合、提高模型健壮性方面拥有较好效果。
图1 整体结构Fig.1 Diagram demonstrating the integral structure
图像类二维数据主要增强方式有几何变换方法和像素变换方法。常用几何变换方法有翻转、旋转、裁剪、平移、缩放等;常用像素变换方法是给图片像素各通道值加入噪声,如增加高斯噪声、变换亮度和饱和度、调节白平衡等。对于三维的点云数据,由于点云数据特征包含点之间的几何关系,除上述两种变化外,还可以通过对点云坐标附加一个随机偏移量,模拟环境因素对于激光雷达的干扰。
深度学习模型使用数据增强模块有两个原因。第一,由于训练数据的数量和种类相对单一,很难完全覆盖真实场景,使用数据增强可以增加训练数据的数量从而提升模型的效果,并且提高模型对于真实场景的泛用性。第二,由于自然条件等各种因素,LiDAR数据有时会存在遮盖、稀疏、缺失、失真等各种问题,数据增强可以使模型对非纯净数据脱敏,更适应存在干扰的真实场景数据,增加模型鲁棒性。数据增强模块的主要数据增强方法有:随机裁剪、抽稀、加入随机噪声等。随机裁剪指从垂直z轴方向随机生成少量点,将点所形成多边形内覆盖的点云去除,该方法主要目的在于使模型增强对存在覆盖情况的点云数据的准确性(图2-B);抽稀是指在随机采样、体素采样及八叉树采样随机中选择一种采样方法,对点云数据按一定比例进行去除,该方法主要目的在于增强模型对稀疏点云数据的准确性(图2-C);加入随机噪声指选择部分数据,将选中点坐标值加入一个范围为-1至1的随机值,该方法的主要目的在于增强模型对存在自然环境因素干扰的点云数据的准确性(图2-D)。
图2 数据增强Fig.2 Data augment
深度学习模型的主干网络采用了常见的“编码器-解码器”结构。编码器从不定长点云数据提取出定长高维特征,解码器再将获得的定长高维特征映射回不定长点云数据,使点云数据中每个点得到点等级特征。编码器与解码器之间加入了跳连结构以辅助高维特征映射回点云数据,最后通过全连接层根据点等级特征划分数据类别。
编码器采用了多层下采样加特征聚合的方案,其主要任务是获得数据的高维特征。下采样可以减少运算量,同时防止模型过拟合,增加模型对存在细微干扰数据的鲁棒性。特征聚合可以将点领域内的数据特征聚合在一起,减少下采样产生的信息损失。多层结构能够增加感受野,使深度学习模型学习到多层次的特征。编码器共有6层,每层由两个部分组成:点云降采样模块与特征聚合模块。
点云降采样模块主要负责降低点云数据量,降采样减少点数时需要尽可能降低点云几何信息损失。常用点云降采样方法有最远点采样[19]、随机采样等。最远点采样方法需要计算点云中与前一个被选中点距离最大的点,能提取更有代表性的点云子集,但时间、计算资源消耗较大。随机采样的资源消耗较小,但由于随机选取可能导致选取的点云覆盖率较差,难以代表整体数据,基于体素降采样的思想,采用了均匀网格划分后随机采样的方法,将整体点云划分为若干网格,在每个网格内进行随机采样,在保留随机降采样速度优势的同时,尽量维护了点云数据几何完整性,在时间和性能上均有较好的表现。
特征聚合模块采用了KPconv算子[20],该算子采用虚拟卷积核进行卷积的方法,每个卷积核内包含若干核点,每个卷积核通过半径来确定卷积覆盖范围,计算核点与卷积核覆盖范围内的点之间的距离,通过将距离进行卷积提取出输入点特征,该算子与PointNet[19]相比能更好地提取点之间的关系。同时每个核点可以聚合卷积范围内点特征,部分补偿了降采样损失的几何信息。原理如图3所示,点云降采样后进行特征融合,以获取下一层点云的采样后特征。
图3 KPconv原理Fig.3 Diagram showing the principle of KPconv
解码器主要任务是上采样,其目的是将高维特征传播到具体的每一个点,得到点等级数据特征。解码器共有5层,每一层与输入大小对应的编码器层进行跳跃连接。解码层将上层传来的聚合点特征进行线性插值,再与跳跃链接的编码器层特征通过1×1的卷积,每层重复该过程直到将特征扩散至原始点云中每一个点。
交叉熵常常用于衡量两个数据分布之间差异,深度学习模型根据预测结果与真实结果的交叉熵差值,通过反向传播算法调整模型的参数。交叉熵损失函数广泛应用于分类任务之中,对于类别均衡的数据效果较好;但由于激光雷达由空中向地面发射激光的特点导致点云数据中海拔相对高的数据类别点数更多。同时由于场景自身特点导致数据类别存在不均衡的现象,如存在大量密集植被或存在连绵大量建筑的场景往往地物点多余地面点,而对于荒地、高山等存在裸露地面的场景,则地面点会多于地物点。使用常规交叉熵函数对数据量较小的样本会放大误差,深度学习模型采用了对于数据进行加权的交叉熵函数[22],其计算公式为
(1)
式中:Ni是第i类的总点数;M表示总类别数;yc表示第c类的真实标签向量;pc表示第c类的预测标签向量。
使用改进后损失函数衡量误差时,类别占比较小的数据,可以获得相对大的权重,使得模型更“重视”样本量少的数据类别,避免了常规交叉熵损失函数衡量类别不均衡数据误差较大的缺点,增强模型对类别不均衡数据的学习能力。
由于计算机硬件限制,深度学习对大规模数据往往需要进行切片处理,数据切片后通过深度学习模型进行训练和预测,可以避免硬件资源不足的影响。深度学习模型处理图像时主要是对于像素的通道值进行学习,其数据排列整齐的特点使得切片产生的像素排列损失影响很小。与二维的图像数据不同,深度学习模型对排列不整齐的点云数据进行学习还需要点云几何结构。对于切片带来的信息损失,在测试过程设计了冗余切片模块对几何信息缺失进行一定补偿。
冗余切片是指每次选择切片区域后保存所选区域内点云的位置信息,通过设置比例系数对于所选切片的面积进行放大,两者边长之比为所设置的比例系数,放大后切片覆盖的点云数据与放大前切片覆盖的点云数据拥有同一个中心。扩大的部分能尽量保留未扩大部分的完整几何结构,减少切片带来的几何信息损失。每次模型输出时只保留中心未扩大面积内点云的模型输出结果,其余结果不保留,原理如图4所示。该方法可以适应不同的需求,对于要求精度的场合,可以通过增加比例系数获得更精确的效果;若要求速度,则可以通过减少比例系数加速模型运算。
图4 冗余切片原理Fig.4 Principle of redundant slice
实验使用OpenGF数据集[23],其中场景被分为metropolis、smallcity、village和mountain四类,场景特点如表1所示。数据集来自9个不同地区,总点云覆盖面积为47.7 km2,其点数总计542.1×106。
为了验证滤波方法的性能,建立滤波精度交叉表(表2),其中:a表示方法分类正确的地面点个数;b表示将地面点分为地物点的个数;c表示地物点分为地面点的个数;d表示方法分类正确的地面点个数。
模型训练使用衡量标准为全局准确率(overall accuracy, 简称OA)
(2)
表1 OpenGF数据集场景特点Table 1 Characteristics of OpenGF dataset scenarios
表2 交叉表Table 2 Crosstab
与交并比(intersection over union, 简称IoU)
(3)
测试结果时,采用两种指标衡量滤波方法的精度,一方面从定量的角度上,根据国际摄影测量与遥感协会规定的总误差(Et)进行精度判定
(4)
另一方面,因为存在样本不均衡的情况,采用了kappa系数对于结果进行评估。kappa系数是基于混淆矩阵的衡量分类精度的方法,其定义为
(5)
a.数据集。选取OpenGF数据集中的Train作为训练集,Validation中4种地形作为测试集,分别测试布料模拟算法、KPconv方法与深度学习模型对于每种地形的滤波效果。
(5)农业营养和有益元素(指标)N,OrgC在莱芜市土壤中的基准值最高;S,Cl在东营市,Mn,Co,TFe2O3在枣庄市,B,CaO在德州市,P在滨州市土壤中的基准值最高,其余营养元素(指标)Mo,Se,Al2O3,K2O,SiO2在威海市土壤中的基准值最高。农业营养和有益元素(指标)最小值分布在青岛市(P,CaO)、东营市(I,Mn,Al2O3)、潍坊市(Se)、泰安市(N)、临沂市(Cl,S)、菏泽市(OrgC)和威海市(B,MgO,TFe2O3)等7个地市土壤中。
b.参数设置。布料模拟算法:最大迭代次数为2 000,布料单元大小设置0.5,分类阈值设为0.5;KPconv与深度学习模型设定学习率为0.000 1,随机初始化参数进行训练100个迭代,设备为RTX2080Ti,系统为Ubuntu20.04。
c.验证算法有效性。深度学习模型训练结果如图5所示。
图5 训练过程全局准确率与交并比的变化情况Fig.5 Changes of OA and IoU during training
从图5可以看出,模型在80个迭代之后渐渐稳定,在训练集中全局准确率收敛于0.955,交并比收敛于0.917。
总误差反映了滤波方法对于场景的可行性,误差越小滤波效果越好;kappa系数用来衡量分类一致性,反映了分类精度,其值通常处于0~1之间,kappa系数越大一致性越高。对布料模拟算法、KPconv模型与深度学习模型的实验结果计算总误差及kappa系数(图6)。
据图6可以得到:①从平均总误差与平均kappa系数可以看出,深度学习模型的分类精度与分类一致性总体优于布料模拟算法,反映了深度学习方法具有更强的泛用性;②在smallcity、village及mountain场景中,深度学习模型的分类精度与分类一致性优于布料模拟算法,反映深度学习方法在地面更复杂的场景拥有更好的表现,对于地形裂变等因素的识别率更高;③在metropolis场景中,优化前的KPconv模型较布料模拟算法表现较差,主要原因在于数据切片后导致的信息损失(图7),其中红色为地物点,蓝色为地面点。
图7 KPconv部分误差可视化Fig.7 KPconv partial error visualization
可以看到由于建筑物顶部面积过大,切片后模型误认其为地面,导致分类误差。深度学习模型加入数据增强模块与冗余切割模块后,改善了该问题。
综上所述,在较为平坦的地形中,布料模拟算法与深度学习模型均有较为良好的效果。但在实际运用中,布料模拟算法各种参数的设置对滤波效果影响较大,布料单元设置较小时,会将建筑物顶部视为地面;而布料单元设置较大时,对于地形变化识别效果会较差。而在起伏的地形,深度学习模型相较于布料模拟算法效果更好,且在使用中深度学习模型无需设置各种参数,输入数据便可以得到结果。深度学习模型部分结果可视化如图8所示。
图8 部分结果可视化Fig.8 Visualization of partial results
a.具有优秀的泛用性,对于多种场景或场景存在复杂地形的情况有良好的表现。
b.具有更高的精度,对于地形裂变等因素具有更高的滤波精度,且实用中可以通过增加一部分标注的新数据进一步提升效果。
c.无需设置各类参数,对于不同的地形无需专业知识可直接使用。
虽然深度学习方法在多方面优于传统方法,但也存在着诸多不足,还有很多需要改进的问题,如受限于计算机软硬件发展,需要将数据切片导致信息受损,需要人工对数据进行标注等问题,仍需要研究者们继续在该领域不断努力探索。