【阅读记录】3DSSD:Point-based 3D Single Stage Object Detector

前情提要

在目前的三维目标检测任务中,大致分为单阶段和双阶段的网络。双阶段网络可以依靠pointnet++这样的网络得到的语义信息提供更加精确的结果。单阶段网络虽然具备了快速的优点,但是由于在道路环境下点的数量庞大,大部分的方案都是采用了将点云数据转换为其他数据形式的方式进行训练。这样不可避免的会损失部分的特征信息。

简介

文章提出了一中轻量级的基于点的单阶段网络,并且使用了anchor-free的方法产生最终的结果。
总体结构

1.Fusion Sampling

为了对原始点云进行采样处理,文章中采用了Pointnet++中的SA模块对于原始点云做一个下采样的处理,砍掉了Pointnet++中的FP和Refinement Module,原因是作者认为这两个模块限制了单阶段网络中使用原始点云效率。根据下表得知,假如算上另外两个模块,时间将大大增加。
在这里插入图片描述
但是这么做的后果就是,当通过采样后点不断减少,由于背景点相比较于前景点的数量还是偏多的,当经过几次采样之后,前景点的数量将大大减少。

通过图表分析可得知,当经过采样至512个点的时候,前景点的数量只占了百分之五十。因此许多现存方法中为了提高recall还是加入了FP。

1.1 Feature-FPS

于是为了保存我们需要的前景点,同时在采样时去除无用的背景点。作者提出了一种结合语义信息的采样方式F-FPS。使用特征距离而不是空间距离的最远点采样。
但是同样的,假如完全使用特征距离采样的话,会造成一定的冗余。比方说,一辆车的轮子和它的窗户的点,它们的特征不同并且都会被采样。但是他们的点都可以用来做回归。
在这里插入图片描述
因此作者决定使用同时使用欧氏距离和特征距离的方法:
C ( A , B ) = λ L d ( A , B ) + λ L f ( A , B ) C(A,B)=\lambda L_d(A,B)+\lambda L_f(A,B) C(A,B)=λLd(A,B)+λLf(A,B)

λ L d ( A , B ) \lambda L_d(A,B) λLd(A,B)表示的是空间特征的FPS,另外一个是特征距离FPS

#F-FPS代码中的表示
 elif fps_method == 'F-FPS':
                features_for_fps = tf.concat([tmp_xyz, tmp_points], axis=-1)
                features_for_fps_distance = model_util.calc_square_dist(features_for_fps, features_for_fps, norm=False) 
                fps_idx = farthest_point_sample_with_distance(npoint, features_for_fps_distance)
#从对比可以看出,F-FPS中的最远点采样使用的是特征距离
else: # D-FPS
                fps_idx = farthest_point_sample(npoint, tmp_xyz)

1.2 Fusion Sampling

F-FPS有利于回归的进行,但是对于分类任务,由于去掉了大量的背景点,对于分类任务并不友好。文章提到,F-FPS会将背景点当作前景点来处理,因此最后的分类分数会下降。

作者为了解决这个问题,采用融合采样的方法,假如最终采样的点是 N m N_m Nm个的话,就各自使用 N m / 2 N_m/2 Nm/2的点来做D-FPS和F-FPS。

elif fps_method == 'FS':
                features_for_fps = tf.concat([tmp_xyz, tmp_points], axis=-1)
                features_for_fps_distance = model_util.calc_square_dist(features_for_fps, features_for_fps, norm=False) 
                fps_idx_1 = farthest_point_sample_with_distance(npoint, features_for_fps_distance)
                fps_idx_2 = farthest_point_sample(npoint, tmp_xyz)
                fps_idx = tf.concat([fps_idx_1, fps_idx_2], axis=-1) # [bs, npoint * 2]

2.Box Prediction Network

2.1 Candidate Generation

在这里插入图片描述
在进过几个SA模块之后,作者设计了CG层用于生成预测框。
在这里插入图片描述
由于D-FPS采样得到的很多都是背景点,于是作者仅用F-FPS后得出的那一部分点(initial center points)做Candidate Point。这里使用的CG层中心点是由Candidate Point确定的中心位置,而不是物体本身的中心位置。这里用initial center points和对应的实例中心做监督训练,和VoteNet一样,回归得到candidate points。然后从candidate points的周围选取F-FPS和D-FPS的点使用MLP进行局部特征提取。
在这里插入图片描述

#backbone的结构(配置文件)
 ARCHITECTURE: [
        [[0], [0], [0.2,0.4,0.8], [32,32,64], [[16,16,32], [16,16,32], [32,32,64]], True,
         [-1], ['D-FPS'], [4096],
         -1, False, 'SA_Layer', 'layer1', True, -1, 64], # layer1
        [[1], [1], [0.4,0.8,1.6], [32,32,64], [[64,64,128], [64,64,128], [64,96,128]], True,
         [-1], ['FS'], [512],
         -1, False, 'SA_Layer', 'layer2', True, -1, 128], # layer2
        [[2], [2], [1.6,3.2,4.8], [32,32,32], [[128,128,256], [128,192,256], [128,256,256]], True,
         [512, -1], ['F-FPS', 'D-FPS'], [256, 256],
         -1, False, 'SA_Layer', 'layer3', True, -1, 256], # layer3 
        # vote
        [[3], [3], [], [], [], True,
         [256, -1], ['F-FPS', 'D-FPS'], [256, 0],
         -1, False, 'SA_Layer', 'vote', False, -1, 256],
        [[4], [4], -1, -1, [128,], True,
         [-1], [-1], [-1],
         -1, -1, 'Vote_Layer', 'vote', False, -1, -1], # layer3-vote
        # CG layer
        [[3], [3], [4.8, 6.4], [16, 32], [[256,256,512], [256,512,1024]], True,
         [-1], ['D-FPS'], [256],
         -1, False, 'SA_Layer', 'layer4', False, 5, 512], # layer4
      ]

