PVNet: Pixel-wise Voting Network for 6DoF Pose Estimation
来自浙江大学,论文作者在知乎发过关于这篇论文,目前在LineMod、LineMod Occluded、YCB-Video、数据集上都是第一名。
一.引言
1.1 问题描述
在本文中,我们提出了一种用于6DoF对象姿态估计的新颖框架。 给定图像,姿势估计的任务是检测对象并估计其方向和3D平移。 具体而言,6D姿态由从对象坐标系到摄影机坐标系的刚性变换(R; t)表示,其中R表示3D旋转,t表示3D平移。所以算法的输入是一张rgb图像、3D keypoints、bbox_8,输出是(R,t),最终展现的效果是:bbox_8经过旋转、平移、2D映射之后,投影在原图像上,能够准确地将特定物体框住。
1.2 现有方法的局限
最近流行的方法是,利用CNN回归得到2D keypoints,然后利用PnP算法进行求解得到6D pose parameters。但是这些方法对于遮挡、截断的物体难以精准检测。
1.3 作者的分析
作者认为,针对遮挡、截断等问题,我们需要在中间阶段或最后阶段得到稠密的预测,即像素或小区域级别的预测。于是作者提出了像素级预测的PVNet,对于每个像素,会得到一个指向2D keypoints的方向向量,如此对于截断物体的位置推理有大大的帮助。(实际上,这种像素级的回归越来越流行了,如hand-object estimation中的H+O方法也有这种思想)
1.4 作者的贡献
- 提出了PVNet(pixel-wise voting network),它可以学习到一个指向2D keypoint的向量场表示,即便在遮挡和截断的情况下;作者的创新之处–能够学习到十分robust的2D keypoints。
- 基于PVNet得到的稠密预测,作者用了一种基于关键点分布的PnP算法来从2D keypoints分布求取(R,t)位姿。
二.论文方法
我们使用两阶段算法估算对象姿态:首先使用CNN检测2D对象关键点,然后使用PnP算法计算6D姿态参数。 我们的创新在于2D对象关键点的新表示以及用于姿态估计的改进的PnP算法。 具体来说,我们的方法使用像素级投票网络(PVNet)以类似于RANSAC的方式检测2D关键点,该方法可以强大地处理被遮挡和被截断的对象。 基于RANSAC的投票还给出了每个关键点的空间概率分布,从而使我们能够利用不确定性驱动的PnP来估算6D姿态。简单来说,第一步,利用PVNet得到向量场预测和语义分割,基于RANSAC的投票得到2D keypoints的候选点,候选点带有位置和分布;第二步,利用3D keypoints、相机内参、2D keypoints进行PnP、最优化求解,得到位姿(R,t)。
2.1 基于投票的关键点定位方法
Bilinear upsampling
双线性插值原理
Residual Block
Dilated Convolution
图2概述了用于关键点检测的流程。给定RGB图像,PVNet会预测像素级对象标签和单位矢量,这些对象标签和单位矢量表示从每个像素到每个关键点的方向。给定从属于该对象的所有像素到某个对象关键点的方向,我们针对该关键点生成2D位置的假设,并通过基于RANSAC的投票生成置信度得分。基于这些假设,我们估计每个关键点的空间概率分布的均值和协方差。与直接从图像区域中定位关键点位置相反,预测像素方向的任务使网络更加关注对象的局部特征,并减轻了背景混乱的影响。这种方法的另一个优点是能够表示被遮挡或位于图像外部的关键点。即使关键点不可见,也可以根据从对象的其他可见部分估计的方向正确定位关键点。
对于像素p,PVNet输出将其与特定对象关联的语义标签和代表从像素p到对象的2D关键点
X
k
X_k
Xk方向的单位矢量
v
k
(
p
)
v_k(p)
vk(p),如下定义:
给定语义标签和单位向量,我们在基于RANSAC的投票方案中生成关键点假设。首先,我们使用语义标签找到目标对象的像素。然后,我们随机选择两个像素,并将它们的向量的交点作为2D 关键点
X
k
X_k
Xk假设点
h
k
,
i
h_k,_i
hk,i,如此重复N次,得到第k个2D keypoint的N个假设点
{
h
k
,
i
∣
i
=
1
,
2
,
.
.
.
,
N
}
\lbrace h_k,_i|i=1,2,...,N\rbrace
{hk,i∣i=1,2,...,N}。最后,对象的所有像素都为这些假设投票。
每个假设点的投票分数:
Π
\Pi
Π为指示函数,θ=0.99。从直觉上讲,较高的投票分数意味着该假设与更多预测的方向一致时,其置信度更高。得出的假设点表征了图像中关键点的空间概率分布。
最后,关键点
X
k
X_k
Xk的均值
µ
k
µ_k
µk和协方差
Σ
k
Σ_k
Σk可通过以下公式估算:
关键点选择:
需要根据3D对象模型定义关键点。 许多最近的研究都使用对象的3D边界框的八个角作为关键点。 图3(a)中显示了一个示例。 这些边界角远离图像中的对象像素,距目标像素的距离越长,定位误差越大,因为关键点假设是使用从目标像素开始的矢量生成的。 图3(b)和(c)分别显示了由PVNet生成的边界框角和在对象表面上选择的关键点的假设。 物体表面上的关键点通常在定位方面的变化要小得多。
因此,在我们的方法中,在对象表面上选择关键点。 同时,这些关键点应在对象上散布以使PnP算法更稳定。 考虑到这两个要求,我们使用最远点采样(FPS)算法选择K个关键点。首先,通过添加对象中心来初始化关键点集。 然后,我们反复在对象表面上找到一个距离当前关键点集最远的点,并将其添加到集合中,直到集合的大小达到K。第5.3节中的经验结果表明,该策略产生的效果优于使用边界框角。 我们还使用不同数量的关键点比较结果。 考虑到准确性和效率,我们根据实验结果建议K = 8。
关键点的ground truth在物体的表面,由farthest point sampling(FPS)algorithm得到:首先首先,通过添加对象中心点来初始化关键点集。然后,我们不断地在物体表面找到一个点,这个点离当前的键值集最远,然后将它加入到集合中,直到集合的大小达到K。作者论文中通过实验验证,建议K取8。
实现细节:
假设有C类对象且每个类有K个关键点,PVNet将H×W×3图像作为输入,以全卷积结构对其进行处理,并输出H×W×(K×2×C)个张量表示单位向量和代表类概率的H×W×(C + 1)个张量。我们使用经过预训练的ResNet-18作为骨干网络,并对它进行了三个修订。首先,当网络的特征图大小为H / 8×W / 8时,我们不再通过丢弃后续的池化层来对特征图进行下采样。其次,为了使感受野保持不变,随后的卷积被合适的膨胀卷积代替。第三,将原始ResNet-18中的全连接层替换为卷积层。然后,我们反复在特征图上执行跳连接,卷积和上采样,直到其大小达到H×W,如图2(b)所示。通过在最终特征图上应用1×1卷积,我们可以获得单位向量和类概率。我们使用CUDA实现假设点生成,逐像素投票和密度估计。用于初始化姿势的EPnP在OpenCV中实现。
执行细节:
1.关键点的选择:使用FPS(farhest point sampling)选出八点作为估计匹配的关键点。具体为先随机选取初始化一个点集,在对象表面重复寻找一个点使其离当前点集最远,然后将其加入这个点集,当这些不同点集的数量达到一定时,结束此过程。此方法比找对象包围框的八个点效果更好。
2.网络中使用的优化器:Adam
3.单独对象模型网络都是使用resnet_18网络一对一训练,所有模型是使用resnet_50训练
4.crossEntroyloss——交叉熵损失,用于计算分类问题,本论文在训练语义标签时用到
2.2 不确定性驱动的PnP算法
作者的创新之处在于考虑了keypoint的不确定性,即将keypoint的分布融入了PnP算法中,进行最优化求解。
给定每个对象的2D关键点位置,可以使用现成的PnP解算器(例如,许多先前方法中使用的EPnP)解决PnP问题,从而计算其6D姿态。 但是,大多数人忽略了以下事实:不同的关键点可能具有不同的置信度和不确定性模式,这在解决PnP问题时应予以考虑。
如第3.1节所述,我们的基于投票的方法会估算每个关键点的空间概率分布。 给定估计点的平均至
µ
k
µ_k
µk和协方差矩阵
Σ
k
Σ_k
Σk,我们通过最小化Mahalanobis距离来计算6D姿态(R,t)。
目标函数为Mahalanobis distance马氏距离(表示点与一个分布之间的距离):
X
k
X_k
Xk为3D keypoint,
X
k
X_k
Xk为
X
k
~
\tilde{X_k}
Xk~的2D投影,
π
\pi
π为投影函数。(R,t)的初始化由基于四个最小协方差的关键点的EPnP算法提供。最优化解法为列文伯格-马夸尔特算法(同时具有梯度法和牛顿法的优点)。最终求得符合全局最优的物体姿态(R,t)。
三.训练函数
smooth L1 loss损失函数
其中w代表PVNet的参数,
v
k
~
\tilde{v_k}
vk~是预测向量,
v
k
v_k
vk是真实单位向量,而
∆
v
k
∣
x
∆v_k| _x
∆vk∣x和
∆
v
k
∣
y
∆v_k| _y
∆vk∣y分别代表
∆
v
k
∆v_k
∆vk的两个元素。 为了训练语义标签,采用softmax交叉熵损失。 请注意,在测试过程中,我们不需要预测的矢量为单位向量,因为后续处理仅使用矢量的方向。
四.评估
Linemod数据集:
效果图:
定量比较: