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延续之作。
这篇文章主要的创新点是把基于 RANSAC 的 Pnp 算法集成到了网络之中,形成了一个End-to-end的网络
1、6D姿态近期研究工作
对于6D姿态估计,近期的很多工作,都是先检测出2D图片上的一些关键点,然后建立2D-3D的correspondings,最后通过RANSAC-based Pnp算法,求出最后的6D姿态。但是这种方法,有如下缺陷:
- 损失函数的设计没有针对到最后的6D姿态,只是建立在中间步骤。例如对2D投影的误差建立损失函数
- 这些工作都没有考虑一个实际情况:当知道其中一个关键点的投影坐标时,会对其他的关键点的位置造成影响
- 不能end-to-end的训练,inference的速度也会比较慢
2、Overview
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。
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
这篇文章的主要贡献就是把基于 RANSAC 的 Pnp 算法,设计到了网络中,完成了end-to-end的结构。
作者做出了如下假设:把生成的Correspondences都输入到网络后,网络会自动选择一组最优的对应,生成Pose。即网络选择 代替了RANSAC,MLP部分代替了PnP计算。
3.2、 Ordering
- 针对每一个cluster内的点,是无序的,作者在这里使用了Max pooling。
- 对于不同的cluster,作者通过实验证明,如果提供一个不同的产生顺序,会产生不同的结果,因此作者在这里固定了他们的提供次序。
3.3、生成关键点
作者通过实验发现,对每种物体生成相同的关键点集合,或者根据各个物体的Bouding box生成关键点,准确度上并没明显差别,因此使用了通用的关键点生成方法。这里并没有太复杂的设计,就不赘述了。
这篇文章的代码还没有开源到github上,因此对里面的一些实现细节还不是特别明白,如发现错误疏漏之处,还请指教。