《论文阅读》ImVoteNet: Boosting 3D Object Detection in Point Clouds with Image Votes
留个笔记自用
ImVoteNet: Boosting 3D Object Detection in Point Clouds with Image Votes
做什么
3D object detection。3维目标检测
对于输入的3D点云,像2D一样使用一个bounding box去将相应的物体包围起来,不过这里使用的bounding box也同样变成了3维的
做了什么
简单来说,点云数据有其固有的局限性。它们稀疏,缺乏颜色信息,并且经常受到传感器噪声的影响。另一方面,图像分辨率高,纹理丰富。因此,它们可以补充由点云提供的3D几何图形。
所以这里采用了2D RGB图像和3D点云结合的方式,2D投票将3D对象中心的搜索空间缩小到一条线上(即x和y都确定的线上,仅仅是z在变动),而图像中的颜色纹理提供了强语义。总而言之,就是多模态的一种方式。
怎么做
整体结构分为3个部分,上半部的Image Votes from 2D Detection(2D图像投票部分),下半部的Deep Hough Voting(3D点云投票部分),右半部的Feature Fusion and Multi-tower Training(特征融合部分)
首先是下半部3D点云投票部分
输入是一个N×3的点云,每个点包含的属性就是它的坐标,首先将输入通过一个Point Cloud Network其实就是feature exactor,这里采用的也是作者做的另外一篇论文votenet的baseline
简单理解一下这个出名的不行的网络,输入就是同样的N×3点云,经过一个PointNet++做baseline的feature extractor,sample出M个种子点,每个点包含的属性是3+C(坐标+深度特征),然后这M个点做一个投票,投票出新的M个种子点,之后这M个点被聚类为K个簇,然后是产生框和NMS了。
这里有个从N个点采样到M个点后投票的方式,那么,投票在哪些方面有帮助呢?我们认为,由于在稀疏的3D点云中,现有的场景点往往远离目标中心点,直接提出的方案可能置信度较低或不准确。相反,投票让这些较低的置信点更接近,并允许通过聚合来强化它们的假设。
然后回到这篇的网络
输入N×3后,经过backbone得到K×(3+F)个种子点(坐标+深度特征),这K个点经过投票得到最后投票的种子点(投票站由MLP组成)然后得到的K个点还是3+F维度的,3是坐标代表投票对象的中心点,F是特征向量,也就是
得到了3D特征后,接下来要得到2D特征,也就是另外一个部分,2D图像投票部分
这里的输入自然是一张2D RGB图片,首先采用一个2D detector baseline来进行操作,这里选用的是Faster R-CNN,这个网络也很出名。输出M个包含类别的高置信度bounding boxes也就是2D包围框。
然后为图像中所有包围框区域中的点像素都进行一次投票,投票到各自所在的bounding box的中心,多个框内的重叠点就多次投票,框外的像素就直接补零,然后文章提出这些投票点需要包含的信息有几何信息、语义信息、纹理信息(这些恰好是点云不具备的)
首先是Geometric cues几何提示,这里所做的就像前面做了什么里说的,图像平面2D物体中心变成3D点云中的一条射线,这样能有效减少对象中心的搜索空间
这里的C是3D对象的中心点,c是这个点至2D图像的投影,P是点云中对象表面的点,p是这个点至2D图像的投影,这两个的交点O和C组成的线就是3D空间中的搜索空间(正如前面所说,这里缩小到了1D)
上述即定义了
PC即点P至投票中心的向量
这里的pc即2D投票的向量,这里的f是假设的焦距
这时根据向量计算可以得到
这里假设的是点P的表面深度和中心深度应该是相同的
PC‘即是伪3D投票,这里的C‘正处于射线OC上
继续进行下去,这里因为是假设的z1=z2即前面所说的深度关系,表示了一个误差
根据PC‘和OP还可以得到真正的几何提示
进行一次norm后
前面说过点P所需要的是由2D图像传给它的几何信息,并且是在搜索空间压缩至1D条件下,这里就用OC‘来进行的代替,简单理解下三维的含义,第一维计算的是2D图像投影至3D的位置,△u就是2D下点p至点c的距离,f是焦距。最后一维是1D投影空间下的,采用的是OC‘的方向。
然后是第二个,语义提示,这也是点云所不具备的,RGB图像能更好的传达图像内容的语义,有助于几何形状相似的类别进行辨别(比如苹果和橘子)
这里的做法就很简单,对于每个种子点,直接赋予它一个投影于2D盒内的语义类别标签(2D图像下的语义)
最后是纹理提示,与3D的稀疏分布不同,2D的RGB图像下可以非常密集地捕获高分辨率的信号,可以更好的展现出纹理内容,所以这里也作为一个线索。
这里的做法也很简单,对于每一个种子点,直接获得它对应的2D图像上的像素的像素级特征,将这个作为它的纹理特征,而且这里没使用卷积什么的进行进一步提取,直接是使用的像素的RGB的值
至此,前两个部分结束,分别获得了2D线索和3D建议
首先是2D线索
这里的F‘是特征维度
然后是3D建议
前面有提到
接下来是最后一个部分特征融合部分
这里使用的是《What makes training multi-modal networks hard?》论文中的一个策略叫梯度混合策略
就像上图展示的,部分分为了三个训练塔,image tower、joint tower、point tower,分别的输入是:仅仅只有图像特征、联合特征、仅仅只有点云特征,每个塔都有相同的检测3D对象的目标任务,但它们都有各自的3D投票和盒子提案网络参数以及各自的损失。最终的训练损失是三个检测损失的加权和:
值得注意的是这里的仅仅只有image的这个tower是用到了前面提到的伪3D投票,即PC’
总结
1.本文提出了一个方式,展示了如何在3D点云中结合2D信息,而且非常细致的展示了各自的方法,在我看来是非常强大的,而且这种multy tower的方式也值得学习
2.很喜欢跨模态的东西,坐等公开源码,很急很关键