0引言近年来,无人驾驶技术取得了大幅进步,而对前方道路上的物体进行检测识别是无人驾驶车辆的重要任务之一。激光雷达(light detection and ranging, LiDAR)和相机是支撑物体检测任务的两大传感器。LiDAR提供准确的3维距离信息,故得到广泛应用。但LiDAR的成本随着配备的激光线束数量增加而大幅提高,因此车辆上配备的LiDAR的激光线束数量通常较少,一台Velodyne HDL-64E(Velodyne high definition real-time 3D Lidar with 64 channels)价格约为一辆家用普通轿车的4倍,这让自动驾驶汽车在硬件上承受了较大成本。而较少的激光线束使得其扫描到的点云相对稀疏,不利于物体识别。相机作为价格较低的传感器,也广泛用于物体检测,但由于2维图像数据缺失距离信息,相机通常不能良好地完成3维空间中的物体检测任务。目前,在KITTI(Karlsruhe Institute of Technology and Toyota Technological Institute)数据集(Geiger等,2012)的3D目标检测任务排行榜下,仅使用图像的方法在“Car”类别物体检测中AP$_\text{3D}$-Moderate最高为53.58%(Li等,2020),而使用了LiDAR点云数据的方法最高则达到81.43%(Shi等,2020)。由此可见,两者在3D目标检测精度上存在巨大差异。为了更好地利用图像,Chang和Chen(2018)提出了PSMNet(pyramid stereo matching network)网络,利用双目RGB图像估计视差图,从而生成深度图像,这使得2维图像拥有了距离信息,称为RGB-D图像。但因为基于图像的深度估计误差较大,所以基于RGB-D的3D目标检测性能不佳。Wang等人(2019)发现相机和激光雷达在3D目标检测精度上有如此大的差距并不完全是因为两种传感器的深度数据在质量方面有差距,而很大一部分原因是由于数据的表示形式不同。Wang等人(2019)将RGB-D图像生成伪LiDAR点云,并利用现有3D点云目标检测方法进行检测,大幅提升了图像在3D目标检测上的精度。You等人(2020)更是使用稀疏LiDAR点云对伪点云进行修正,进一步提升伪点云的准确性。以上研究表明将图像数据表示在3D空间中进行目标检测是比在2D空间中直接进行目标检测更好的选择。然而,虽然使用伪点云较先前基于图像的3D目标检测精度有所提升,但是伪点云的坐标准确性较低导致其与基于LiDAR点云的3D目标检测精度仍有较大差距。经过上文探讨可知,LiDAR点云的深度信息是稀疏且精确的,双目图像的深度估计是稠密且精度较低的,且在3维空间中将图像深度数据表示为点云形式并进行目标检测是可行的。因此,如何把LiDAR的稀疏深度数据和图像的稠密深度数据相融合,使其优势互补是当下的研究热点。代表性的方法有Uhrig等人(2017)提出的卷积神经网络(convolutional neural network, CNN)深度补全模型、Ma和Karaman(2018)提出的深度回归网络模型和引入连续帧的自我监督学习模型(Ma等,2019)等。以上方法均是将点云投影到图像平面形成稀疏深度图并进行补全,这类方法通常不能很好地利用点云特有的几何信息;而由于点云处理方法不如图像处理方法成熟、图像深度估计的误差导致伪点云数据的不精确等原因,很少有将深度图像投影到3D空间对激光雷达点云进行补全的工作。基于以上几点考虑,应尝试充分利用LiDAR点云特有的几何信息并结合图像在3D空间中对点云进行稠密化处理,用稠密化后的点云进行3D目标检测,以此来进一步提升3D目标检测的精度。为此,本文设计了一种激光雷达数据增强算法,利用LiDAR点云的几何信息实现了伪点云的坐标修正,并生成稠密化LiDAR点云。其不针对特定的3D目标检测网络结构,而是一种通用的点云稠密化方法。实验结果表明,稠密后的点云可以有效提高3D目标检测精度。1本文算法本文算法是为解决车载激光雷达点云稀疏问题所设计的稠密化算法,提升3D目标检测精度。算法以双目RGB图像和LiDAR点云作为输入,利用图像的深度信息生成伪点云并对伪点云进行坐标修正,进而对LiDAR点云进行稠密化处理,生成精度良好且稠密度更高的点云。最后通过3D目标检测的精度提升验证算法的有效性。本文算法流程如图 1所示,主要分为4部分:1)由双目RGB图像生成深度图,根据深度信息估计每个像素点在LiDAR坐标系下的3维坐标,即伪点云;2)使用本文提出的循环RANSAC(ramdom sample consensus)算法进行点云的地面分割,并提取非地面点云;3)将步骤2)中提取的非地面点云插入KDTree(k-dimensional tree),以伪点云中的每个点为中心在KDTree中搜索若干近邻点,利用这些近邻点进行曲面重建;4)根据曲面重建结果和LiDAR与相机的标定参数,设计一种计算几何方法导出伪点云修正后的精确坐标,并将修正后的伪点云与原始LiDAR点云进行融合,得到稠密化点云。 图1 点云稠密化算法流程 Flow chart of point cloud densification algorithmFig 11.1深度图生成和坐标估计任何一种深度图像估计方法都可以应用于此步骤中,例如单目视觉深度估计的DORN(deep ordinal regression network)算法(Fu等,2018)和双目视觉深度估计的PSMNet算法(Chang和Chen,2018)。为了提高最终稠密化点云的精度,实验中采用了精度相对较高的双目视觉RGB深度估计方法DeepPruner(Duggal等,2019)。首先由一对基线距离为$b$的相机(KITTI数据集中2号、3号相机)所拍摄到的左右两幅图${\boldsymbol{I}}_\text{l}$和${\boldsymbol{I}}_\text{r}$作为输入,应用DeepPruner生成视差图${\boldsymbol{Y}}$。对应的深度图可计算为 1 $D(u, v)=\frac{f_{\mathrm{U}} \cdot b}{Y(u, v)}$ 式中,$D(u, v)$和$Y(u, v)$分别代表${\boldsymbol{I}}_\text{l}$图像坐标系下像素$(u, v)$的深度和视差,$f_\text{U}$为相机在水平方向上的像素焦距。${\boldsymbol{I}}_\text{l}$和${\boldsymbol{I}}_\text{r}$如图 2(a)(b)所示,深度图${\boldsymbol{D}}$如图 2(c)所示。 图2 深度图像生成示例 Example of depth image generationFig 2 ((a) left image; (b) right image; (c) depth image) 基于深度信息,由式(3)—(5)计算出${\boldsymbol{I}}_\text{l}$中每个像素$(u, v)$在参考相机(KITTI数据集中的0号相机)畸变矫正后的世界坐标系下的3维坐标$(x_{ (u, v) }, y_{ (u, v) }, z_{ (u, v) })$,记作${\boldsymbol{g}}(u, v)$。由于深度估计是不精确的,因此计算出的坐标是粗略坐标。 2 $\boldsymbol{g}(u, v)=\left(x_{(u, v)}, y_{(u, v)}, z_{(u, v)}\right)$ 3 $x_{(u, v)}=\frac{\left(u-c_{\mathrm{U}}\right) \cdot D(u, v)}{f_{\mathrm{U}}}+b_{\mathrm{x}}$ 4 $y_{(u, v)}=\frac{\left(v-c_{\mathrm{V}}\right) \cdot D(u, v)}{f_{\mathrm{V}}}+b_{\mathrm{y}}$ 5 $z_{(u, v)}=D(u, v)$ 式中,$(c_\text{U}, c_\text{V})$代表光心在图像上投影的像素坐标,$f_\text{U}$和$f_\text{V}$分别为水平像素焦距和竖直像素焦距,$b_\text{x}$和$b_\text{y}$分别为左侧相机(2号相机)相对于参考相机(0号相机)的水平基线距离和竖直基线距离。根据LiDAR和相机的标定参数,利用式(7)将每个像素在畸变矫正后参考相机坐标系下的粗略坐标${\boldsymbol{g}}(u, v)$转化为LiDAR坐标系下的坐标$(X_{ (u, v) }, Y_{ (u, v) }, Z_{ (u, v) })$,记为${\boldsymbol{G}}(u, v)$。 6 $\boldsymbol{G}(u, v)=\left(X_{(u, v)}, Y_{(u, v)}, Z_{(u, v)}\right)$ 7 $\left[\begin{array}{l}\boldsymbol{G}(u, v)^{\mathrm{T}} \\1\end{array}\right]=\boldsymbol{T}_{\mathrm{v} 2 \mathrm{c}}^{\ \ \ \ -1} \cdot \boldsymbol{R}_{\mathrm{rect}}^{0 \ \ \ \ -1} \cdot\left[\begin{array}{l}\boldsymbol{g}(u, v)^{\mathrm{T}} \\1\end{array}\right]$ 式中,${\boldsymbol{R}}^{0}_\text{rect}$是0号相机的纠正旋转矩阵,${\boldsymbol{T}}_\text{v2c}$是激光雷达(velodyne)坐标系到畸变矫正前参考相机(camera)坐标系的投影矩阵。至此,图像${\boldsymbol{I}}_\text{l}$中每个像素$(u, v)$对应的激光雷达坐标系下的粗略坐标${\boldsymbol{G}}(u, v)$已经确定。$\{ {\boldsymbol{G}}(u, v) \}$通常称为伪点云。如图 3所示,伪点云密度较高但精度较低,出现了物体轮廓的扭曲现象。 图3 伪点云 Pseudo-LiDAR point cloud((a) long-range pseudo-LiDAR; (b) short-range pseudo-LiDAR)Fig 31.2循环RANSAC地面分割地面点云的存在会影响后续对物体的曲面重建,因此需要对地面点云进行分割和去除。目前较为常用的是基于RANSAC(Fischler和Bolles,1981)的地面检测算法、基于角度的广度优先搜索地面检测算法(Bogoslavskyi和Stachniss,2017)和基于CNN的地面分割算法(Velas等,2018)。后两种算法要求对无序点云进行较为准确的有序化处理,即计算得到无序点云中各点分别来自哪根激光线束。但是由于一台激光雷达中激光线束的垂直角分辨率不完全相等、需要对点云做运动补偿(Himmelsbach等,2010)等原因,使得点云有序化较为困难。而普通的RANSAC检测算法适用于较为平整的路面,在以下两种情况下会失效:1)点云中墙壁点数较多、距离LiDAR较近的货车侧面点数较多时,由于这些平面上的点数大于地面点数,RANSAC算法会将墙壁或货车侧面误检测为地面;2)地面有坡度变化或道路两旁有大面积人行道时,由于多段地面的存在,RANSAC算法不能完美检测出所有地面。因此,本文设计了循环RANSAC算法,使以上两种复杂情况下的地面点云也能够被完美分割,并返回非地面点云。算法流程图如图 4所示。 图4 循环RANSAC算法流程 Flow chart of iterative RANSAC algorithmFig 4首先,输入要进行地面分割的点云$p_\text{input}$,并设置参考法向量${\boldsymbol{n}}_{0}=(0, 0, 1)$。将$p_\text{input}$复制到$p_\text{object}$中,然后清空$p^\text{planar}_\text{object}$点云,$p^\text{planar}_\text{object}$中记录的是在循环过程中被RANSAC提取的非地面的平面形物体点云。之后,循环运行RANSAC算法。$p_\text{ground}$是单次循环过程中从$p_\text{object}$中提取出的平面点云,${\boldsymbol{n}}$是平面的单位法向量。$t_\text{point number}$是点数阈值,表示一个平面若为地面则最少应包含的点数,若$p_\text{ground}$的点数小于此值,则认为$p_\text{object}$中已不存在地面,退出循环并将$p_\text{object}$和$p^\text{planar}_\text{object}$相加作为非地面点云返回值;否则将$p_\text{ground}$从$p_\text{object}$中剔除。$e$是角度阈值,条件$||{\boldsymbol{n}}$·${\boldsymbol{n}}_{0}|-1| e$表明${\boldsymbol{n}}$与${\boldsymbol{n}}_{0}$所在两直线的夹角在某一较小范围内,若满足则认为此平面可能是地面,否则以此平面与水平面的倾角过大作为理由认为其不是地面。$t_\text{ground height}$是地面高度阈值,若所提取平面的高度高于此值,则认为此平面是非地面物体。根据上一步的判断结果,若$p_\text{ground}$不是地面,则将$p_\text{ground}$加入到平面物体点云$p^\text{planar}_\text{object}$中。然后进入下一次循环,直至某次循环中提取的$p_\text{ground}$点数小于$t_\text{point number}$后退出循环。在KITTI数据集中的地面分割效果示例如图 5所示,其中绿色点云为非地面点云,红色点云为地面点云。更多实验结果见2.1节,由图 5和2.1节的实验结果可见,在复杂环境下本文算法仍能良好分割地面。 图5 地面分割效果示例 Example of ground segmentation resultFig 51.3近邻点搜索和曲面重建KDTree是一种用于组织和检索$k$维空间数据点的基于空间划分的数据结构(Ramasubramanian和Paliwal,1992)。点云曲面重建是指将由3维物体表面${\boldsymbol{U}}$采集的散乱点集用三角形网格进行表示,使得所获得的曲面${\boldsymbol{S}}$能够较好地逼近原曲面${\boldsymbol{U}}$(Gopi等,2000)。本文使用KDTree进行快速近邻点搜索,从而得到以点${\boldsymbol{G}}(u, v)$为中心的若干近邻点。然后使用被公认为可以形成最优三角网的Delaunay三角剖分曲面重建方法(殷志峰,2018),使用搜索到的近邻点进行局部曲面重建。在此过程中,使用OpenMP(Chandra等,2001)并行编程加快计算速度。设$\{ {\boldsymbol{O}}_{i} \}^{n_\text{O}}_{i=1}$和$\{ {\boldsymbol{P}}_{i} \}^{n_\text{P} }_{i=1}$分别是原始点云和去除地面后的点云,$n_\text{O}$和$n_\text{P}$分别为两幅点云中的点数。将$\{ {\boldsymbol{P}}_{i} \}^{n_\text{P} }_{i=1}$插入3维KDTree,对于${\boldsymbol{I}}_\text{l}$中像素$(u, v)$对应的激光雷达坐标系下的粗略坐标${\boldsymbol{G}}(u, v)$,在KDTree中搜索$\{ {\boldsymbol{P}}_{i} \}^{n_\text{P} }_{i=1}$点云中距离${\boldsymbol{G}}(u, v)$半径为$r$范围内至多$n_\text{max}$个近邻点,设搜索结果为$\{ {\boldsymbol{Q}}_{j} \}^{n_\text{Q} }_{j=1}$点云,其中$n_\text{Q}$ 是搜索到的近邻点的个数。在点集$\{ {\boldsymbol{Q}}_{j} \}^{n_\text{Q} }_{j=1}$上进行Delaunay三角剖分曲面重建,重建结果为空间中的三角形集合$\{ {\boldsymbol{T}}_{k} \}^{n_\text{T} }_{k=1}$,其中$n_\text{T}$为三角形个数。在此过程中,KDTree搜索和Delaunay三角曲面重建为主要计算步骤,为了加快运算速度,采用如下方案:1)启用OpenMP并行计算,将${\boldsymbol{I}}_\text{l}$中像素$(u, v)$按行坐标分配给多线程执行近邻点搜索和曲面重建步骤;2)在每一线程中,若点${\boldsymbol{G}}(u, v)$与本线程上次曲面重建的中心点${\boldsymbol{G}}'(u', v')$的距离小于KDTree搜索半径$r$,则不需再次进行近邻点搜索和曲面重建,可直接将上次曲面重建所得三角形集$\{ {\boldsymbol{T}}'_{k} \}^{n'_{T} }_{k=1}$作为点${\boldsymbol{G}}(u, v)$附近曲面重建的计算结果。伪代码如下: KDTree.setInputCloud$(\{ {\boldsymbol{P}}_{i} \}^{n_\text{P} }_{i=1})$OpenMP Parallel For $(v)$ For $(u)$ If Distance$({\boldsymbol{G}}(u, v), {\boldsymbol{G}}'(u', v'))$ $r$ $\{ {\boldsymbol{Q}}_{j} \}^{n_\text{Q} }_{j=1}$ = KDTree.search$({\boldsymbol{G}}(u, v))$ //以粗略坐标${\boldsymbol{G}}(u, v)$为中心在$\{ {\boldsymbol{P}}_{i} \}^{n_\text{P} }_{i=1}$点云中搜索近邻点 $\{ {\boldsymbol{T}}_{k} \}^{n_\text{T} }_{k=1}$ = Surface_build$(\{ {\boldsymbol{Q}}_{j} \}^{n_\text{Q} }_{j=1})$ //使用近邻点$\{ {\boldsymbol{Q}}_{j} \}^{n_\text{Q} }_{j=1}$进行曲面重建 $\left(u^{\prime}, v^{\prime}\right)=(u, v)$ $\left\{\boldsymbol{T}_{k}^{\prime}\right\}_{k=1}^{n_{\mathrm{T}}^{\prime}}=\left\{\boldsymbol{T}_{k}\right\}_{k=1}^{n_{\mathrm{T}}}$ Else $\left\{\boldsymbol{T}_{k}\right\}_{k=1}^{n_{\mathrm{T}}}=\left\{\boldsymbol{T}_{k}^{\prime}\right\}_{k=1}^{n_{\mathrm{T}}^{\prime}}$ 1.4计算几何方法导出精确坐标本文设计了一种计算几何方法,对于${\boldsymbol{I}}_\text{l}$中的像素点$(u, v)$,根据上文得到的${\boldsymbol{G}}(u, v)$附近曲面重建的结果$\{ {\boldsymbol{T}}_{k} \}^{n_{T} }_{k=1}$和雷达相机的联合标定参数,导出${\boldsymbol{G}}(u, v)$对应的精确坐标${\boldsymbol{G}}_\text{exact}(u, v)$,即实现伪点云坐标修正的功能。根据式(2)—(7),分别设定深度值$D(u, v)$为5 m和100 m,计算出雷达坐标系下对应的两个坐标点${\boldsymbol{A}}$和${\boldsymbol{B}}$,则${\boldsymbol{A}}$、${\boldsymbol{B}}$两点所在直线与相平面中像素$(u, v)$和光心的连线重合,如图 6所示。由此可见,直线${\boldsymbol{AB}}$和$\{ {\boldsymbol{T}}_{k} \}^{n_\text{T} }_{k=1}$的交点中距原点距离最近的交点即为${\boldsymbol{G}}_\text{exact}(u, v)$。 图6 几何关系 Geometric relationshipFig 6计算直线${\boldsymbol{AB}}$和三角形${\boldsymbol{T}}_{k}$的交点可分为以下两步:1)计算直线${\boldsymbol{AB}}$和三角形${\boldsymbol{T}}_{k}$所在平面的交点${\boldsymbol{C}}$;2)验证${\boldsymbol{C}}$是否位于三角形${\boldsymbol{T}}_{k}$内部。取三角形${\boldsymbol{T}}_{k}$的一个顶点${\boldsymbol{T}}^{1}_{k}$,三角形${\boldsymbol{T}}_{k}$所在平面法向量为${\boldsymbol{n}}_\text{T}$。若${\boldsymbol{n}}_\text{T}$·$({\boldsymbol{A}}-{\boldsymbol{B}})=0$,则直线${\boldsymbol{AB}}$与三角形平面无交点,否则交点${\boldsymbol{C}}$可计算为 8 $\boldsymbol{C}=\frac{\left[\boldsymbol{n}_{\mathrm{T}} \cdot\left(\boldsymbol{B}-\boldsymbol{T}_{k}^{1}\right)\right] \cdot \boldsymbol{A}-\left[\boldsymbol{n}_{\mathrm{T}} \cdot\left(\boldsymbol{A}-\boldsymbol{T}_{k}^{1}\right)\right] \cdot \boldsymbol{B}}{\boldsymbol{n}_{\mathrm{T}} \cdot(\boldsymbol{B}-\boldsymbol{A})}$ 然后判断点${\boldsymbol{C}}$是否在三角形${\boldsymbol{T}}_{k}$内部。对于三角形平面内任意一点${\boldsymbol{F}}$,都可以表示为 9 $\boldsymbol{F}=\boldsymbol{T}_{k}^{1}+f_{1}\left(\boldsymbol{T}_{k}^{2}-\boldsymbol{T}_{k}^{1}\right)+f_{2}\left(\boldsymbol{T}_{k}^{3}-\boldsymbol{T}_{k}^{1}\right)$ 若点${\boldsymbol{F}}$落于三角形内,则需满足如下3个条件 10 $f_{1} \geqslant 0$ 11 $f_{2} \geqslant 0 $ 12 $f_{1}+f_{2} \leqslant 1$ 取${\boldsymbol{e}}_{1}$=${\boldsymbol{T}}^{2}_{k}-{\boldsymbol{T}}^{1}_{k}$,${\boldsymbol{e}}_{2}$=${\boldsymbol{T}}^{3}_{k}-{\boldsymbol{T}}^{1}_{k}$,${\boldsymbol{e}}_{3}$=${\boldsymbol{F}}-{\boldsymbol{T}}^{1}_{k}$,则式(9)等价于 13 $\boldsymbol{e}_{3}=f_{1} \cdot \boldsymbol{e}_{1}+f_{2} \cdot \boldsymbol{e}_{2}$ 将式(13)左右两边分别点乘${\boldsymbol{e}}_{1}$或点乘${\boldsymbol{e}}_{2}$,得到以下两个等式 14 $\boldsymbol{e}_{3} \cdot \boldsymbol{e}_{1}=\left(f_{1} \cdot \boldsymbol{e}_{1}+f_{2} \cdot \boldsymbol{e}_{2}\right) \cdot \boldsymbol{e}_{1} $ 15 $\boldsymbol{e}_{3} \cdot \boldsymbol{e}_{2}=\left(f_{1} \cdot \boldsymbol{e}_{1}+f_{2} \cdot \boldsymbol{e}_{2}\right) \cdot \boldsymbol{e}_{2}$ 取$E_{ij}$=${\boldsymbol{e}}_{i}$·${\boldsymbol{e}}_{j}$,联立式(14)和式(15),解得 16 $f_{1}=\frac{E_{11} \cdot E_{02}-E_{01} \cdot E_{12}}{E_{00} \cdot E_{11}-E_{01} \cdot E_{01}}$ 17 $f_{2}=\frac{E_{00} \cdot E_{12}-E_{01} \cdot E_{02}}{E_{00} \cdot E_{11}-E_{01} \cdot E_{01}}$ 为了避免因除法而引起精度误差,做如下分析变换。由柯西不等式得 18 $\boldsymbol{e}_{0}{ }^{2} \cdot \boldsymbol{e}_{1}{ }^{2} \geqslant\left(\boldsymbol{e}_{0} \cdot \boldsymbol{e}_{1}\right)^{2}$ 又因${\boldsymbol{e}}_{0}$和${\boldsymbol{e}}_{1}$不共线,所以等号不成立,即 19 $\boldsymbol{e}_{0}{ }^{2} \cdot \boldsymbol{e}_{1}{ }^{2}\left(\boldsymbol{e}_{0} \cdot \boldsymbol{e}_{1}\right)^{2}$ 即$f_{1}$和$f_{2}$的分母均大于零。则式(10)—(12)分别等价于 20 $E_{11} \cdot E_{02}-E_{01} \cdot E_{12} \geqslant 0$ 21 $E_{00} \cdot E_{12}-E_{01} \cdot E_{02} \geqslant 0$ 22 $\begin{array}{c}\left(E_{11} \cdot E_{02}-E_{01} \cdot E_{12}\right)+\left(E_{00} \cdot E_{12}-E_{01} \cdot E_{02}\right) \leqslant \\E_{00} \cdot E_{11}-E_{01} \cdot E_{01}\end{array}$ 对于点${\boldsymbol{C}}$,取${\boldsymbol{e}}_{3}$=${\boldsymbol{C}}-{\boldsymbol{T}}^{1}_{k}$并判断其是否满足式(20)—(22),若满足则表明点${\boldsymbol{C}}$位于三角形${\boldsymbol{T}}_{k}$内部。计算直线${\boldsymbol{AB}}$和所有三角形$\{ {\boldsymbol{T}}_{k} \}^{n_\text{T} }_{k=1}$的交点集$\{ {\boldsymbol{C}} \}$,在$\{ {\boldsymbol{C}} \}$中取距离坐标原点(0, 0, 0)最近的一个,作为${\boldsymbol{G}}_\text{exact}(u, v)$的取值。遍历$(u, v)$,通过以上计算方法导出精确坐标点集$\{ {\boldsymbol{G}}_\text{exact}(u, v) \}$,即坐标修正后的伪点云。最后,将原始点云$\{ {\boldsymbol{O}}_{i} \}^{n_\text{O}}_{i=1}$与精确坐标点集$\{ {\boldsymbol{G}}_\text{exact}(u, v) \}$融合,得到稠密化点云。2实验结果本文使用KITTI 3D Object Detection Evaluation 2017数据集(Geiger等,2012)进行测试。其含有7 481帧数据,包括Velodyne HDL-64E采集的点云、相机采集的双目RGB图像和雷达相机的标定参数等,此外还提供了物体的3D box坐标作为目标检测的标签。2.1地面分割将KITTI数据集的LiDAR点云作为输入,使用1.2节中设计的循环RANSAC算法进行地面分割, 单次RANSAC的最大迭代次数设置为500轮,另外3项参数的设置如表 1所示。 表1 循环RANSAC参数设置 参数 值 $t_\text{point number}$ 1 500 $t_\text{ground height}$ -1.55 $e$ 0.4 Parameters of iterative RANSACTable 1在1.2节中所述情况1)的实验结果如图 7中示例1和示例2所示,情况2)如示例3和示例4所示。图 7(a)示例1中由于墙面点数大于地面点数、图 7(a)示例2中由于距离LiDAR较近的货车侧面点数较多,普通RANSAC算法将它们误检测为地面;图 7(a)示例3中由于右侧路肩即将进入匝道而与左侧路面坡度不一致、图 7(a)示例4中由于道路两旁有大面积人行道,普通RANSAC算法无法检测到多段地面。而上述情况使用循环RANSAC算法则正常检测到地面,如图 7(b)所示。 图7 地面分割效果对比 Comparison of ground segmentation resultsFig 7 ((a) ordinary RANSAC algorithm); (b) iterative RANSAC algorithm) 本文所设计的循环RANSAC算法引入了一个分离非地面平面形物体点云的暂存器$p^\text{planar}_\text{object}$,使得下一轮RANSAC对地面的检测不受其干扰;同时RANSAC的多次循环能够检测到不同倾角的多段地面。实验发现,在KITTI数据集的7 481帧中有230帧为情况1),7 422帧为情况2)(其中227帧同属情况1)和情况2)),由此可见,以上设计改进了平面形物体点数多于地面的情况和多段地面情况的检测准确率,证明了所设计的循环RANSAC算法的有效性。2.2点云稠密化将KITTI数据集的双目RGB图像和LiDAR点云作为输入,使用本文设计的点云稠密化算法,实验结果如图 8所示。图 8(a)为$\{ {\boldsymbol{G}}_\text{exact}(u, v) \}$点云,即修正后的伪点云;图 8(b)为原始点云$\{ {\boldsymbol{O}}_{i} \}^{n_\text{O}}_{i=1}$和修正后的伪点云$\{ {\boldsymbol{G}}_\text{exact}(u, v) \}$融合后的稠密化点云。 图8 点云稠密化效果 Point cloud densification resultsFig 8((a) $\{ {\boldsymbol{G}}_\text{exact}(u, v)\} $ point cloud; (b) $\{{\boldsymbol{O}}_i\}^{n_\text{O}}_{i=1}+\{{\boldsymbol{G}}_\text{exact}(u, v)\}$ point cloud) 可以看到,图 8(a)修正后的伪点云能较为完整地捕获物体轮廓和细小特征,相比图 3(b)所示的未修正的伪点云精度有大幅提升,但散乱点云上曲面重建的不充分性使得修正后的伪点云存在少许空洞;图 8(b)稠密化后的点云相比原始LiDAR点云在点云密度上有大幅提升,点云中地面以上的物体在视觉上具有更加完整的形状和轮廓,物体特征也更加明显,这有利于3D目标检测等对环境的感知任务。2.33D目标检测将KITTI数据集使用本文算法进行数据增强,得到如图 8(b)所示的稠密化点云,然后使用AVOD(aggregate view objent detection)和AVOD-FPN(aggregate view object detection with feature pyramid network)(Ku等,2018)在稠密化点云上进行3D目标检测。由于AVOD和AVOD-FPN的原作者没有提供验证集(validation set)上的AP (average precision),本文首先在与原作者相同的实验环境下进行训练,得到AVOD和AVOD-FPN在验证集(validation set)上且IoU(intersection over union)=0.7时的AP,如表 2所示。在同样的训练集和验证集下,本文方法与原方法的精度对比如表 2所示,其中AP3D(average precision of 3D object detection), APBEV(average precision of bird's eye view)。本文方法在验证集(validation set)上的precision-recall曲线如图 9所示。 表2 验证集上的AP 类别 方法 AP3D APBEV Easy Moderate Hard Easy Moderate Hard Car AVOD 74.4 66.03 65.45 87.41 78.47 78.12 本文(EnhancedLiDAR + AVOD) 82.65 67.45 66.47 88.91 78.97 78.36 AVOD-FPN 84.16 74.42 68.03 89.32 86.27 79.5 本文(EnhancedLiDAR + AVOD-FPN) 83.32 74.53 68.13 89.65 87.07 86.64 AP on validation set /%Table 2 加粗字体表示每列最优结果。 图9 EnhancedLiDAR + AVOD-FPN的PR曲线 PR curves of EnhancedLiDAR + AVOD-FPN((a) 3D detection; (b)BEV detection)Fig 9观察实验结果发现,由于本文数据增强方法增加了点云的密度,完善了点云的形状和轮廓,使物体特征更加明显,因此导致3D目标检测算法AP的显著提升。其中AVOD的AP3D-Easy提升了8.25%,AVOD-FPN的APBEV-Hard提升了7.14%。由于AVOD和AVOD-FPN模型在训练的最后阶段时,AP在一固定值上下存在少量波动,因此AVOD-FPN的AP3D-Easy略低于原方法。3结论为了解决激光雷达点云稀疏的问题,更好地感知周围环境,本文提出了一种激光雷达数据增强算法,实现了点云的稠密化处理。稠密化的点云不仅在视觉上具有较好的质量,并且在KITTI数据集上提升了3D目标检测精度。本文的主要贡献在于:1) 设计了循环RANSAC地面分割算法,改进了普通RANSAC算法在复杂场景下失效的状况。在某些平面上的点数多于地面点数,或存在多段地面的情况下,该算法仍能良好地分割地面。2) 设计了一种计算几何方法,实现了伪点云坐标修正的功能。经过不等式分析,计算过程中可以不使用除法,从而避免精度损失。3) 提出了一种新型基于视觉的激光雷达点云稠密化方法,具有良好的可解释性和进一步优化的可能性。以激光雷达点云和深度图像作为输入,采用曲面重建和本文所设计的计算几何方法对伪点云进行坐标修正,进而实现LiDAR点云的稠密化处理。稠密化过后点云中的物体具有更加完整的形状和轮廓,物体特征也更加明显。4) 此稠密化方法不针对特定的3D目标检测网络,是一种通用的数据增强方法。实验表明,使用此数据增强方法后,在KITTI数据集上提升了3D目标检测效果,其中AVOD的AP3D-Easy提升了8.25%,AVOD-FPN的APBEV-Hard提升了7.14%。但是,稠密化点云的精度较依赖于曲面重建的精度,若要提升曲面重建的精度,则需要加大近邻点搜索范围和三角形网格中三角形的数量,这将导致计算量的增加,降低实时性。因此如何提升计算效率、提高实时处理能力还需要进一步研究。
使用Chrome浏览器效果最佳,继续浏览,你可能不会看到最佳的展示效果,
确定继续浏览么?
复制成功,请在其他浏览器进行阅读