论文小结:Part A^2 Net

image-20200508113928248.png

论文小结:Part A^2 Net

W.P. Xiao, Vision group, SHUSV
版本更新时间更新内容作者
1V 1.02020.5.8完成小结的框架细节部分W.P. Xiao
2

目录

Part A^2 Net

这里是Paper,这里是Code

1 简介

  这文章标题为《From Points to Parts: 3D Object Detection from Point Cloud with Part-aware and Part-aggregation Network》,简称Part A^2 Net,收录于PAMI 2020。文章一作是来自香港中文大学MMLab实验室的博士Shaoshuai Shi,他比较出名的paper还有PointRCNNPV-RCNN,都是很出色的工作,刚出来都是state-of-the-art。尤其PV-RCNN在KITTI benchmark的Car类别上已经霸榜很久了。根据Github公布的最新数据,Part A^2 Net目前排在11名的位置(2020年5月9日)。这篇文章是针对之前工作PointRCNN的改进版,起初这篇文章挂在axXiv上时(19年7月份)就引起了笔者的关注,目前这篇文章是作者提交的第三版,内容上更加丰富并且容易理解。这篇文章主要强调的是charge-of-free的intra-object part prediction的重要性,它能够帮助网络更好的了解proposal的形状和位置信息。为此作者提出了一系列改进方法,将part-awre的特征进行有效的融合,最终改善预测性能。

2 文章的贡献

  • 提出了Part A^2网络框架用于点云的三维物体检测,该框架利用免费的intra-object part(对象内部零件)信息学习有区别的三维特征,通过RoI-aware pooling和稀疏卷积有效地聚合零part feature,提高了三维物体检测的性能。
  • 提出了两种3D proposal generate策略,一种是anchor-free,具有更高的内存利用效率,一种是anchor-based,具有更高的recall。
  • 为了消除现有点云RoI pooling操作的模糊性,作者提出了一种可微分的roi-aware点云region pooling操作。实验表明,混合特征表示方法显著地改善了box细化阶段。

3 整体框架

  从图3.1可以看出,Part A 2 A^2 A2的整体框架很清晰,分为两个部分。一个是part-aware阶段,这个阶段完成了初步proposal的生成、点云分割、proposal内,点相对位置的预测(后面会解释具体是什么)。另一个是part-aggregation阶段,这个阶段完成了用于refine的特征聚合或者说pooling,以及box refinement,confidence预测。

image-20200508113928248.png

图3.1 整体框架

4 框架细节

4.1 Stage-I: Part-aware 3D proposal generation

  • Point-wise feature learning via sparse convolution

    作者这里将点云体素化后使用了3D稀疏卷积作为backbone,相比于之前的PointNet++的方法更有效也更高效,回归出来的box召回率也更高。作者这里将点云进行了高密度的voxel划分(5cm x 5cm x 10 cm),使其可以近似的代替原始点云

  • Estimation of foreground points and intra-object part locations

    这是文章非常核心的一个部分,作者认为segmentation masks有助于网络区分前景点和背景,而 intra-object part locations为神经网络识别和检测三维对象提供了丰富的信息。

    • Formulation of intra-object part location

      具体公式就不列了(5.1节还有进一步的分析),这里比较好理解。这一步是将proposal内的点转化为intra-object part location,具体呢就是将proposal内的每一个点转化为proposal内的相对坐标。intra-object part location的坐标归一化到0~1区间,表示了点在proposal内的相对位置。

    • Learning foreground segmentation and intra-object part location estimation

      为了学习foreground segmentation和intra-object part location的预测,作者分别设计了loss函数,这部分还比较常规,具体可见4.3节。

  • 3D proposal generation from point cloud

    • Anchor-free 3D proposal generation

      image-20200509001806697
      图4.1 Bin-base损失

      这个部分和作者之前的工作PointRCNN比较相似(PointRCNN使用的backbone是PointNet++,它直接将学习到的每个点的feature用来预测3D proposal),这里是将其替代为稀疏卷积的backbone(encoding和decoding)。当然不管backbone是PointNet++也好sparse convolution也好,直接的来预测3D box的中心点是比较困难的,作者指出是因为X,Y的坐标范围比较大,和距离较proposal中心点较远的点来说会引起误导。为此作者提出bin-based center regression loss,当然这个独特的设计在PointRCNN中就已经提出来了。作者对于回归范围比较大的量(X,Y,θ)使用bin-based loss,一般量(z,h,w,l )使用常规的smooth-L1 loss。要特别注意的是Anchor-free的方法是针对所有前景点进行proposal生成的。

    • Anchor-based 3D proposal generation

      Anchor-based的方法和SECOND类似就不具体展开。

    • Discussion of the two 3D proposal generation strategies

      作者指出,Anchor-free的策略通常是对于轻量级和内存高效利用的网络,因为它不需要评估三维空间中每个空间位置的大量anchor。这对于多类别的对象检测的效率更明显,因为在三维对象检测中,不同的类通常需要不同大小的anchor,而anchor-free方案可以共享点向特征,为多个类生成建议。而Anchor-based的proposal生成策略实现了略高的召回率,它用每个类的预定义暗沉覆盖了整个鸟瞰图,但有更多的参数,需要更多的GPU内存。作者其实更倾向Anchor-free的方法。

  • RoI-aware point cloud feature pooling

    • Canonical transformation

      作者认为如果将box refinement target在正则坐标系中进行归一化,会更加有利于接下来的box refinement阶段(这个观点最开始是在PointRCNN中提出)。具体操作呢,就是先进行坐标转换,将proposal内点的坐标与proposal中心点的坐标相减,得到一个相对坐标值。然后是进行坐标旋转,将proposal内点的坐标旋转使其与proposal的方向一致。其实这两步加起来就是将proposal在点云的全局坐标系下的坐标转化为在以proposal中心点为原点,x轴或y轴与proposal方向一致的局部坐标系中。

    • RoI-aware point cloud feature pooling

      image-20200509105236486
      图4.2 RoI-aware point cloud pooling

      如图4.2所示直接将点云做pooling容易引起模棱两可的情况,而具有part感知的pooling方式能有效消除这种情况。不同于PointRCNN中直接简单的将proposal中所有点的特征进行聚合,作者这里将每个proposal划分为14 x 14 x 14的固定数量的voxel(这里的voxel是对proposal内的空间进行体素化与之前对原始点云进行体素化的voxel是不一样的),作者特别说明这个voxel的划分是独立于proposal大小的,也就是说不管proposal的大小,都是划分为这么多voxels。针对每个voxels作者设计了AvePool和MaxPool分别用来聚集point-wise part locations和semantic feature。

