【论文阅读】DeepIM: Deep Iterative Matching for 6D Pose Estimation

2018年ECCV一篇十分经典的6D位姿估计/追踪的文章,至今仍是SOTA

论文链接:DeepIM: Deep Iterative Matching for 6D Pose Estimation

文章目录

    • 主要内容和贡献
      • 现有方法
      • 本文贡献
    • 相关工作
      • RGB-D based 6D Pose Estimation
      • RGB based 6D Pose Estimation
      • Pose Refinement
    • 模型框架
      • 高分辨率缩放
      • 网络结构
      • Untangled Transformation Representation
      • Matching Loss
      • Training and Testing
    • 实验部分
      • 评价指标

主要内容和贡献

  • 图片通过回归得到位姿的方式精确度不高
  • 本文使用物体的三维模型渲染照片,然后和输入图片进行匹配,这样相比于直接回归物体姿态有更准确的结果
  • 对于给定的初始位姿,使用神经网络,通过匹配rendered image和observed image,迭代地更新位姿,网络的输出是untangled representation of 3D location and 3D orientation
  • 本文是基于RGB的,也可以用深度信息来improve

现有方法

  1. 以匹配局部特征的方式,从图像中和物体的三维模型中抽取local feature进行匹配,得到2D-3D点对应然后求解物体位姿(PnP问题)

    缺点:无法处理无纹理物体,因为无法抽取特征

  2. 预测输入图片像素点或关键点对应的三维坐标值,可以解决无纹理的问题

  3. 把位姿估计问题转换为位姿分类问题或位姿回归问题,前者把pose space离散化

2和3两种方法能解决无纹理的问题,但是很难达到高精确度,在分类或回归阶段一个很小的误差都可能导致位姿错误

提高位姿精确度的方法:pose refinement

  • hand-crafted image feature
  • matching score functions

本文贡献

  1. 提出了一个深度神经网络结构,用于迭代的、基于图像的refinement
  2. 不需要hand-crafted image features,能够自动学习内部的refinement机制
  3. 提出untangled representation of the SE(3) transformation,能够实现高精确度,还能实现未知物体位姿的refinement

相关工作

RGB-D based 6D Pose Estimation

利用深度信息的两种方法:

  1. 把深度图转换为三维点云,然后用三维模型和三维点云进行匹配
  2. 对输入图片的每个像素点都回归成物体三维模型上的一个三维坐标,然后求解最小二乘问题

RGB based 6D Pose Estimation

  1. 传统方法以匹配局部特征的方式,从图像中和物体的三维模型中抽取local feature进行匹配,得到2D-3D点对应然后求解物体位姿(PnP问题)
  2. 目前主流的方法都是对object detection或者object segmentation的相关方法进行增强,然后用于位姿估计

上述这两个基于RGB的方法和基于RGB-D的方法相比差距很大,作者认为这是因为这样的差距是因为RGB方法缺少有效的pose refinement过程

Pose Refinement

常用ICP算法(Iterative Closest Point)来对初始化的位姿进行refine,但是ICP对初始位姿非常敏感,并且容易收敛到局部最小值

模型框架

输入:observed image(当前需要进行位姿估计的图片),initial pose estimation(对当前图片位姿的初始估计,比较粗略)

过程:zooming → \to pose matching → \to untangled representation of the relative SE(3) transformation

输出:relative SE(3) transformation(用于对输入的粗略的位姿估计进行refine)

高分辨率缩放

【论文阅读】DeepIM: Deep Iterative Matching for 6D Pose Estimation_第1张图片

要解决的问题:如果输入图像中目标物体特别小的话,提取到有用的feature是特别难的

解决方式:在送入网络之前,将输入图片和渲染图片进行缩放

如图所示,在第 i i i 阶段,给定上一时刻估计的位姿 p i − 1 p^{i-1} pi1,用其渲染一张synthetic image,同时为输入图片和渲染图片各生成一张前景的mask,一共得到四张图片

根据两张前景mask生成enlarged bounding box,然后用此对四张图片同时进行裁剪。enlarged bounding box必须要确保与输入图像有相同的纵横比(aspect ratio)并以三维模型的原点的2D投影为中心 不是很明白这句centered at the 2D projection of the origin of the 3D object model是什么意思

最后对裁剪的图片进行缩放,应用双线性插值,让裁剪图片和原图有相同的尺寸

在整个操作期间,物体的aspect ratio是保持不变的

网络结构

【论文阅读】DeepIM: Deep Iterative Matching for 6D Pose Estimation_第2张图片

输入:一张8通道图片,即 H × W × 8 H\times W\times 8 H×W×8,8通道中输入图片和渲染图片各3通道(RGB),输入图片和渲染图片的mask图各1通道(灰度图)

backbone:FlowNetSimple architecture,是一个用来估计两张图片之间光流的框架

作者提到尝试使用VGG16图像分类网络作为backbone,但是效果太差,这也说明与光流相关的表示对pose matching很有用

从图中看,网络有上下两个分支:

  • 上面的分支是pose estimation branch,以FlowNetSimple产生的feature map作为输入,得到feature map主要通过11个卷积层

    pose eatimation branch主要是由两个256维的全连接层构成,然后针对transhlation和rotation分别设置两个全连接层来输出所需参数

  • 下面的分支是仅在训练过程中有的,用来对feature的表示做regularize,提高训练的稳定性

    其中一个产生光流,一个产生mask

Untangled Transformation Representation

【论文阅读】DeepIM: Deep Iterative Matching for 6D Pose Estimation_第3张图片

