最近KITTI
的3D目标检测榜刷出了一个新的Top One
双阶段算法3D-CVF
。做算法,有时间需要跟紧新的网络架构。所以这篇博客主要分析这篇论文3D-CVF: Generating Joint Camera and LiDAR Features Using Cross-View Spatial Feature Fusion for 3D Object Detection
。作为arxiv
上的预印本,文中有些细节没讲清楚,比如点云体素,RGB
体素尺寸定义,Project
细节,Multi-View
下不同RGB
体素融合,体素特征到BEV
特征的转化,refine network
细节,数据增广的实现等(只能小白我自行脑补了)。因此,这篇博客主要简单地说一说这篇文章的亮点,不去做细致的分析。
首先来看看这篇论文的结构框图,如下所示。有一说一,这个框图画的很细心,也很细致。这篇文章的亮点是Cross-view feature mapping
,这个模块生成了稠密的RGB
体素特征。RGB
体素的生成过程对应上图的Auto-calibration Feature Projection
。随后,点云体素特征和RGB
体素特征会在Adapative Gated Fusion Network
中进行一个特征融合,最后用于目标检测的过程中。
讨论到这里,我要做一个说明。KITTI
数据集只提供了两个相机的数据集。所以3D-CVF
网络用于KITTI
数据集中的时候,相机的个数是两个。不过在KITTI
数据集中,目标检测的真值只规定出现在这两个相机视场之内。而nuScenes
数据集提供了六个相机的数据集,这和图1是对应的。在nuScenes
数据集中,目标检测的真值则在雷达 360 deg 360\deg 360deg视场范围内。
RGB
特征体素获取RGB
特征体素的过程对应图1中的Auto-calibration Feature Projection
。它的示意图如下所示。首先初始化 N N N个空白的尺寸为 [ L , W , H , C ] [L,W, H, C] [L,W,H,C]的体素作为RGB
特征体素( N N N指相机个数,kitti
数据集上可能是两个相机,nuScenes
数据集上可能是六个相机),它的尺寸应该是和点云特征体素尺寸一样的。通道数 C C C等于RGB
特征图的通道数。
对第 i i i个RGB
特征体素体素的任意一个小体素 v v v( i = 1 , . . . , N i = 1,...,N i=1,...,N),根据激光雷达和第 i i i个相机的外参数和内参数,把它投影在第 i i i个相机上,如果投影的像素点 I I I在对应相机的屏幕内,再进行下一步操作,否则直接跳过。在Camera Pipeline
部分,提取了RGB
图像的特征图。特征图的尺寸和原图像的尺寸存在一个比例关系。于是可以把投影的像素点 I I I,经过比例转换,获得投影在特征图上的像素点 I ∗ = ( x ∗ + δ x , y ∗ + δ y ) I^*=(x^*+\delta x, y^*+\delta y) I∗=(x∗+δx,y∗+δy)。 x ∗ , y ∗ x^*,y^* x∗,y∗表示整数部分 δ x , δ y \delta x, \delta y δx,δy表示小数部分。小体素 v v v的特征就是 I ∗ I^* I∗周围四个像素点的插值。它周围四个像素点的坐标是 ( x ∗ , y ∗ ) (x^*, y^*) (x∗,y∗), ( x ∗ , y ∗ + 1 ) (x^*, y^*+1) (x∗,y∗+1), ( x ∗ + 1 , y ∗ ) (x^*+1, y^*) (x∗+1,y∗), ( x ∗ + 1 , y ∗ + 1 ) (x^*+1, y^*+1) (x∗+1,y∗+1)。如此这般,就能得到 N N N个RGB
特征体素。然后对它们做点到点特征之间的Cat
操作,最后得到一个尺寸为 [ L , W , H , N C ] [L,W, H, NC] [L,W,H,NC]的最终RGB
特征体素。
RGB
特征体素和点云特征体素的融合这个融合模块对应图1的Adapative Gated Fusion Network
。它的示意图如下所示。我觉得该模块的输入不是体素特征,而是转化为BEV
图的特征(转换方法就是SA-SSD
中的reshape
,把体素的高度维度合并到特征维度里,这样把四维的体素特征,变成三维的特征图)。
这个图比较直观,类似于一个Attention
模块,就不去细说。输出的Gated
特征在特征维度上Cat
在一起,最后就得到了融合特征,如图1中的Joint LiDAR-Camera Feature
。
RCNN
过程这一个过程是双阶段目标检测必备过程。先通过RPN
网络生成很多候选3D
框,然后利用ROIAlign
技术从Joint LiDAR-Camera Feature
中提取到3D
框对应的特征,做细化处理。于此同时,3D
框还会投影在RGB
图像上,生成 r × r × r r \times r \times r r×r×r的格子点,并获取格子点对应的RGB
特征图上的特征向量。这些格子点特征则喂入PointNet
架构子网络做特征提取。如下图所示。这也是文章的一个创新小点。
这篇文章对RCNN
过程描述的比较模糊。直觉上感觉,它是对PV-RCNN
的一种改进吧。
这篇文章提出了一个雷达点云和RGB
图像的融合方式,比较有看点。但是行文比较简略,很多细节得靠读者去脑补。网络细节的描述不是很透明。没有提供源码。我感觉作者的网络框架很有可能是在PV-RCNN
上的改进(仅个人看法:因为从图1上看,去掉所有RGB
相关的模块,剩下的就跟PV-RCNN
或者PointRCNN
很像)。不管怎么说,这篇文章的主要创新点还是很有启发的,倒没必要揪着别人缺点不放哈,哈哈。