Single-Stage 6D Object Pose Estimation——6D姿态估计

Single-Stage 6D Object Pose Estimation

作者:Yinlin Hu,Pascal Fua, Wei Wang, Mathieu Salzmann
实验室:CVLab, EPFL, Switzerland
发表:2019.11.19 arkiv(盲猜2020CVPR)


这篇文章出自EPFL的CVLab实验室,是对浙大发表的PVNet、以及他们自己实验室发表的Segmentation-driven 6D Object Pose Estimation延续之作。
这篇文章主要的创新点是把基于 RANSACPnp 算法集成到了网络之中,形成了一个End-to-end的网络

1、6D姿态近期研究工作

对于6D姿态估计,近期的很多工作,都是先检测出2D图片上的一些关键点,然后建立2D-3D的correspondings,最后通过RANSAC-based Pnp算法,求出最后的6D姿态。但是这种方法,有如下缺陷:

  • 损失函数的设计没有针对到最后的6D姿态,只是建立在中间步骤。例如对2D投影的误差建立损失函数
  • 这些工作都没有考虑一个实际情况:当知道其中一个关键点的投影坐标时,会对其他的关键点的位置造成影响
  • 不能end-to-end的训练,inference的速度也会比较慢

2、Overview

Single-Stage 6D Object Pose Estimation——6D姿态估计_第1张图片

2.1、CNN部分

这里是用的PVNet的网络结构

共有n个keypoints,每个keypoints有m个可能的correspondences。
u 是2D图片中keypoints的可能的correspondences。
pi 指的是 n 个定义好的3D keypoints;I 指的是图片;Φ 代表网络的参数; f 是PVNet的 encoder-decoder 的网络。
步骤:输入一张图片,对每个定义的keypoint,在2D图片中生成m个可能的投影点,作者把m个投影点称之为cluster。
Single-Stage 6D Object Pose Estimation——6D姿态估计_第2张图片

2.2、Local Feature Extraction

在上一步,每一个3D keypoint的correspondendces都生成了vector(详见PVNet),这里使用MLP进行提取他们的局部特征,用 fik 表示提取出的特征。

2.3、Grouped feature aggregation

对于每一个keypoint提取到的特征,接一个max pooling,接着按照固定的顺序把他们连接起来,即下面这个式子:
在这里插入图片描述
MAX( )表示Max Pooling, CAT( )表示连接。

2.4、Global inference

最后把生成的最终特征向量,送入MLP,生成位移和表示旋转的四元数。

3、主要创新点

3.1、End-to-end

这篇文章的主要贡献就是把基于 RANSACPnp 算法,设计到了网络中,完成了end-to-end的结构。
作者做出了如下假设:把生成的Correspondences都输入到网络后,网络会自动选择一组最优的对应,生成Pose。即网络选择 代替了RANSAC,MLP部分代替了PnP计算。

3.2、 Ordering

  • 针对每一个cluster内的点,是无序的,作者在这里使用了Max pooling。
  • 对于不同的cluster,作者通过实验证明,如果提供一个不同的产生顺序,会产生不同的结果,因此作者在这里固定了他们的提供次序。

3.3、生成关键点

作者通过实验发现,对每种物体生成相同的关键点集合,或者根据各个物体的Bouding box生成关键点,准确度上并没明显差别,因此使用了通用的关键点生成方法。这里并没有太复杂的设计,就不赘述了。


这篇文章的代码还没有开源到github上,因此对里面的一些实现细节还不是特别明白,如发现错误疏漏之处,还请指教。

你可能感兴趣的:(6D姿态估计,深度学习)