基于投票策略的室内家具检测:VoteNet、BRNet 最全总结

一、基本概述

  最近几年,基于点云的3D目标检测是自动驾驶场景研究的热点。但是,自动驾驶主要聚焦于室外场景。本文,我们主要介绍两篇文章(VoteNet,BRNet),重点解决室内场景下,基于点云的3D家具检测。这两项工作目前均已开源,有兴趣的同学可以研究、学习,

论文链接:
  VoteNet :https://arxiv.org/abs/1904.09664v2
  BRNet :https://arxiv.org/pdf/2104.06114.pdf
开源工程:
  VoteNet:https://github.com/facebookresearch/votenet
  BRNet:https://github.com/cheng052/BRNet

二、VoteNet

  VoteNet 的论文翻译:VoteNet 中英文对照翻译

  1. 提出背景

    目前,基于点云的3D目标检测算法受2D检测类算法影响较大。为了利用2D检测器的网络结构,常把3D点云转化为规律的网格(比如,体素网格,或者鸟瞰图像,或者多视角图像),或者基于2D图像的检测结果来得到3D预测边框。很少有工作直接在点云中检测目标。在本文工作中,我们回归第一性准则,直接建立基于点云的3D目标检测流程,并尽可能通用。

  2. 论文的贡献

    (1)首次将传统霍夫投票算法融入深度神经网络,提出端到端可微的神经网络,构建了一个通用的室内家具3D检测框架。
    (2)本篇论文是室内3D家具检测的开创性论文,开创了一个新的研究思路。
    (3)相较于之前的算法,VoteNet 在精度上提升巨大。
    (4)论文结构清晰,每一个结构细节阐述清晰,易于理解,代码可阅读质量高。

  3. 一些新的名词

    种子点:seed point,可以认为是点云的特征点,位于点云表面,是投票算法的基础特征,类似于图像中主干网络提取的特征。
    投票点:vote point,基于种子点,通过学习生成(是点云的子集),通常位于点云目标的点云中心位置,是虚拟的点。

  4. 传统霍夫投票的流程
    下图借鉴博客的图片:https://blog.csdn.net/weixin_39373480/article/details/103583523,该文章写的很不错,可以参考

    这里是引用
    离线训练:主要是为了建立【Code Book】,记录图像块与目标中心的偏移关系。
    Online的流程如下:
     (1)通过sift,surf等经典的特征提取算子得到一系列特征点。
     (2)在特征点的周围可以生成一系列的图像块。
     (3)借助训练好的【Code Book】,生成图像块相对于目标中心的偏移量(offset)。
     (4)通过聚合算法,就可以得到图像中目标的中心。
     (5)借助分类器或者回归器,得到目标的类别和边框。

  5. 论文是如何将传统的霍夫投票算法融入端到端的深度神经网络?

    Interest point:兴趣点也就是种子点,不是由手工设计的算子提取,而是由神经网络提取。
    vote point :投票点的生成也是由神经网络完成,而不是依赖于提前建立的密码本。借助较大的感受野,降低了投票点生成的随意性,同时更加高效。此外,一个投票点包含一个固定长度的特征向量表达,更加有利于特征的聚合。
    Vote Aggregation:投票点聚合也是由神经网络生成,利用投票点特征聚合,更加便于生成高质量的候选框。
    Object Proposal:根据聚合的投票特征,可以直接生成候选框的位置,维度,方向和语义类别信息,避免了需要回溯投票点的起源。

  6. 算法的整体框架

    在这里插入图片描述
    基本流程如下:
      (1) N × 3 N\times3 N×3:输入点云数量为N,仅仅包含(x,y,z)坐标,维度为3,表示3个通道。
      (2)BackBone:借助【PointNet++】提取点云的特征,得到M个特征点(seed point),以及 C C C维特征向量。
      (3)Voting Module:一系列【MLP】模块,生成投票点以及投票点特征,与种子点数量一致。
      (4)Vote clusters:将投票点进行均匀采样、分组(Sampling、Grouping),得到K个类簇( n 1 , n 2 , . . . , n K n_1,n_2,...,n_K n1,n2,...,nK)。
      (5)Proposal Module:根据重新聚合的特征,预测得到候选框( K × C o u t K\times C_{out} K×Cout)。
      (6)3D NMS:非极大值抑制,得到最终的3D Box( K ′ K' K)。
    BackBone 模块的结构
    在这里插入图片描述
    Voting Module
      共享的多层感知机网络(MLP,包含全连接层,ReLU层,BN层),将每个种子点独立转为投票点。输入的是种子点的特征向量,输出为欧式空间下的偏移量 Δ x i \Delta x_i Δxi Δ f i \Delta f_i Δfi,种子点加上偏移量就得到投票点。3D 偏移量 Δ x i \Delta x_i Δxi使用回归损失监督,具体如下:
    L v o t e − r e g = 1 M p o s ∑ i ∣ ∣ Δ x i − Δ x i ∗ ∣ ∣ i f [ s i ∈ o b j e c t ] (1) L_{vote-reg}=\frac{1}{M_{pos}}\sum_i||\Delta x_i-\Delta x_i^*||if[s_i \in object] \tag {1} Lvotereg=Mpos1i∣∣ΔxiΔxi∣∣if[siobject](1)
    其中, s i s_i si 需在目标的表面, M p o s M_{pos} Mpos是种子点在目标表面的数量, Δ x i ∗ \Delta x_i^* Δxi 是种子点到当前目标中心的距离。所以该模块是根据目标表面的种子点得到靠近目标中心的投票点,用于后续候选框的生成
    Proposal Module
      在执行该模块之前,需要对投票点进行采样(最远点采样的方式)、分组、聚类等操作,将投票点划分为K个点簇。给定一个投票点簇(a vote cluster) C = w i , i = 1 , 2 , 3 , . . . , n C={w_i},i=1,2,3,...,n C=wii=1,2,3,...,n,点簇中心为 w j w_j wj,其中每一个投票点记为 w i = [ z i ; h i ] w_i=[z_i;h_i] wi=[zi;hi] z i , h i z_i,h_i zi,hi分别为投票点的坐标和特征向量。为了提取局部的几何结构,将投票点坐标转换为局部坐标系下的值, z i ′ = ( z i − z j ) / r z_i'=(z_i-z_j)/r zi=(zizj)/r。那么,根据这个点簇预测的候选框表达如下,
    p ( C ) = M L P 2 { max ⁡ i = 1 , . . . , n M L P 1 ( [ z i ′ ; h i ] ) (2) p(C)=MLP_2\lbrace\max\limits_{i=1,...,n}{MLP_1([z_i';h_i])} \tag{2} p(C)=MLP2{ i=1,...,nmaxMLP1([zi;hi])(2)
    其中,每一个投票点独立输入到 M L P 1 MLP_1 MLP1,然后经过 M L P 2 MLP_2 MLP2进行特征融合。特征向量 p p p 包含 objectness score,bounding box parameters(center,heading,size),以及 semantic classification scores.

  7. 网络的输入输出

    输入: N × 3 N\times3 N×3,N表示输入点云的数量,3表示每个点的位置坐标(x,y,z)。
    输出:Proposal Module 的输出为 5+ 2NH + 4NS +NC channels,
      5:前2个为分类个数,剩余3个表示中心的回归(relative to the vote cluster center);
      2NH:NH表示360度的方向被划分的数量,每一个划分(heading bin)预测一个分类分数,回归一个偏移量(relative to bin center)。
      4NS:4表示每一类尺寸预测【1】个分数和【3】个偏移量(scale regression offsets for height, width and length),NS表示 有多少种尺寸(size template),多少种家具也就对应多少种尺寸模板。
      NC:表示数据集分类数量。

  8. 损失函数

    损失函数包括三大部分:objectness loss,bounding box estimation loss,semantic classification losses,也是目标检测中常规的损失设计。objectness scores:以vote点距离真实框中心的距离(d)为标准,由该投票点(d<0.3)生成的 proposals 为正样本,(d>0.6)的投票点生成的proposals 为负样本,(0.3<d<0.6)是忽略样本,不参与惩罚。objectness的损失函数为交叉熵。对于正样本,进一步监督边框和类别的预测,并且将边框损失解耦为:中心回归(center regress),方向估计(heading estimation),尺寸估计(box size estimation),所有的回归损失使用 Huber Loss。
    具体公式表达如下:
    L v o t e N e t = L v o t e − r e g + λ 1 L o b j − c l s + λ 2 L b o x + λ 3 L s e m − c l s (3) L_{voteNet}=L_{vote-reg}+\lambda_1L_{obj-cls}+\lambda_2L_{box}+\lambda_3L_{sem-cls} \tag{3} LvoteNet=Lvotereg+λ1Lobjcls+λ2Lbox+λ3Lsemcls(3)
    其中, λ 1 = 0.5 , λ 2 = 1 , λ 3 = 0.1 \lambda_1=0.5,\lambda_2=1,\lambda_3=0.1 λ1=0.5,λ2=1,λ3=0.1
    objectness loss:交叉熵损失(cross-entropy),2个类别,有目标或者没有目标。
    semantic loss:交叉熵损失(cross-entropy),NC个类别(数据集待分类数量)。
    box loss:解耦为三大部分,公式如下,
    L b o x = L c e n t e r − r e g + 0.1 L a n g l e − c l s + L a n g l e − r e g + 0.1 L s i z e − c l s + L s i z e − r e g (4) L_{box}=L_{center-reg}+0.1L_{angle-cls}+L_{angle-reg}+0.1L_{size-cls}+L_{size-reg}\tag{4} Lbox=Lcenterreg+0.1Langlecls+Langlereg+0.1Lsizecls+Lsizereg(4)

  9. 实验评估

    量化结果如下图所示,
    在这里插入图片描述
    在这里插入图片描述
    运行速度如下图所示,
    在这里插入图片描述
    可视化效果如下图所示,
    在这里插入图片描述

三、BRNet

  该篇论文基于VoteNet的策略进行优化改进,效果更优。

  1. 提出背景?

    (1)作者认为 VoteNet 以及其它的变种论文生成的种子点、投票点包含很多外点(背景上的点,如下图b中标记的点)。这样噪声点没有位于目标的表面,严重偏离目标,进而对 Proposals 的生成影响较大。如下图所示,
    在这里插入图片描述
    (2)传统霍夫投票策略中的回溯策略(back-tracing)仅仅识别目标的边界信息,这对于局部视角的家具是很不可信的。
    (3)基于(1)(2)的问题,作者提出新的回溯策略(为了端到端训练,回溯策略在VoteNet是没有的)。

  2. 作者提出的解决方案是什么?

    (1)改进传统霍夫投票中的回溯策略,使其能够融合入神经网络进行端到端的训练。
    (2)受启发于传统霍夫投票算法中的 back-tracing 策略,本文提出新的网络:Back-tracing Representative Points Network(BRNet)。通过在投票中心(vote centers)周围生成新的表达点(representative point),并在其周围重新审核种子点(seed points)的合理性。更加准确的种子点,使得获取局部目标结构的特征更加可信。这种回溯策略,保证了预测的投票点中心和原始目标点云表面点的相互一致性。在该策略下,也就获得更加可信的预测结果。这个修正过程如下图所示,
    在这里插入图片描述

  3. 新的名词

    representative point:表达点,根据投票点生成的新的虚拟点,位于三维空间的【6】个方向,每个方向【2】个点,总共12个点。
    class-specfic:也称为class-aware,如果输入一张图片,网络会返回一系列 bounding boxes,每一个boxes都有具体的类别信息。简单说,就是当检测器完成时,除了得到bounding box,还可以直接知道是什么类别。
    class-agnostic:只回归2类bounding box,前景和背景,结合每个box在分类网络中的得分,得到最终的分类结果。这种方式会出现同一个前景目标有多个类别的框。检测器通常返回一系列 bounding box,这些box包含了所有类别的目标,但是不知道每个框是什么类别,此时还需要分类器辅助判别。

  4. 整体结构

    在这里插入图片描述
    基本流程如下:
     (1) N × 3 N\times 3 N×3:输入点云。
     (2)按照 VoteNet的方式生成 votes,并将votes分组为M个点簇。
     (3)对于每一个点簇,以学习的方式生成 K 个表达点(表示目标区域)。
     (4)根据K个表达点,修正种子点(seed point),然后将种子点和投票点特征融合。
     (5)基于上述融合特征,得到一系列候选框。
     (6)3D NMS 得到最终的3D Boxes。
    重要的网络模块:
     (1)Vote Generation & Clustering:相当于VoteNet的BackBone模块+Voting Module,生成种子点和投票点,最后对种子点进行分组,形成K个点簇。
     (2) Generating Back-traced Representative Points:基于votes,作者提出 RPG 模块,用于生成虚拟的表达点,它们应该均匀分布于目标区域;那么是如何生成呢?RPG 模块同时预测目标的潜在方向( θ i ∈ [ 0 , 2 π ] \theta_i\in[0,2\pi] θi[0,2π])和回归vote点簇中心到目标【6】个方向(前后,左右,上下)表面的偏移量 x i ∈ R 6 x_i\in R^6 xiR6,然后在每个方向的偏移量范围内均匀采样2个点,总共12个表达点。RPG模块的输入为 投票中心 v i v_i vi及其特征 f i f_i fi,输出为 { x i , θ i } \lbrace x_i,\theta_i \rbrace { xi,θi}。该模块的监督训练如下,
    L r e p − o f f = 1 M p o s ∑ i = 1 M ∣ ∣ x i − x i ∗ ∣ ∣ ρ ⋅ [ v i   i s   p o s i t i v e ] (1) L_{rep-off}=\frac{1}{M_{pos}}\sum_{i=1}^M||x_i-x_i^*||_\rho \cdot[v_i ~is~positive ]\tag{1} Lrepoff=Mpos1i=1M∣∣xixiρ[vi is positive](1)
    其中, v i   i s   p o s i t i v e v_i~is~positive vi is positive 表示投票中心是否在 GT 中心附近(小于0.3m), M o p s M_{ops} Mops 是正的投票中心, x ∗ x^* x 表示GT中心距离3D Box 6个面的距离。目标的方向也需要加入监督训练,方向的监督与VoteNet一致,方向的损失为 L r e p − a n g L_{rep-ang} Lrepang,因此,RPG模块的最终目标函数如下,
    L r e p = λ L r e p − o f f + L r e p − a n g (2) L_{rep}= \lambda L_{rep-off} + L_{rep-ang}\tag{2} Lrep=λLrepoff+Lrepang(2)
    其中, λ = 20 \lambda=20 λ=20.
     (3)Revisiting Seed Points:经过RPG模块的处理,得到了粗略的3D Box的中心以及大小,还需要结合种子点来得到更加可信的Proposals,进而生成更加准确的大小,位置和类别。那么如何修正种子点呢?Representative point 0.2m范围内的点是可信点,其它是外点,并使用PointNet-like的模块重新修正种子点的特征向量,最终将每一个表达点的特征向量进一步连接为128维的特征向量。到这里,就完成了种子点的修正。
     (4)Proposal Refinement and Classification:将修正的种子点特征和投票点中心的特征向量融合,修正proposals,同时进行类别预测。

  5. 损失函数

    整个模型的损失函数,具体公式如下,
    L = L v o t e − r e g + λ o b j − c l s L o b j − c l s + λ s e m − c l s L s e m − c l s + λ r e p L r e p + λ r e f i n e L r e f i n e (3) L=L_{vote-reg}+\lambda_{obj-cls}L_{obj-cls}+\lambda_{sem-cls}L_{sem-cls}+\lambda_{rep}L_{rep}+\lambda_{refine}L_{refine}\tag{3} L=Lvotereg+λobjclsLobjcls+λsemclsLsemcls+λrepLrep+λrefineLrefine(3)
    其中, L v o t e − r e g L_{vote-reg} Lvotereg:每个投票点的损失, L o b j − c l s L_{obj-cls} Lobjcls:objectness loss, L s e m − c l s L_{sem-cls} Lsemcls:语义类别损失, L r e p L_{rep} Lrep:表达点损失,L_{refine}:用于监督初始表达点到修正表达点的过程,公式如下,
    L r e f i n e = 1 M o p s ∑ i = 1 M ( λ ∣ ∣ x i + Δ x i − x i ∗ ∣ ∣ ρ ) + ∣ ∣ ( θ i + Δ θ i − θ i ∗ ) ∣ ∣ ρ ⋅ [ v i   i s   p o s i t i v e ] (4) L_{refine}=\frac{1}{M_{ops}}\sum_{i=1}^M(\lambda||x_i+\Delta x_i-x_i^*||_\rho)+||(\theta_i+\Delta\theta_i-\theta_i^*)||_\rho \cdot[v_i ~is~positive]\tag{4} Lrefine=Mops1i=1M(λ∣∣xi+Δxixiρ)+∣∣(θi+Δθiθi)ρ[vi is positive](4)
    其中, θ ∗ \theta^* θ表示GT Box的方向, L r e f i n e L_{refine} Lrefine仅仅在 positive vote clusters 上计算,权重分别为 λ o b j − c l s = 1 , λ s e m − c l s = 0.1 , λ r e p = 1 , λ r e f i n e = 1 , λ = 20 \lambda_{obj-cls}=1,\lambda_{sem-cls}=0.1,\lambda_{rep}=1,\lambda_{refine}=1,\lambda=20 λobjcls=1,λsemcls=0.1,λrep=1,λrefine=1,λ=20.

  6. 实验评估

    量化结果分析如下,
    在这里插入图片描述
    预测结果如下,
    在这里插入图片描述
    推理时间如下图,
    在这里插入图片描述

四、最新研究成果

  截止到2023.02.14,基于点云的室内3D家具检测的最新研究论文以及开源情况:3D Object Detection on SUN-RGBD val Indoor.

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kxh123456/article/details/128980580