VoxelNet(端到端的点云目标检测网络)阅读笔记

这篇论文是苹果公司发的关于无人驾驶方面的论文。当时发布的时候再KITTI数据集上的测试结果排名第一,虽然现在已经被刷下去了。但是我觉得其中的很多内容还是对现在的研究很有帮助的。算是第一次阅读相关领域的论文,如果有错的地方可以在评论区中指出。

在此前的三维点云目标检测工作中,大多数的方法都依赖于二维目标检测的结果,这样对于三维点云的几何特征利用就损失比较多。为了将高度稀疏的激光雷达点云与区域建议网络(RPN)进行接口,大多数现有的努力都集中在手工制作的特征表示上,例如,鸟瞰投影。本文的方法就是希望通过大量的训练而不是通过手工制作特征表示来得到更好的效果。

VoxelNet(端到端的点云目标检测网络)阅读笔记_第1张图片

整体网络框架

VoxelNet(端到端的点云目标检测网络)阅读笔记_第2张图片
整个网络总共分为三层:

1. 特征提取层
2. 中间卷积层
3. 提案生成层

特征提取层

这一层里用到体素的概念个人认为类似于yolo v1里的划分像素格。首先对于输入的点云区域,通过设定一个固定的体素格大小去划分整块点云区域,将其划分成一个个的体素格。VoxelNet(端到端的点云目标检测网络)阅读笔记_第3张图片 D ′ = D V d , H ′ = H V h , W ′ = W V w D'=\frac{D}{V_d},H'=\frac{H}{V_h},W'=\frac{W}{V_w} D=VdD,H=VhH,W=VwW
VoxelNet(端到端的点云目标检测网络)阅读笔记_第4张图片从这张图中可以了解到,划分后每个体素格内的点云数量是不同的,有的多有的少,像3这个格子干脆就没有点云了。而且输入的点云数量会达到100k个点那么多,这样的点云数量是很大的,如果每个点都计算的话,计算量太大。所以作者这里设定了一个T值,这个T值是每个体素格内随机取的点数。随机取点的目的是使每个点被取到的机会都是相等的。当点数大于或等于T值时,总共随机取T个点。这样处理,能够使得点的数量减少90%,大大减小了计算量。并且使体素格内的点均匀分布。

VFE(多个体素特征编码层)

VoxelNet(端到端的点云目标检测网络)阅读笔记_第5张图片
对体素格内的T个点用每个点的坐标减去体素格内中心点坐标的偏移量(w,r,t)作扩充。
VoxelNet(端到端的点云目标检测网络)阅读笔记_第6张图片
图为一层的VFE层,这里的操作为:对体素内的T个点,逐点经过全连接层,全连接层的包含BN和ReLu,他们的特征都是共享的。这里的操作很像pointnet的mlp。全连接后的特征向量经过maxpool后于原先的特征拼接。这样用maxpooling的操作对局部的特征进行了聚合最后concatenate的特征就是为体素格内点的特征。这样的VFE层有两层,对这些点的特征聚合以后,通过最后的一个maxpooling得到一个体素格的特征聚合信息VoxelNet(端到端的点云目标检测网络)阅读笔记_第7张图片
得到的一个体素格内的特征表示为C。于是最后我们可以将其信息表示为一个四维的张量:
C × D ′ × H ′ × W ′ C \times D' \times H' \times W' C×D×H×W

高效化处理
VoxelNet(端到端的点云目标检测网络)阅读笔记_第8张图片
作者创建了一个K(最大非空体素格的数量)x T x 7的空间来存放在体素格内挑选出来的点云。用点云的坐标作为散列键进行查找,提高点云搜索的效率。

中间卷积层

VoxelNet(端到端的点云目标检测网络)阅读笔记_第9张图片
这里作卷积的目的主要是,将体素格得到的特征再做一次特征的聚合,将得到的特征卷积聚合。这样从局部再到全局的特征
C i n Cin Cin是输入的点数量 C o u t Cout Cout是输出的点数量。k是卷积核的大小,s为步长,p为填充。
作者在文中写出的中间卷积(对车):

Conv3D(128, 64, 3,(2,1,1), (1,1,1))
Conv3D(64, 64, 3, (1,1,1), (0,1,1))
Conv3D(64, 64, 3, (2,1,1), (1,1,1))

中间卷积层到下一层的RPN层之前对当前的4D会做一个reshape的操作,将当前的4D张量转成一个三维的张量。
复现代码如下:

temp_conv = tf.reshape(temp_conv, [-1, cfg.INPUT_HEIGHT, cfg.INPUT_WIDTH, 128])

作者在这里做的reshape操作,作者在论文中的描述为:“the dimensions correspond to channel, height, and width ofthe 3D tensor.”将深度信息和通道数合并。其目的可能是为了扩充深度信息,因为在卷积之后的深度信息太少。

区域提出网络

VoxelNet(端到端的点云目标检测网络)阅读笔记_第10张图片
网络如图,block1-blcok3都是先将特征降采样为一半再对其做一个步长为1的卷积,第一层和后面两层不一样,第一层的s=1的卷积有三个,后面两个是五个。然后每一个经过conv的结果都经过翻卷积上采样成一个256的向量拼接。最终通过两个卷积分别输出的是一个概率评分图和一个坐标图。
这里概率评分图有2的原因可能是因为作者设定了两种角度的anchor,一个是0°的anchor,一个是90°的anchor。因此可推断出后面的14 = 7 (anchor框的七个特征)x 2。

LOSS

VoxelNet(端到端的点云目标检测网络)阅读笔记_第11张图片
VoxelNet(端到端的点云目标检测网络)阅读笔记_第12张图片
正负anchor框中都有七个特征,我们都将他们和GT对比,这里对X,Y除以对角线的目的是使他们的差值得均匀归一化。VoxelNet(端到端的点云目标检测网络)阅读笔记_第13张图片
p i = s o f t m a x ( a i ) p_i=softmax(a_i) pi=softmax(ai)
这个LOSS就类似于Faster rcnn的loss,P用的是二元交叉熵,残差量U用的是smooth L1函数。
VoxelNet(端到端的点云目标检测网络)阅读笔记_第14张图片

总结一下:
论文在kitti验证集上面的行车检测准确度当时非常的高(现在已经被刷下来了)。而且这篇论文是比较早开始直接对点运数据做处理,不依赖于二维检测器的三维目标检测。
通过划分体素格进行随机取点的办法来减少了很大一部分的计算量,但是这样做可能会损失了部分包含待检测物体的信息,(如果点很不凑巧刚好是T-1个不就尴尬了),从kitti测试集的结果来看也是,在行人这种小物体的检测上和在验证集上的检测结果就差别很大。
VoxelNet(端到端的点云目标检测网络)阅读笔记_第15张图片
这篇论文里没有用到RGB信息,不过我认为如果能利用RGB信息的话,应该检测效果会更好(不过目前还是不太能理解要怎么利用RGB信息),作者的观点是,有些东西我们不需要通过颜色,可以直接通过外形来判断出来这是什么东西,对点云直接操作的目的就是为了取得物体的几何信息,通过几何信息判断物体。

你可能感兴趣的:(ai学习)