本文创新点\贡献

分割驱动,让每个可以看到的部分都对关键点位置的预测做出贡献


方法

Segmentation-driven 6D Object Pose Estimation论文理解

方法概述

假设
物体是刚体且CAD模型已知。

对输入的图片做卷积,然后产生分割和预测,将图片分成S×SS \times S个网格,每个网格都i预测属于的类别并回归关键点的位置,关键点在这里就是交点,然后根据2D-3D对应来做EPnP


分割流

Segmentation-driven 6D Object Pose Estimation论文理解
对每个S×SS \times S的cell预测label,Dseg=K+1D_{seg} = K +1KK是类别数,因为前景和背景的不平衡,所以使用的 Focal Loss


回归流

Segmentation-driven 6D Object Pose Estimation论文理解
预测内容
在分割出来的mask中进行的预测,预测提前定义好的3D关键点的2D映射,这里用的是八个角点,所以N=8N=8Dreg=3ND_{reg} = 3N

预测方法
没有直接预测位置,预测的是八个角点对于中心位置的偏移,所以设2D形心是cc,对于第ii个关键点,预测的偏移为hi(c)h_i(c),所以绝对位置就是c+hi(c)c+h_i(c),然后训练的时候残差就是:
Δi(c)=c+hi(c)gi\varDelta_i(c) = c + h_i(c) - g_i
所以loss就是:
Lpos=cMi=1NΔi(c)1L_{pos} = \sum_{c\in M}\sum^N_{i=1}||\varDelta_i(c)||_1
同时还用sigmoid计算对于每个预测的置信度,来表示和真实值的相似程度:
Lconf=cMi=1Nsi(c)exp(τΔi(c)2)1L_{conf} = \sum_{c\in M}\sum^N_{i=1}||s_i(c) - \exp(-\tau||\varDelta_i(c)||_2)||_1

所以这一块的总loss是:
Lreg=βLpos+γLconfL_{reg} = \beta L_{pos} + \gamma L_{conf}


训练

网络结构是Darknet-53,输出为3Dtensor,空间分辨率是S×SS\times S,在其中的每个cell上预测两个特征向量Dseg,DregD_{seg},D_{reg},这个网格能控制投票的数量。
两个流的结构是相同的,不过输出的特征维度不同

最终loss

L=Lseg+LregL = L_{seg} + L_{reg}

推理

Segmentation-driven 6D Object Pose Estimation论文理解
多同类物体
因为这里的分割是类级别的,而不是实例级别的,所以对多同类物体的情况表现不好,为了解决这个作者使用了聚类方法,使用相似像素距离阈值来做聚类

EPnP:
如果直接使用RANSAC的话速度比较慢,所以作者提取了n=10n=10个最高置信度的预测来做RANSAC,能减少计算量,之后再用EPnP来求出结果,过程如下图:
Segmentation-driven 6D Object Pose Estimation论文理解
abcdPosea是网格上的类别预测,b是显示出所有预测的关键点,c是对关键点过滤,d是最终Pose可视化


实验结果

Segmentation-driven 6D Object Pose Estimation论文理解
NFHCbnRANSACn消融实验,NF不知道是啥,HC是只用置信度最高的一个预测点,b-n是RANSAC取n个最高点的效果

Segmentation-driven 6D Object Pose Estimation论文理解
和其他的方法的对比

训练和测试的时候把所图片resize到608×608608 \times 608,然后将2D映射的位置和置信度都正则化到范围[0,10]

就当是输出的比例,要结果的时候再映射回去


总结

就算是逐像素预测了,2020看这篇文章确实没啥东西,主要后面出来了不少厉害的方法,比起来这个就比较简单基础了

虽然说不是很新,但是这方法跟这之前的yolo-6D有啥区别呢?都是用cell,都是预测的偏移,都是用的PnP,就名字起的好,这个比yolo-6D多了个分割,就是预测的时候只计算分割mask部分,就这个改动,这也能中了?

相关文章: