VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection
论文链接: https://arxiv.org/abs/1711.06396
一、 Problem Statement
2017年的论文。目前大部分工作都是对3D点云使用hand-crafted 特征工程,因此效率会比较低。而最近提出来的PointNet又要求高的计算能力和内存。RPN用于目标检测,但是其要求数据是稠密且是tensor结构的。
二、 Direction
提出一个网络voxelnet,包含voxel feature encoding layer(VFE), 3D convolution 和 RPN, 对应解决上述问题。
三、 Method
先来看一下整体的框架:
voxelnet 主要包含三个模块:
- feature learning network
- convolutional middle layers
- region proposal network
1.Feature Learning Network
这个模块分为五个部分:
(1) voxel partition
这个步骤就是把点云的3D空间平均分割成一个个voxel。设置了voxel的大小。
(2) grouping
根据每个点所在的voxel进行group。因为点云的相对位置,距离等因素,每个voxel所包含的点数是不一样的。
(3) random sampling
通常雷达点数都很多,全部用于计算会有很大的开销。因此,对每个voxel里的点进行随机采样T个点,这样做的好处一个是节省计算资源,另一个就是削弱voxel点数量的不平衡。
(4) stacked voxel feature encoding
对于一个点 ( x i , y i , z i , r i ) {(x_i,y_i,z_i,r_i)} (xi,yi,zi,ri),首先进行数据增强。首先 计算一个voxel里面的中心点(local mean), ( v x , v y , v z ) (v_x,v_y,v_z) (vx,vy,vz),然后对每个点进行增强为 ( x i , y i , z i , r i , x i − v x , y i − v y , z i − v z ) (x_i,y_i,z_i,r_i,x_i-v_x,y_i-v_y,z_i-v_z) (xi,yi,zi,ri,xi−vx,yi−vy,zi−vz)。然后把每个点通过FCN转变进入特征空间。FCN包括a linear layer, BN, 和 ReLU。获得point-wise feature representation之后,使用element-wise Maxpooling。
(5) sparse tensor representation
就是把上面的feature 转换维度为 C C C x D ′ D' D′ x H ′ H' H′ x W ′ W' W′的tensor。但是只对非空的voxels进行转换。
2. Convolutional Middle Layers
这个部分就是卷积层,用 ConvMD ( c i n , c o u t , k , s , p ) (c_{in}, c_{out}, k, s, p) (cin,cout,k,s,p) 表示, c i n c_{in} cin表示输入的通道数, c o u t c_{out} cout表示输出的通道数, k k k 是 kernel size, s s s 是 stride, p p p 是 padding。后面跟着BN 和 ReLU。
3. Region Proposal Network
这个网络会把卷积中间层的输出当作输入,然后输出probability score map和regression map。具体结构如上图所示。
4. Loss Function
首先这是一个anchor-based 的检测器,因此有
{
a
i
p
o
s
}
i
=
1...
N
p
o
s
\{a_i^{pos}\}_{i=1...N_{pos}}
{aipos}i=1...Npos 和
{
a
i
n
e
g
}
i
=
1...
N
n
e
g
\{a_i^{neg}\}_{i=1...N_{neg}}
{aineg}i=1...Nneg 两种anchor。
然后把ground truth 变为了
(
x
c
g
,
y
c
g
,
z
c
g
,
l
g
,
w
g
,
h
g
,
θ
g
)
(x_c^g, y_c^g, z_c^g, l^g, w^g, h^g, \theta^g)
(xcg,ycg,zcg,lg,wg,hg,θg),分别代表中心点位置,长宽高和yaw_rotation。
网络回归的结果是7个参数,分别为:
△
x
,
△
y
,
△
z
,
△
l
,
△
w
,
△
h
,
△
θ
\triangle x, \triangle y, \triangle z, \triangle l, \triangle w, \triangle h, \triangle \theta
△x,△y,△z,△l,△w,△h,△θ。
它们的转换关系为:
△
x
=
x
c
g
−
x
c
a
d
a
,
△
y
=
y
c
g
−
y
c
a
d
a
△
z
=
z
c
g
−
z
c
a
d
a
,
△
l
=
l
o
g
(
l
g
l
a
)
△
w
=
l
o
g
(
w
g
w
a
)
,
△
h
=
l
o
g
(
h
g
h
a
)
△
θ
=
θ
g
−
θ
a
\triangle x = \frac{x_c^g - x_c^a}{d^a}, \qquad \triangle y = \frac{y_c^g - y_c^a}{d^a} \\ \triangle z = \frac{z_c^g - z_c^a}{d^a}, \qquad \triangle l = log(\frac{l^g}{l^a}) \\ \triangle w = log(\frac{w^g}{w^a}), \qquad \triangle h = log(\frac{h^g}{h^a}) \\ \triangle \theta = \theta^g - \theta^a
△x=daxcg−xca,△y=daycg−yca△z=dazcg−zca,△l=log(lalg)△w=log(wawg),△h=log(hahg)△θ=θg−θa
其中
d
a
=
(
l
a
)
2
+
(
w
a
)
2
d^a=\sqrt{(l^a)^2 + (w^a)^2}
da=(la)2+(wa)2。
现在来看一下整体的loss:
L = α 1 N p o s ∑ i L c l s ( p i p o s , 1 ) + β 1 N n e g ∑ i L c l s ( p i n e g , 0 ) + 1 N p o s ∑ i L r e g ( u i , u i ∗ ) L = \alpha \frac{1}{N_{pos}}\sum_iL_{cls}(p_i^{pos}, 1) + \beta \frac{1}{N_{neg}} \sum_iL_{cls}(p_i^{neg}, 0) + \frac{1}{N_{pos}}\sum_iL_{reg}(u_i, u_i^*) L=αNpos1i∑Lcls(pipos,1)+βNneg1i∑Lcls(pineg,0)+Npos1i∑Lreg(ui,ui∗)
分为两个部分,一个是分类,一个是回归。分类用的是binary cross entropy, 回归用的是smooth-L1 loss。上式子中 p i p o s , p i n e g p_i^{pos}, p_i^{neg} pipos,pineg分别代表对anchor的softmax output。
5. Data Augmentation
三个数据增强方式:
- 将 3D box 绕 Z 轴旋转一定角度,然后 xyz 施加随机范围内的偏移量。
- 对所有的点云施加全局的缩放效果。
- 对所有点云施加全局的旋转效果。
四、Conclusion
作者提出了一个end-to-end的点云处理网络模型。
Reference
局的缩放效果。
3. 对所有点云施加全局的旋转效果。
四、Conclusion
作者提出了一个end-to-end的点云处理网络模型。
Reference
- https://www.zhihu.com/search?type=content&q=voxelnet