Multi-path Learning for Object Pose Estimation Across Domains论文
论文链接:arxiv
解决什么问题
无监督的6Dpose估计,即使没有没见过的物体也能处理
本文创新点\贡献
- 作者提出了一个Multi-path的编码器结构,包含一个编码器和多个解码器,这个编码器可以学习公共特征,让所有的实例共享一个latent空间,这个编码器以view敏感的方式编码那些在训练期间没见过的对象视图,然后解码器是针对每个不同实例进行处理的
- 这种方法是无监督的,不需要标注数据,只需要用3D model来合成数据训练就行了,可以通过排除扰动的方式来弥补真实数据和合成数据之间的差异
前人方法
基于大量数据且特定实例,不灵活
本文IDEA来源
AAE [ Implicit 3d orientation learning for 6d object detection from rgb images ] 2018 ,提取实例级的物体表达特征
方法
方法概述
分成两阶段,初始化和微调:
- 初始化:假定现在有A类物体的model,用A类的model来训练MP编码器并且生成codebook,codebook存放target姿态的图像编码,MP编码器的输出可以称之为“code”,将code和codebook中的target视图作比较,取相似度的cosine分数最高的target视图为结果,该物体的初步pose就取自这个target视图。
- 微调:交替优化,因为MP编码器有位移不变性,所以优化旋转起手
原理和优点:
- MP编码器获得的是物体视图的方向的category不可知但外形依赖的描述符
- 在位置物体上的迭代微调,比DeepIM效果好
- 迭代微调还能消除离散误差,暗含一个latent code,能映射所有的SO(3)
Multi-Path Encoder-Decoder
功能:
解码器都是辅助编码器的, 为了能让编码器学的好,之后就可以舍弃解码器,只留下编码器,这个方法能学习到交叉表达、共享特征
编码器算是个基础backbone,每种类别的东西都能学一点
结构:
由一个编码器,还有n个解码器组成,其中,n是不同的物体形状数量
z就是解码器和数据增强合二为一
输入和输出:
输入也做了增强,异类batch包含多种物体;输出的编码是分开的,每个解码器只接受对应物体shape的code。
loss:
表示选择对应shape 的解码器。
j是batch中物体index, k是所有解码类别的index,每次应该都是
Principal Component Analysis of Encodings
做了两个实验:
- car的80个CAD模型实例
- 8个不同的类别的10个实例
经过训练,产生72个视点,沿着方位角、仰角和平面内旋转的完整旋转
从这些角度记录不同的物体,然后喂入编码器
?咋回事?经过训练才这么做,那么训练的是什么?是所有的类别(不包括要用到的)生成一遍特征吗?
还是codebook?
从全部物体的编码空间中,计算前三个重要元素,并且将所有的编码投射到这个方向上,这是一种插值,如下图:
PCA?找到关键的方向,然后在关键的方向突出,从一个超球面构造新的shape,这也是插值吗?
话说这个分pca是怎么做到的,这三种东西看不动啊
表格说明:
最上面一行表示训练集的car实例的编码,只有这一样的实例被用于训练,其他行都是训练集中不包含的,只是用来训练MP编码器来学习一些基本特征
第二个要测量八个物体,但是只用了沙发和厕所来训练,而且用来训练的还是不包含在测试集中的shape,应该是这个意思
结果:
可以看到,编码器在每个旋转轴都很平滑,即使是评估没训练过的物体上。
从图中可以看到,当从同一点开始,在不同的子流形中结束的时候,能捕获编码对象的形状和它们的对称性。
没看的出来啊
例如,car实例产生两个旋转的闭合轨迹,因为汽车的形状在相反的视点上看起来很相似
闭合?如果转到另一边还是相似,就是闭合?这东西显示的是外观特征?
还可以看出来在每个模型中,car的训练和测试都被编码的比较相似,说明了编码器和codebook的性质
能较好的表示的性质?
其他的没见过的也隔开了,因此一个有意义的pose描述符能被提取,而不需要重新训练编码器,只要从3D模型创建一个codebook
创建codebook是用3D模型创建好多个角度的视图,然后网络就能根据视图匹配,来确定pose?是这样吗?
对
所以这是一个匹配器?
有点像
除了偏移量,模型都学习相当相似的编码器,即使第一个模型没有学习过沙发和厕所。
这说明提取了低级的特征能够贯穿多种外观和类别。
对于偏移量具有不变性,偏移量是通过别的方法计算的
Iterative Refinement of Latent Codes
MP编码器对位移具有不变性,所以先优化旋转
目的:
让结果更准确,同时通过增加扰动来让网络具有一定的鲁棒性
输入:
初始化pose()和target视角,初始化pose是利用编码器输出的code和codebook匹配得来的。
利用target视角和编码器来生成,这个将用于和渲染的输出比较,来得出一个分数,分数最多即选中
执行:
共有三层循环,最内层是生成多种扰动,越往后生成的越少;第二层是根据扰动得到,共循环四次;最外层是根据边缘匹配来调整,共循环三次。
- 最内层:对输入的做一定的扰动,且执行多次,生成很多的扰动,根据扰动后的R和输入的来渲染3D model,把新渲染的图片输入到编码器中得到输出。
- 中间层:之后,将和作比较,在所有的扰动中选出分数最大的,这个将作为新的
- 最外层:根据目前得到的pose来渲染3D model生成,然后对坐多尺度边缘匹配,可以得到,将其加到上得到新的
从SO3采样的优势:
- SO3的维度更低
- 只搜索描述有效方向的 latent manifold(隐流形?)
迭代微调就是用的SO3
Object Pose Estimation Across Domains
单个mp编码器可以利用批处理推理来实现与对象数量几乎保持一致的运行时间
训练的编码器网络一直是固定的, 但是可用的方法取决于所考虑的测试对象的特征和可用信息:
- 第一列:全部条件齐全,没啥说的
- 第二列:如果test 3D model可获得的话,能够很好的创造一个新的codebook并且从中估计pose。
有了模型可以直接合成数据来训练,也有codebook,算是比较好的情况 - 第三列:如果没有3D模型,但是有相同category的训练的实例的codebook的话,可以直接使用这些codebook来生成pose
但是,没有可供对齐的3D model的话,提取的表示更依赖于object的形状,而不是它的class,因为毕竟没有可参考的codebook
refien结果可以来自稀疏codebook,或者只做局部相关pose估计而不适用任何codebook
注意,这里说是没有codebook的话,就只有局部相关了,应该说说没有3D模型参考就无法得出pose,其实也是合理的,pose也是人为定义的,如果没有3D model,也不知道一开始的方向是如何的
训练
数据准备:
为了让预测有鲁棒性,输入都随即位移和缩放了,背景随机生成,遮挡、光亮、颜色都做了增强。
在T-LESS上的处理合成数据,8w个Pascal VOC背景图片,4w个黑背景图片,4w个随机纹理背景
为了完成重建任务,学到的特征需要对光线和颜色的增强以及输入的转换保持鲁棒,增加的那些扰动就是为了这个目的
网络结构:
MaskRCNN的结构加ResNet50
实验结果
MOdelNet40的度量:
绝对角度误差还有ADD,还有2D投影度量,设置5像素为阈值
T-LESS:
使用VSD度量,可以处理对称和对物体,是二义性不变性的pose误差度量,可以测量可视的物体表面
多物体是指重叠倒一起的时候如何度量吗
On evaluation of 6D object pose estimation. In European Conference on Computer Vision
召回率:, 物体可视大于,tolerance
总结
第一次接触到这种latent和codebook,看起来蛮有趣的,应该是用匹配来代替回归,但是每次都要从codebook中查找,这样或许挺影响速度的。
但是这种方法不需要每次都训练模型就感觉很nice,一对多的特性很值得学习,本质上就是提取最一般最鲁棒的特征,要想想还有没有别的方法来做同样的事情
或许还可以在特征的提取上加一些约束loss