前一帧的位姿用 [ R s r c ∣ t s r c ] [R_{src}|t_{src}] [Rsrctsrc] 表示,那么两帧之间位姿的相对变化有下面三种表示法:

  1. naive coordinate,即两帧之间位姿的相对变换用 Δ p = [ R Δ ∣ t Δ ] \Delta p=[R_{\Delta}|t_{\Delta}] Δp=[RΔtΔ] 表示,那么当前帧的位姿即为 R t g t = R Δ R s r c , t t g t = R Δ t s r c + t Δ R_{tgt}=R_{\Delta}R_{src},t_{tgt}=R_{\Delta}t_{src}+t_{\Delta} Rtgt=RΔRsrc,ttgt=RΔtsrc+tΔ

    可以看出 R Δ R_{\Delta} RΔ 同时参与了旋转和平移的计算,即使 t Δ = 0 t_{\Delta}=0 tΔ=0 t t g t t_{tgt} ttgt 也要算一次,所以naive coordinate显然不是一种最佳的表示

  2. model coordinate,将问题解耦,让旋转不参与平移的运算,基本思想是将旋转中心从相机原点移到物体的中心点,然后绕三维模型坐标系下指定的坐标轴进行旋转

    使用三维模型坐标系则需要网络记住每个三维模型的坐标轴,这会让网络更难训练,而且如果出现了没见过的物体则无法确定其坐标轴,显然也不是一种合适的表示

  3. camera coordinate,将旋转中心从相机原点移到物体的中心点,然后在相机坐标系下估计旋转变换,这样的话就需要训练网络估算在相机坐标系下物体的相对旋转

相对平移量用 t Δ = ( v x , v y , v z ) t_{\Delta}=(v_x,v_y,v_z) tΔ=(vx,vy,vz) 表示,其中 v x v_x vx v y v_y vy 是两帧图像之间物体沿图像的x轴和y轴移动的像素个数, v z v_z vz 是物体的放缩比例, f x f_x fx f y f_y fy 是相机焦距(focal lengths of the camera),log是用来规避0值的:

v x = f x ( x t g t z t g t − x s r c z s r c ) v_x=f_x(\frac{x_{tgt}}{z_{tgt}}-\frac{x_{src}}{z_{src}}) vx=fx(ztgtxtgtzsrcxsrc) v y = f y ( y t g t z t g t − y s r c z s r c ) v_y=f_y(\frac{y_{tgt}}{z_{tgt}}-\frac{y_{src}}{z_{src}}) vy=fy(ztgtytgtzsrcysrc) v z = log ⁡ ( z s r c z t g t ) v_z=\log(\frac{z_{src}}{z_{tgt}}) vz=log(ztgtzsrc)

这样表示平移量,就将三维坐标系下的平移估计转变为了二维图像上的平移量再加放缩系数,不受物体真是尺寸和内在坐标系的影响

传统的平移表示是 t Δ = t t g t − t s r c = ( x t g t , y t g t , z t g t ) − ( x s r c , y s r c , z s r c ) t_{\Delta}=t_{tgt}-t_{src}=(x_{tgt},y_{tgt},z_{tgt})-(x_{src},y_{src},z_{src}) tΔ=ttgttsrc=(xtgt,ytgt,ztgt)(xsrc,ysrc,zsrc),但是在缺乏深度信息的情况下用2D图像信息很难直接估计3D平移,除非网络记住每个物体的尺寸,然后根据物体尺寸将2D空间映射到3D空间,这样的话就会产生和2同样的问题

Matching Loss

用旋转和平移的分离误差(loss=角度误差+平移的L2距离)来训练网络很难去平衡这两种loss,因此作者参考了 Geometric loss functions for camera pose regression with deep learning 这篇文章的做法,修改了几何重投影误差作为loss function,称为point matching loss,其形式如下:

L p o s s ( p , p ^ ) = 1 n ∑ i = 1 n ( ( R x i + t ) − ( R ^ x i + t ^ ) L_{poss}(p,\hat p)=\frac{1}{n}\sum_{i=1}^n\bigl((Rx_i+t)-(\hat R x_i+\hat t\bigr) Lposs(p,p^)=n1i=1n((Rxi+t)(R^xi+t^)

其中 p = [ R ∣ t ] p=[R|t] p=[Rt] 是 ground truth, p ^ = [ R ^ ∣ t ^ ] \hat p=[\hat R|\hat t] p^=[R^t^] 是estimated pose, x i x_i xi 是物体三维模型上的随机采样点, n n n 是采样点的个数(在实验中设置为3000)

Training and Testing

在训练过程中:将groud truth的pose增加随机噪声来作为初始位姿,用初始位姿渲染得到rendered image

在测试过程中作者发现the iterative pose refinement can significantly improve the accuracy,不断迭代的进行pose refinement能够提高精确度

同时作者还发现,if we train the network to regress the relative pose in a single step, the estimates of the trained network do not improve over multiple iterations in testing,如果训练的时候训练网络一步到位,那么在测试时迭代就不起作用了,所以在训练过程中也进行多次迭代

实验部分

作者的是要主要是在LM和LM-O两个数据集上做的,实验结果和一些参数设置可以直接去看论文和源码,我这里只列一下三个评价指标:

评价指标

  1. 5cm 5 ° \degree °,如果预测结果的旋转误差低于5度,平移误差低于5cm则视为预测正确
  2. 6D pose metric,ADD和ADDS,阈值为三维模型直径的10%
  3. 2D projection metric,在预测位姿下将物体投影到图像上,若投影后的图像和原图像上物体平均距离不超过5个像素则视为预测正确

你可能感兴趣的:(6D位姿估计/追踪,计算机视觉,人工智能,vr,ar)