在深度学习模型更新换代如此之快的今天,VoxleNet这样“老东西”速度过慢已经导致自动驾驶玩家抛弃了它,而且知乎很多博主都写的很好了,写这篇文章主要是为了后面介绍SECOND,Pointpillar等模型做铺垫(好吧,又挖了一个坑。。。)
论文链接
代码链接
在voxelnet发表之前,pointnet 和 pointnet++ 两篇paper都已经发表了。说到了这种方法对计算要求比较高。
受Faster R-CNN 的启发,VoxelNet 也应用了 RPN(Region Proposal Network),只不过这里是3d的。
网络由三部分组成:
(1)Feature learning network
(2)Convolutional middle layers
(3)Region proposal network
(1)特征学习层
a. Voxel Partition (体素划分)
将点云划分为空间里的小立方体(体素),这里以汽车为例,考虑的范围上下[-3, 1], 左右 [-40, 40], 前后[0, 70.4]这体素在这三个方向的大小分别为 0.4, 0.2, 0.2, 所以体素的“分辨率”为10×400×352。
b. Grouping (分组)
安装上面的每个体素将点云分组,但是上图所示的1号和3号的点云数量差很多。
c. Random Sampling (随机采样)
这里随机采样每个体素中的T个点,多于T的取T,少于T的则都取,这里T=35。
d. Stacked Voxel Feature Encoding (VFE, 体素特征编码)
这是这篇文章的创新的地方(知识点),上图有n个VFE,不过对于Car Detection 则只用了VFE-1和VFE-2两层,下图为VFE-1:
VFE-1对于体素内的第i个点云来说,一般都包含以下信息 (xi, yi, zi, ri) 前三个为空间坐标,第四个为reflectance反射率(有时也用intensity的缩写i表示),通过每个体素内的所有点可以求得质心的坐标为 (vx, vy, vz), 则每个点云的特征长度由四个变为7个[xi, yi, zi, ri, xi-vx, yi-vy, zi-vz], 也就是上图中的Point-wise Input, 接下来的 Fully Connected Neural Net 由一个线性层,一个批处理层(BN)和Relu层组成, 对于 Car Detection, 得到的Piont-wise-Feature 长度为16; 将该特征和在该特征做了最大池化的 Locally Aggregated Feature 组合成为该层VFE的输出特征,长度为32。
对与Car Detection 来说 VFE-1(7, 32), VFE-2(32, 128), 所以输入给卷积中间层的特征长度为128,整张体素空间的大小为 128×10×400×352。
e. Sparse Tensor Representation ()
这种表示体素特征的方法可以在反响传播的过程中减少内存和计算。
(2)Convolutional middle layers (卷积中间层)
表示方法(函数):ConvMD(cin, cout, k, s, p), M代表卷积维度,cin, cout 表示特征长度,k,s,p分别表示卷积核大小,stride步长,padding size。
对于Car Detection,有三层3d卷积:
ConMD(128, 64, 3, (2,1,1), (1,1,1))
ConMD(64, 64, 3, (1,1,1), (0,1,1))
ConMD(64, 64, 3, (2,1,1), (1,1,1))
最后的得到的特征图大小为 64 × 2 × 400 × 352。在送入RPN之前先整合一下,变成:128 × 400 × 352。
(3)Region proposal network (区域提取网络)
Region proposal network architecture如上图所示,RPN由三个Block组成,每个block里有多层二维的fully connected layers,每层全卷积之后也会有BN和RELU。通过将stride 步长设为2 使H'和W' 变为一半。
映射为两个学习的目标:1. probability score map。2.regression map,特征长度分别为2和14。
2.2 损失函数
这里每一个体素就是anchor, 一个假设预测出的anchor在鸟瞰图中具有和gt最大的IOU或则它与gt的IOU值大于0.6就为positive.如果和所有的gt都小于0.45,就是negtative,处于0.45~0.6之间的不做处理, 对于 Car Detection, 这里没一个anchor的大小为 3.9(长)×1.6(宽)×1.56(高), anchor的高度为-1.0。
其中
其中
目前voxelnet的速度还是很难满足自动驾驶的需求,但是类比像素的这种"体素"的想法还是很有开创性的;
对不同的Object 要提前设好anchor的大小具有局限性;