天天看点

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

转载请注明作者和出处: http://blog.csdn.net/john_bh/

paper 地址:DeepIM: Deep Iterative Matching for 6D Pose Estimation

作者及团队:清华大学 & NVIDIA & BNRist University of Washington

会议及时间:ECCV 2018

project: https://rse-lab.cs.washington.edu/projects/deepim/

code:https://github.com/liyi14/mx-DeepIM

code pytorch:https://github.com/NVlabs/DeepIM-PyTorch

文章目录

    • 1. 主要贡献
    • 2. DeepIM Framework
      • 2.1 High-resolution Zoom In
      • 2.2 Network Structure
      • 2.3 Untangled Transformation Representation
      • 2.4 Matching Loss
      • 2.5 Training and Testing
    • 3. Experiments
      • 3.1 Evaluation Metrics and Data
      • 3.2 Ablation study
      • 3.3 Experiments on the LINEMOD Dataset
      • 3.4 Experiments on the Occlusion LINEMOD Dataset
      • 3.5 Application to Unseen Objects and Unseen Categories
    • 4. Conclusion

1. 主要贡献

虽然将图像直接回归到目标姿态的精度有限,但将目标的渲染图像与输入图像进行匹配可以产生准确的结果。所以作者提出DeepIM,一种6D pose matching 深度神经网络。给定一个初始的姿态估计,DeepIM 能够通过将rendered image 与 observed image 进行匹配来迭代地改进姿态。解耦表示3D location 和3D orientation 迭代训练,预测相对位姿的变换。

  • 提出了一个用于迭代的深度网络,基于图像的姿势改进,不需要任何手工制作的图像特征,自动学习内部改进机制;
  • 提出了对象姿势之间SE(3)变换的解耦表示,以实现精确的姿态估计;这种表示也能够对unseen object进行精确的姿态估计。
