HTML
-
本实验均基于Pytorch框架搭建的,实验硬件为:CPU为Intel Core i9-10900、Nvidia Geforce RTX3090。训练模型使所用的参数配置如表 1所示。
parameters value batch size 16 learning rate 10-3 iterate 150 input size 2048×3 Table 1. Model parameter settings
目前开源的机载激光扫描(airborne laser scanning, ALS)点云数据集有瓦赫宁恩小镇(Vaihhingen 3D)、都柏林城市(DublinCity)、德国城市黑西格海姆(Hessigheim 3D)和屋顶数据集(RoofN3D)[35]等等。这些数据集来自于不同地区,且屋顶结构类型差异很大。但当前公开的数据集中,只有RoofN3D提供了不同的屋顶类型标注。除此以外,武汉大学发布了一个包含多种建筑物屋顶类型的合成数据集[36]用于深度学习平面提取任务。为此,本文作者在由武汉大学所发布的建筑物屋顶合成数据集和机载点云RoofN3D数据集上进行了训练和测试。
建筑物屋顶合成数据集共包含16种屋顶类型,如图 4所示。每种类型包含1000个训练样本和100个测试样本,共计17600个样本模型。由于棚和平层类型的屋顶仅包含一个平面,剔除了这两种类型的屋顶,对剩余的14种类型的屋顶进行了实验。
RoofN3D是一个用于深度学习技术的建筑物3维重建数据集,该数据集为每个屋顶提供不同建筑类别(金字塔型屋顶、山墙屋顶和山坡型(屋脊形)屋顶),但不包含每种建筑物详细的平面标签。为了获取不同屋顶类型各个平面的标签,对该数据集中的不同屋顶类型按照约为1 ∶1 ∶1的比例,共计1000栋屋顶进行了人工标注用于训练,并采用了100栋屋顶进行测试。
由于建筑物屋顶合成数据集对于每种类型的屋顶数据较为全面,包含每种类型屋顶不同的倾斜度、不同平面大小的数据。因此,使用该数据集进行训练时没有进行额外的数据增强操作。对于每一个屋顶样本,仅需对数据进行归一化操作。RoofN3D数据集的屋顶类型较少,但该数据集包含较多噪声。因此使用该数据集进行训练时未进行额外的添加噪声、抖动等数据增强处理。同时,由于所提出的方法可以有效地区分建筑物屋顶平面内容和非平面内容(噪声点),训练前无需对带噪声数据进行去噪预处理,可以直接用于网络训练及平面提取。
-
为了验证所提出的方法的准确性,对于平面提取任务,本文作者在实例级和点级分别使用了不同的指标进行评价。在每个实例面水平上,本文中采用覆盖率和加权覆盖率[37-39]两个指标进行评价。其中,覆盖率是预测实例面与真实实例面相匹配的平均实例级交并比(intersection over union,IoU)。加权覆盖率则是覆盖率分数进一步根据真实实例面的大小进行加权所得。对于真实平面区域U和预测出来的平面区域V,其覆盖率和加权覆盖率计算方式如下:
式中:|Uo|是真实平面o中点的个数;|Vm|是预测平面m中点的个数;$\max _m I(\cdot) $是真实平面与预测平面相匹配的最大IoU值;g为屋顶样本中的真实平面数;wo计算了每个平面点数占总屋顶点数的比例,反映了每个平面相对于屋顶的区域大小。
在点水平上,本文中采用准确率P′、召回率R和F1分数进行评价,计算公式如下:
式中:T为预测正确的点数;Fp为存在于某个平面中但被预测为其它平面的点数;Fn为预测出来的真实标签不存在的平面点数。
在以上实例级和点级水平的指标中,覆盖率和平均覆盖率采用了点云实例分割中的思想,将每一个平面考虑为单独的实例,从单个实例平面的角度考虑了预测平面与真实实例平面间的覆盖程度(即IoU)。而在点集水平指标中,将每一个屋顶视为一个单独的样本,计算了整个屋顶中的预测正确(true positive,TP)或预测错误(false negative,FN;false positive,FP)的点数量。从单个屋顶数据中衡量了所提出方法平面提取的准确性。
-
为了获取能够区分不同平面的每个点的高维深度特征,借助点云实例分割中的思想,使用歧视性损失[40]ld对主干网络进行训练。ld主要包括lc、la和lr 3个部分,具体计算方式如下:
式中:lc是一种引力损失,旨在使同一实例的特征聚往特征中心,即使得相同实例的特征更加接近;la是一种推力损失,旨在使不同实例的特征中心分离;lr是一个正则项,旨在为所有实例特征值形成一个约束;Κ代表面实例个数;Nκ为第κ个实例面的点的数量;eκ为第κ个面实例的特征中心;ot表示第t个点的特征;σ1和σ2则分别是引力和推力的特征阈值;κA、κB分别表示1~Κ中任意两个不同的面实例;eκA、eκB则分别为这两个面实例的特征中心;[x]+=max(0, x)。根据参考文献[39],通常选取常数ε=δ=1, γ=0.001。
利用该损失函数进行训练,将每个屋顶面视为一个单独的面实例得到点级的深度学习特征,该特征表现为同一屋顶平面上的点在高维特征中非常相近,而不同屋顶平面上的点特征距离较远。除此以外,对于存在噪声或非建筑物平面的屋顶数据,可以加入额外的语义标签(通常设定平面点为1,非平面点或噪声点为0)对网络进行训练,使网络可以在提取高维度深度特征的同时,利用语义分支对非建筑物平面内容进行区分。
在对整个网络进行训练时,仅对主干网络部分进行训练用于获取高维特征。特征聚类及后处理部分仅用于对高维特征进行聚类和分配,不参与网络的训练过程。
-
本文作者在合成数据集上进行了消融研究来验证在聚类部分的参数选择。在聚类算法中使用了不同的聚类半径r值,其性能的变化如表 2所示。当聚类半径较小时,聚类效果对点特征密度较为敏感。当聚类半径较大时容易使不同的实例聚为一个。为此,根据经验将r值设为0.6。
clustering radius r coverage weighted coverage precision recall F1-score 0.4 0.9597 0.9775 0.9897 0.9965 0.9930 0.5 0.9618 0.9786 0.9901 0.9972 0.9836 0.6 0.9626 0.9791 0.9900 0.9982 0.9940 0.7 0.9620 0.9785 0.9895 0.9982 0.9938 Table 2. Effect of different clustering radius on segmentation accuracy
-
图 5显示了本文中提出的方法在合成数据集上的可视化平面提取结果。实验结果表明,对于不同类型的建筑物屋顶,该方法可以有效地提取出各个实例平面,其提取出的平面不受平面本身大小、形状和位置的限制。当某个屋顶平面上存在较小的平面时,所提出的方法仍可以将每个小平面准确地提取出来。在面对较为弯曲、边缘变化不明显的多个平面时,所提出的方法也可以进行准确的分割。除此以外,所提出的方法在平面边缘表现良好,不易存在过分割或欠分割的现象。
表 3为本文中提出的方法在合成数据集上的各指标精度。从表 3可以看出,本文中提出的分割模型在实例水平各指标均高于0.9626,说明所提出的方法对不同类型的屋顶平面均可以进行有效的提取。除此以外,在点水平上,各指标均高于0.9900,证明本方法所提取出的平面精度较高。
Table 3. Segmentation results of different methods on synthetic datasets
除此以外,还实验对比了传统的方法RANSAC[41]、区域增长[42]以及深度学习实例分割方法PointGroup[31]。与这些方法相比,在实例级别上,所提出的方法在覆盖率上分别提高了0.2003、0.1599、0.1412,在加权覆盖率上分别提高了0.1886、0.1496、0.1083。在点水平上,所提出的方法在准确率、召回率和F1分数上分别提高了0.1155、0.0171、0.0627以上。由此可见,本文中的方法不仅可以在不同类型屋顶上提取出各个平面,不易产生伪平面,而且提取出的单个平面非常准确,在平面边缘也表现良好。
图 6分别展示了本文中方法、RANSAC、区域增长和PointGroup在合成数据集上部分类型屋顶上的平面提取效果。从分割结果来看,RANSAC方法提取平面时受法向量的影响,在平面边缘处表现不佳。区域增长方法可以准确提取多个平面,但当两个平面间的连接处较为平滑时,受法向量和曲率的影响,会导致伪平面的产生。同时,区域增长可能会将不平整的单个平面分割为多个小平面。PointGroup可以准确地预测各个平面,但在聚类时主要通过空间中的偏移进行约束,对于边缘处的点无法很好地聚类至单个平面中。相比较上述3种方法,本文中提出的方法在特征空间中进行聚类,在平面曲率变化明显、平面点密度不均匀的情况时也不易产生伪平面的现象。同时,经过后处理步骤,未被聚类的点被逐步分配至最近平面,极大地降低了边缘被错误分割或被单独分割成小平面的概率,使得平面边缘提取较为准确。
-
图 7为本文中提出的平面提取方法在RoofN3D数据集上对3种不同屋顶类型的可视化平面提取结果。其中蓝色点为非平面点(噪声点),其它颜色分别代表不同的平面。由实验结果可见,所提出的方法在该数据集上表现良好,不仅可以有效提取出屋顶平面,还可以准确区分出非建筑物平面内容。因此,使用本文中提出的方法进行建筑物平面提取时,不需要对数据进行额外的预处理步骤就可以准确提取出建筑物屋顶部分和各个平面。
表 4分别展示了本文中方法、RANSAC、区域增长和PointGroup在RoofN3D数据集上的平面提取效果。与另外3种方法性相比,本文中提出的方法在实例级上有明显的提升,说明该方法对平面提取更为准确,不易有伪平面的产生。
methods instance-level point-level coverage weighted coverage precision recall F1-score RANSAC 0.6331 0.7555 0.8230 0.9715 0.8883 region growing 0.6212 0.7345 0.7952 0.9510 0.8633 PointGroup 0.8082 0.8156 0.8486 0.9989 0.9090 our work 0.8757 0.8801 0.9453 0.9708 0.9573 Table 4. Segmentation results of different methods on RoofN3D datasets
图 8分别展示了本文中方法、RANSAC、区域增长和PointGroup在RoofN3D数据集上平面提取效果。从实验结果可以看出,RANSAC方法在面对不平整的平面时,对部分凸出平面的点较为敏感,所提取的平面不够完整,且边缘不够准确。区域增长方法由于边缘点对曲率较为敏感,在平面边缘表现较差,部分点未被分配至任意平面中,导致了不完整的平面提取结果。PointGroup可以准确地提取各个平面,但在平面边缘表现较差,部分边缘点未被聚类至任一平面中。本文中提出的方法在不同屋顶类型上分割效果良好,边缘较为准确,基本无过分割或欠分割的现象。
综上所述,本文中提出的方法无论在合成数据集还是机载点云屋顶数据集RoofN3D上,对各种类型屋顶平面的平面提取效果良好;相比于其它传统的平面提取方法和深度学习实例分割方法,该方法各个指标更高且分割效果更好。由此说明,本文中提出的方法不仅可以自动区分非建筑物平面内容,还可以准确提取建筑物屋顶各个平面,可为建筑物3维重建提供重要帮助。