4.2 Stage-II: Part location aggregation for confidence prediction and 3D box refinement

  • Fusion of predicted part locations and semantic part features

    • 使用RoIAwareAvgPool模块对每个voxel中点的point-wise part locations求平均值,然后通过sparse convolution layer将AvgPool后的特征维度提升至于semantic feature维度一致。

    • 使用RoIAwareMaxPool模块对每个voxel中点的semantic feature求feature-wise的max pooling。

    • 将两部分特征concatenate在一起

  • Sparse convolution for part information aggregation

    对于每个3D Proposal,我们需要从该proposal所有内部空间位置聚合上一步获得的fused features ,以实现健壮的3D box评分和refinement。如图3.1右边所示,作者堆叠了几个kernel size为3 x 3 x 3的三维稀疏卷积层,随着感受野的增加,我们可以聚合proposal内的所有part feature。为了节约计算资源和减少参数量,作者在后面还接了一个2 x 2 x 2的max pooling操作,将其降采样至7 x 7 x 7。作者认为,基于稀疏卷积的part-aware aggregate策略,通过从局部到全局的尺度进行特征聚合,可以有效地了解、预测part location的空间分布。

  • 3D IoU guided box scoring

    作者以3D IoU作为引导,定义了新的proposal质量评估指标:
    q ( a ) = { 1  if  I o U > 0.75 0  if  I o U < 0.25 2 I o U − 0.5  otherwise  q^{(a)}=\left\{\begin{array}{ll} 1 & \text { if } \mathrm{IoU}>0.75 \\ 0 & \text { if } \mathrm{IoU}<0.25 \\ 2 \mathrm{IoU}-0.5 & \text { otherwise } \end{array}\right. q(a)=102IoU0.5 if IoU>0.75 if IoU<0.25 otherwise 
    其中 L s c o r e L_{score} Lscore的loss函数使用的是binary cross entropy。实验表明,相对于传统的traditional classification based box scoring,3D IoU guided box scoring有轻微的提升。

4.3 Overall loss

L total  = L aware  + L aggregation  \mathcal{L}_{\text {total }}=\mathcal{L}_{\text {aware }}+\mathcal{L}_{\text {aggregation }} Ltotal =Laware +Laggregation 

  整个网络loss由两部分组成,分别是part-aware loss和part-aggregation los。

  • Losses of part-aware stage-I
    L aware  = L s e g + 1 N p o s L p a r t + λ 1 M p o s L b o x \mathcal{L}_{\text {aware }}=\mathcal{L}_{\mathrm{seg}}+\frac{1}{N_{\mathrm{pos}}} \mathcal{L}_{\mathrm{part}}+\lambda \frac{1}{M_{\mathrm{pos}}} \mathcal{L}_{\mathrm{box}} Laware =Lseg+Npos1Lpart+λMpos1Lbox

    • L seg \mathcal{L}_{\text {seg}} Lseg,点云分割损失,loss函数使用的是focal loss
    • L part \mathcal{L}_{\text {part}} Lpart,part locations回归损失,loss函数使用的是binary cross entropy loss(为什么这里使用的是一个分类损失函数,作者解释是因为part locations的值就在0~1之间)
    • L part \mathcal{L}_{\text {part}} Lpart,3D proposal回归损失,loss函数使用的是smooth-L1
    • 其中 λ = 2 \lambda=2 λ=2;对于anchor-free的方法(PointRCNN里面的做法), N p o s = M p o s = 前 景 点 个 数 {N_{\mathrm{pos}}}={M_{\mathrm{pos}}}=前景点个数 Npos=Mpos=
  • Losses of part-aggregation stage-II

L a g g r e g a t i o n = L s c o r e + 1 T p o s L b o x _ r e f i n e \mathcal{L}_{aggregation}=\mathcal{L}_{score}+\frac{1}{T_{pos}}\mathcal{L}_{box\_refine} Laggregation=Lscore+Tpos1Lbox_refine

L b o x − r e f i n e = ∑ r e s ∈ { x , y , z , l , h , w , θ } L smooth-L1  ( Δ res  ( r ) ^ , Δ res  ( r ) ) + L corner  \mathcal{L}_{\mathrm{box-refine}}=\sum_{\mathrm{res} \in\{x, y, z, l, h, w, \theta\}} \mathcal{L}_{\text {smooth-L1 }}\left(\widehat{\Delta_{\text {res }}(r)}, \Delta_{\text {res }}(r)\right)+\mathcal{L}_{\text {corner }} Lboxrefine=res{x,y,z,l,h,w,θ}Lsmooth-L1 (Δres (r) ,Δres (r))+Lcorner 

  • L score \mathcal{L}_{\text {score}} Lscore,box质量回归损失,loss函数使用的是binary cross entropy loss
  • L b o x _ r e f i n e \mathcal{L}_{box\_refine} Lbox_refine,3D box proposal回归损失
    • L smooth-L1  \mathcal{L}_{\text {smooth-L1 }} Lsmooth-L1 ,中心点、size、角度回归损失(具体参见PointRCNN里面的做法),loss函数使用的是smooth-L1
    • L corner \mathcal{L}_{\text {corner}} Lcorner,是预测的proposal的8个弯角点与指定的ground-truth的8个弯角点之间的距离,loss函数使用的是smooth-L1
  • 其中 T pos  {T_{\text {pos }}} Tpos 是正样本的proposal

5 讨论 & 思考

5.1 什么是intra-object part?

image-20200508233729050
图5.1 前景点的对象内部部分位置的说明

  作者通篇都在讲free-of-chargeintra-object part predicted的重要性,并且作者提到目前还没有人在这方面进行讨论研究,这也是作为改进版的Part A 2 A^2 A2相比于PointRCNN好的一个主要原因,它更充分的利用了3D proposal 所提供的自然的几何信息。那么intra-object part到底是什么,其实一开始我看挂在arXiv上的第一版(Part-A^2 Net: 3D Part-Aware and Aggregation Neural Network for Object Detection from Point Cloud)时还是有点懵,这个part到底指什么,图上故意吧8个corner标成五颜六色也不知道是想干嘛,感觉有点误导。现在Part-A2 Net被PAMI收录,相比于第一版丰富了很多内容,也更容易理解。如图5.1(现在这个版本加上了坐标轴和标注,这个图一看就很清晰,即使没有颜色标注也知道是啥意思),intra-object part其实就是proposal中每一个点相对于坐标原点在各个坐标轴上的相对位置,每个坐标范围归一化为0~1。这样一种表示方式其实就指示了三维物体表面点的相对位置,隐式的编码三维物体的形状,这个能帮助网络更好的理解proposal的内外空间几何信息。

5.2 基于sparse convolution的backbone是怎么实现点级的semantic segmentation的?

  没有看代码这个地方还不太确定,目前猜测可能是用voxelization后的坐标和特征对原点云进行近似,这里前景点可能已经指的是voxel的坐标点了。因为作者这里吧voxelization的size设定的很小(5cm x 5cm x 10 cm),几乎可以与原点云进行近似。

5.3 在proposal中每个part的特征融合阶段,为什么要将预测的part locations和semantic part feature的特征维度进行对齐?

  这个地方笔者不是很理解作者这样的做法,进行AvgPool之后每个part locations的维度是3,进行MaxPool之后的semantic part feature维度是c,个人感觉这其实是不影响两部分特征就行拼接的。作者故意通过3D 稀疏卷积将其升维成和semantic part feature维度一样,不知道是否会破坏原有的每个part locations所代表的几何意义。如果是拼接之后再升维似乎更好理解。


---- end ----
  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值