PointNetLK论文阅读

Main Idea

把点云P_{T}P_{S}通过pointnet网络映射到和\phi (P_{S}),目标是找出一个rigid transformation G使得\phi (P_{T})=\phi (G\cdot P_{S})。借鉴LK的思想,LK目标是跟踪detector的平移,这里是跟踪整个点云的旋转。LK是有两个2D图片I_{1}I_{2},有提取出来的I_{1}的detector,在I_{2}中根据灰度找到I_{1}的detector,算出两者位移。LK是基于光度不变假设,即I_{2}(\boldsymbol{x}+\Delta \boldsymbol{x})=I_{1}(\boldsymbol{x}),解出\Delta \boldsymbol{x}。这里是相似的,已知\phi (P_{T})=\phi (G\cdot P_{S})解出G。这里是迭代求解之后,解出的\tilde{G}与GT之差产生一个loss,反向传播去训练PointNet,即优化\phi (\cdot)

本质上是修改了ICP的操作域,ICP是直接用点云去算G,而PointNetLK则是把ICP用在feature域中

缺点

因为这个iteration,虽然作者设为max-iter=10,但是整个过程非常非常耗显存,可以看到,一次前向后向就需要12个叠起来的图,其中求导过程还有6倍batch_size的数据过pointnet,也就是17 times pointnet参数。训练的时候。。需要10个G的显存而且5分钟一个epoch。。

Structure

这里借鉴LK的the Inverse Compositional (IC) formulation(用I_{1}算梯度)(正常LK是用I_{2}算梯度)

首先已知\phi (P_{T})=\phi (G\cdot P_{S})G这个方程不一定有精确解,我们可以求最近似的解。

定义error=\phi (P_{T})-\phi (G\cdot P_{S})

目标是minmize这个error,即\tilde{G}=\min_{G}\frac{1}{2}\begin{Vmatrix} error \end{Vmatrix}_{2}^{2}

这个问题不是线性的,只能迭代求解,使用高斯牛顿法

求一个\Delta \tilde{G}=\min_{\Delta G}\frac{1}{2}\begin{Vmatrix} error (G+\Delta G)\end{Vmatrix}_{2}^{2}

用一节泰勒展开近似后,解得\Delta \tilde{G}=[J(G)^{T}J(G)]^{-1}(-J(G)^{T}error(G))

其中J(G)=\frac{\partial error}{\partial G}。其中G \in SE3,没有加法,导数无法按照正常定义进行计算。所以可以转而对其对应的\xi \in se3进行求导:J(G)=\frac{\partial error}{\partial \xi }。接下来,如果按照正向的光流法思路就是J(G_{i})=\left.\begin{matrix} \frac{\partial error}{\partial \xi }=-\frac{\partial \phi (G_{i}\cdot P_{S})}{\partial \xi} \end{matrix}\right|_{G=G_{i}},但是这样的话,每迭代一步就需要重新算J(G_{i})。所以借鉴反向LK的思路,把error改成error=\phi (G^{-1} \cdot P_{T})-\phi ( P_{S}),则第0时刻有J(G_{0})=\left.\begin{matrix} \frac{\partial error}{\partial \xi }=-\frac{\partial \phi (G_{0}^{-1}\cdot P_{T})}{\partial \xi} \end{matrix}\right|_{G=G_{0}},然后每迭代一步,就把\Delta \tilde{G}乘到P_{S}上,然后P_{T}不动error_{new}=\phi (G_{0}^{-1} \cdot P_{T})-\phi ( P_{S}^{new}),这样相对而言就是P_{T}退了一步,所以每迭代一步,jacoobin矩阵都不变,n次迭代后得出总的G:

计算用于训练的loss:

利用神经网络框架的动态图,每一次前向传播就建一次图,叠加n个图,然后反向传播一次,实现训练。

Result

训练的时候是用pointnet在model40上训练好了之后,在联合PointNetLK进行fine-tune。本文的比较对象是ICP。

在ModelNet40上sample出一个Template,然后把template进行旋转平移生成Source,用这样的数据进行train和test,做了1,2,两个实验:

  1. Train and test on same object categories
  2. Train and test on different object categories

结果如下:

 

3. 在数据中加高斯噪声,证明pointnet最后的symmetrical function用average pooling比max pooling更加Robust

4. Partially visible data

    3D与2.5D的匹配。使用的方法是:

A second approach is to use an initial estimate of camera pose with respect to the 3D model to sample visible points on the model, which can be compared with the 2.5D scan.The camera pose can be iteratively updated until the visible points on the 3D model match the 2.5D scan.

首先在CAD上sample出template=source,然后给source一个随机的translate得到P_{S},把这两个点云平移2[1,1,1]^{T},然后截取满足(P_{T(S))}+2[1,1,1]^{T})<mean(P_{T(S)}+2[1,1,1]^{T})的点云P_{T(S)}^{v}(基本上是一半)(这其实就是一个模拟深度相机扫描的过程),然后把这两个点云送入PNLK得出一个G_{est},把原始的P_{S}旋转之后,重新截取P_{S}^{v},重复上述过程直至收敛。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值