[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
如Fig.1 展示了DeepIM网络的迭代匹配过程。给定测试图像中对象的初始6D姿势估计,DeepIM预测相对于对象的 rendered view 与observed image 匹配的SE(3)变换。通过基于改进的姿势估计迭代地重新渲染对象,到网络的两个输入图像变得越来越相似,从而使网络能够生成越来越精确的姿势估计。

2. DeepIM Framework

DeepIM:给定观测图像和图像中目标的初始姿态估计,网络直接输出相对SE(3)变换,可应用于初始姿态,以改进估计。

  1. 首先根据已知的初始化pose和CAD模型,渲染图像;
  2. zooming in observed image和rendered image,用作网络的输入;
  3. 网络输出相对 SE(3)变换。

2.1 High-resolution Zoom In

当在图像中的物体很小时,很难提取有用的feature进行 matching,为了得到更多的信息,作者将 observed image 和 renderd image 进行放大,然后再入到网络中。

具体做法:作者为observed image 和rendered image生成一个foreground mask,根据mask 扩大边界框对四个图像裁剪,然后放大并执行双线性上采样,以获得与原始图像相同的大小(实验中是480 × 640)。这样在这个操作过程中,对象的宽高比不会改变。

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
已知 rendered mask m r e n d m_{rend} mrend​ 和 observed mask m o b s m_{obs} mobs​ ,crop patch :
[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
  • u ∗ , d ∗ , l ∗ , r ∗ u_*, d_*, l_*, r_* u∗​,d∗​,l∗​,r∗​ 表示 upper,lower,left,right 前景mask边界;
  • x c , y c x_c,y_c xc​,yc​ 表示物体在图像中的2D projection 中心;
  • r r r 表示原始图像的长宽比(宽/高);
  • λ \lambda λ 表示 expand ratio。

然后,对该patch进行双线性采样,采样到原始图像的大小,本文的原始图像大小为480*640。通过这样做,

不仅物体被放大而不被扭曲,而且网络也提供了关于物体中心位置的信息。

2.2 Network Structure

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

如Fig.3 所示,DeepIM 网络结构图。

  1. 首先将rendered image , observed image 和两个mask concatenated into 一个 8 通道 tensor 作为网络的输入((3 channels for observed/rendered image,1 channel for each mask);
  2. 使用flowNet 作为backbone network, 预测两张图像之间的 optical flow,(作者尝试使用VGG16 作为backbone ,但是结果很差,直观地确认与光流相关的表示法对位姿匹配非常有用);
  3. 姿态估计分支以FlowNetSimple的11个卷积层后的feature map作为输入。它包含两个256维的全连接层,然后是另外两个全连接层,分别用于预测三维旋转和三维平移的四元数。
  4. 在训练过程中,还增加了两个辅助分支,以正则化网络的特征表示,提高训练的稳定性。一个分支用于预测rendered image和observed image之间的optical flow,另一个分支用于预测observed image中物体的foreground mask。

2.3 Untangled Transformation Representation

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

△ p \triangle p △p 表示当前估计的pose 与目标pose 的 相对SE(3)变换的表示; R s r c , t s r c R_{src}, t_{src} Rsrc​,tsrc​ 表示当前pose; R t g t , t t g t R_{tgt}, t_{tgt} Rtgt​,ttgt​ 表示目标pose。

  1. 在 Naive Coordinate 坐标下,将当前pose 转换到 目标pose:
    [6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

    其中

    R △ t s r c R \triangle t_{src} R△tsrc​

    表示旋转不仅会使物体旋转,而且还会使物体在图像中平移,即使 旋转向量

    t △ t_{\triangle} t△​

    为零

    。 t △ t_{\triangle} t△​ 是在三维空间的度量(例如米),图中的对象的实际大小和图中的移动距离是相关,因此,如果想把图中的误匹配转换成位移偏移,那么就需要知道物体的实际大小,这样的话训练起来比较困难,而且没法对没见过的物体的进行预测。
    怎么做呢? 解耦。分开预测 R , t R,t R,t, R R R 是不受缩放影响的,再想办法让 t t t 不受 R R R 影响
  2. 对于旋转,将旋转中心从摄像机的原点移动到摄像机框架中物体的中心,由当前的姿态估计给出。然后旋转不会改变物体在相机框架中的平移。剩下的问题是如何选择旋转坐标系的坐标轴。一种方法是使用3D对象模型中指定的坐标系轴(图4(b)中的模型坐标)。但是

    这种表示需要网络记忆每个目标的坐标系,使得训练更加困难,不能推广到不可见目标的位姿匹配。

  3. 相反,在计算相对旋转时,使用与相机框架轴线平行的轴(图4©中的相机坐标)。通过这样做,

    可以训练网络独立于三维物体模型的坐标系来估计相对旋转

参考:
[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
>
[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

已知目标偏移 t t g t = ( x t g t , y t g t , z t g t ) t_{tgt}=(x_{tgt},y_{tgt},z_{tgt}) ttgt​=(xtgt​,ytgt​,ztgt​)和预测的偏移 t s r c = ( x s r c , y s r c , z s r c ) t_{src}=(x_{src},y_{src},z_{src}) tsrc​=(xsrc​,ysrc​,zsrc​),可以直接得到相对偏移 t △ = ( △ x , △ y , △ z ) = t t g t − t s r c t_{ \triangle}=(\triangle_x,\triangle_y,\triangle_z)= t_{tgt} - t_{src} t△​=(△x​,△y​,△z​)=ttgt​−tsrc​。 然而,

对于没有深度信息的二维图像,网络很难估计三维空间中的相对平移量。网络需要识别物体的大小,并根据物体的大小将二维空间的平移映射到三维空间。这种表示不仅网络难以学习,而且在处理未知物体或外观相似但大小不同的物体时也存在问题。

不训练网络直接回归到三维空间中的向量,而是回归到二维图像空间中的物体变化。

回归相对平移 t △ = ( v x , v y , v z ) t_{ \triangle}= (v_x,v_y,v_z) t△​=(vx​,vy​,vz​) , v x , v y v_x,v_y vx​,vy​表示对象沿图像x轴和y轴移动的像素数, v z v_z vz​为物体的尺度变化:

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

其中 f x f_x fx​ 和 f y f_y fy​ 表示照相机的焦距。 v z v_z vz​定义为独立于物体的绝对大小或距离,使用渲染物体和观测物体的距离之比。对 v z v_z vz​使用对数,以确保值 0 对应于比例或距离没有变化。考虑到 f x f_x fx​ 和 f y f_y fy​对于一个特定的数据集是常量,在训练和测试网络时简单地将其固定为

  1. 旋转不会影响位移,计算位移的时候就不用再考虑旋转的影响了;
  2. 中间变量 v x , v y , v z v_x,v_y,v_z vx​,vy​,vz​ 的提出使在图像空间上的表示变得简单;
  3. 不需要物体的先验知识,不用管实际的大小和坐标系。
DeepIM 只需要学会变换,使渲染的图像变得更接近观察到的图像。

2.4 Matching Loss

训练姿态估计网络的一个简单方法是对旋转和平移使用单独的损失函数。例如,可以用两个旋转之间的角度距离来测量旋转误差,并使用L2距离来测量平移误差。然而,使用两种不同的损失函数来进行旋转和平移会遇到平衡这两种损失的困难。论文 “Geometric loss functions for camera pose regression with deep learning” (CVPR 2017)提出了一种几何重投影误差作为姿态回归的损失函数,利用ground truth 位姿计算场景中三维点的二维投影与估计位姿之间的平均距离。作者考虑到想要在3D中准确预测物体的姿态,引入了[12]中几何重投影损失的改进版本,称之为点匹配损失。ground truth pose: p = [ R ∣ t ] p=[R|t] p=[R∣t] ,estimated pose: p ^ = [ R ^ ∣ t ^ ] \hat p =[ \hat R | \hat t] p^​=[R^∣t^],点匹配损失函数如下:

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

其中: x i x_{i} xi​表示在物体模型上随机选择一个3D点; n n n 表示点的个数,作者设置3000个。

point matching loss计算由ground truth位姿和estimated位姿变换的三维点之间的平均 L 1 L_1 L1​ 距离。通过这种方式,它衡量了转换后的3D模型如何相互匹配以进行姿态估计。

2.5 Training and Testing

  1. Train

    在训练中,假设有3D对象模型和ground truth 姿势。 通过将 noisy 添加到 ground truth 姿势作为初始姿势,可以生成所需的观察并呈现给网络以及姿势目标输出,这是ground truth姿势和noisy姿势之间的姿势差异。 然后可以训练网络来预测初始姿势和目标姿势之间的相对变换。

  2. Test

    当训练网络在单个步骤中回归相对姿态,训练网络的估计不会在多次迭代测试中得到改善。为了为类似于测试的训练生成更真实的数据分布,作者也在训练期间执行多次迭代

    。具体来说,对于每个训练图像和姿态,将网络预测的变换应用到姿态上,并在下一次迭代中将变换后的姿态估计作为网络的另一个训练示例。通过多次重复该过程,训练数据更好地代表了测试分布,经过训练的网络在迭代测试中也取得了明显更好的结果。

3. Experiments

3.1 Evaluation Metrics and Data

  1. Data

    LINEMOD 和 Occlusion LINEMOD

  2. Metrics

    5◦, 5cm:an estimated pose to be correct if its rotation erroris within 5◦ and the translation error is below 5cm.旋转误差在5°以内,位移误差在5cm之内,算作正确的

    6D Pose :the average distance between the 3D model points transformed using the estimated pose and the ground truth pose. 使用估计的pose和真实的poes计算3D点转换的平均距离,对于对称的物体,选最近的那一组,如果平均距离再3D模型直径的10%以内,算正确

    2D Projection:computes the average distance of the 3D model points projected onto the image using the estimated pose and the ground truth pose.An estimated pose is correct if the average distance is smaller than 5 pixels.使用估计的pose和真实的pose计算3D模型点的2D投影平均距离,如果平均距离小于5个像素,则认为正确

3.2 Ablation study

  1. 不同迭代优化设置的消融实验
    [6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
  2. 不同设计的消融实验
    [6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
  3. 不同方法初始化pose 的消融实验
    [6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

3.3 Experiments on the LINEMOD Dataset

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

3.4 Experiments on the Occlusion LINEMOD Dataset

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation
[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

3.5 Application to Unseen Objects and Unseen Categories

[6DoF Pose] DeepIM: Deep Iterative Matching for 6D Pose Estimation

4. Conclusion

在这项工作中,作者引入了DeepIM,一个新的框架迭代的姿态匹配只使用RGB图像。给定目标的初始6D位姿估计,设计了

一种新的深度神经网络

直接输出相对位姿变换

,改进了位姿估计,网络在训练过程中自动学习匹配目标的姿态。作者引入了

一个解耦的pose表示

,它也独立于物体大小和三维物体模型的坐标系,这样,网络甚至可以匹配不可见物体的姿态。

继续阅读