voxelnet_VoxelNet论文解读

0. 前言

在深度学习模型更新换代如此之快的今天,VoxleNet这样“老东西”速度过慢已经导致自动驾驶玩家抛弃了它,而且知乎很多博主都写的很好了,写这篇文章主要是为了后面介绍SECOND,Pointpillar等模型做铺垫(好吧,又挖了一个坑。。。)

论文链接

代码链接

1. 介绍

在voxelnet发表之前,pointnet 和 pointnet++ 两篇paper都已经发表了。说到了这种方法对计算要求比较高。

受Faster R-CNN 的启发,VoxelNet 也应用了 RPN(Region Proposal Network),只不过这里是3d的。

2. 网络介绍

voxelnet_VoxelNet论文解读_第1张图片
Voxelnet

网络由三部分组成:

(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:

voxelnet_VoxelNet论文解读_第2张图片
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 (区域提取网络)

voxelnet_VoxelNet论文解读_第3张图片
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_VoxelNet论文解读_第4张图片

其中

是BB下底面的对角线长度,所以损失函数如下:

voxelnet_VoxelNet论文解读_第5张图片
Loss Function

其中

​和
​分别表示正样本和负样本的Softmax输出,
​ 分别表示神经网络的正样本输出的标注框和真实标注框。损失函数的前两项表示对于正样本输出和负样本输出的分类损失(已经进行了正规化),其中
表示分类交叉熵,α = 1.5和β= 1是两个常数,它们作为权重来平衡正负样本损失对于最后的损失函数的影响。
表示回归损失,这里采用的是Smooth L1函数。

3. 思考

目前voxelnet的速度还是很难满足自动驾驶的需求,但是类比像素的这种"体素"的想法还是很有开创性的;

对不同的Object 要提前设好anchor的大小具有局限性;

你可能感兴趣的:(voxelnet)