2.2 Anchor-free Regression Head

原先使用anchor的方法,除了要设定anchor的大小之外,还需要设定不同角度的anchor,这样的话,每增加一个检测的类别,anchor需要增加的数量就是线性的。所以如果是使用在nuScenes数据及上的时候,使用anchor-base的方法就需要增大许多的计算量。考虑到上面的计算量,作者采用的是anchor free的head,回归的也是一样的七个量(中心点坐标x,y,z;回归框大小w,h,l;旋转角度),这里需要指出的是通过点预测是没有预先设置朝向的,因此作者采用分类和回归的混合表达式。

2.3 3D Center-ness Assignment Strategy

在2d目标检测中,通常使用iou阈值或者mask去给每个像素分配label。同时在FCOS中,提出了一个连续的 center-ness label :
 centerness  ∗ = min ⁡ ( l ∗ , r ∗ ) max ⁡ ( l ∗ , r ∗ ) × min ⁡ ( t ∗ , b ∗ ) max ⁡ ( t ∗ , b ∗ ) \text { centerness }^{*}=\sqrt{\frac{\min \left(l^{*}, r^{*}\right)}{\max \left(l^{*}, r^{*}\right)} \times \frac{\min \left(t^{*}, b^{*}\right)}{\max \left(t^{*}, b^{*}\right)}}  centerness =max(l,r)min(l,r)×max(t,b)min(t,b)

越是靠近object中心的pixel,center-ness越接近于1,所得到的分数也就设置越大

在这里插入图片描述
但是三维点云的目标,点都大部分在物体的表面,因此他们的center-ness都比较接近,因此我们前面将F-FPS得出的点进行有监督的训练,目的就是使得进过旋转后的点能够更加接近物体的中心,这样也更好地得出更为准确的label。同时可以让center-ness与表面的点更好地分开。

通过画出物体的六面体,计算上下前后左右表面的距离
l c t r n e s s = min ⁡ ( f , b ) max ⁡ ( f , b ) × min ⁡ ( l , r ) max ⁡ ( l , r ) × min ⁡ ( t , d ) max ⁡ ( t , d ) ) 3 l_{\mathrm{ctrness}}=\sqrt[3]{\left.\frac{\min (f, b)}{\max (f, b)} \times \frac{\min (l, r)}{\max (l, r)} \times \frac{\min (t, d)}{\max (t, d)}\right)} lctrness=3max(f,b)min(f,b)×max(l,r)min(l,r)×max(t,d)min(t,d))

最终的分类标签为 l c t r n e s s ∗ l m a s k l_{\mathrm{ctrness}}*l_{\mathrm{mask}} lctrnesslmask
l m a s k l_{\mathrm{mask}} lmask是判断candidate point是否在物体内。

3.Loss

全部的损失分为三类,一类是分类损失,一类是回归损失,一类是偏移损失(shifting loss),偏移损失就是将点转换为candidate point的损失。

L = 1 N c ∑ i L c ( s i , u i ) + λ 1 1 N p ∑ i [ u i > 0 ] L r + λ 2 1 N p ∗ L s \begin{aligned} L=& \frac{1}{N_{c}} \sum_{i} L_{c}\left(s_{i}, u_{i}\right)+\lambda_{1} \frac{1}{N_{p}} \sum_{i}\left[u_{i}>0\right] L_{r} \\ &+\lambda_{2} \frac{1}{N_{p}^{*}} L_{s} \end{aligned} L=Nc1iLc(si,ui)+λ1Np1i[ui>0]Lr+λ2Np1Ls

N C N_C NC N p N_p Np都表示的是candidate point。 N c N_c Nc表示的是全部的candidate point, N p N_p Np指的是前景点的candidate point。
分类loss是用交叉熵计算预测得分( s i s_i si)和Center-ness label( u i u_i ui)累加除以总点数得到的
回归loss总共包括距离loss( L d i s t L_{\mathrm{dist}} Ldist)包括xyz,大小loss( L s i z e L_{\mathrm{size}} Lsize)包括whl,距离loss和大小loss使用的smooth-l1计算。
角度loss( L a n g l e L_{\mathrm{angle}} Langle):
L a n g l e = L c ( d c a , t c a ) + D ( d c a , t c a ) L_{\mathrm{angle}}=L_c(d_c^a,t^a_c)+D(d_c^a,t^a_c) Langle=Lc(dca,tca)+D(dca,tca)
d为预测的值,t为对应的目标的值。

角点损失,corner loss,是预测框八个角点的损失函数:
L corner = ∑ m = 1 8 ∥ P m − G m ∥ L_{\text {corner}}=\sum_{m=1}^{8}\left\|P_{m}-G_{m}\right\| Lcorner=m=18PmGm
其中 P m P_m Pm G m G_m Gm为预测和ground-truth中m点的坐标。

4.总结

在这里插入图片描述
在这里插入图片描述
根据最终的实验结果可以看出,该网络在单阶段网络中是精度最高的,和二阶段网络比,速度是最快的。该方法的创新点也在于,提出了Point-base的单阶段三维目标检测网络。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值