这是阅读的3D类的第一篇文章,因此可能理解的有点浅显,有错误的地方还望路过的各位大佬告知,小弟在这里先行谢过~
本文是基于2D检测器SSD的3D检测器SSD-6D。
论文链接
测试部分代码
1. 综述
许多3D检测器都是基于视角的(view based),生成一系列离散的目标视角用于后续视频序列的特征计算。在测试过程中,从不同的离散视角对场景进行采样,然后计算特征,并与目标数据库匹配来建立训练视角和场景位置的对应。此处的特征可指编码后的图像特征(颜色梯度,深度值,方向),或者学习得到的结果。但无论是哪种情况,检测和姿态估计的精度都受以下三个方面影响: 1. 在对应的视角和尺度上,6D姿态空间的收敛性;2. 特征区别目标和视角的辨别能力;3. 在场景混乱,光照变化,出现遮挡时的鲁棒性。
YOLO和SSD等2D检测器的思想:改变采样策略,使场景采样不再是得到连续输出的离散的输入点。输入空间在整个图片上是稠密的,输出空间被离散为不同形状和尺寸的边界框。
本文贡献:
- 采用类似与SSD的框架来对RGB中的物体预测其6D位姿:
- 用合成的数据集进行训练;
- 分解模型的姿态空间,允许更容易的训练和处理物体的对称性
- 一个SSD的扩展用来产生2D检测框, 并且用来推断6D pose
- 速度更快
2. 网络结构
Base line 预训练的InceptionV4
Input: 229 * 229 RGB image 通过计算可以得到多尺度特征图
在最后一个池化层前分支,加入一个Inception-A模块,得到7171384的特征图;在Inception-A后继续分支得到3535384,加入Inception-B;Inception-B后得到17171024;Inception-C后得到991536。为了检测大尺寸的目标,又增加了两个模块:Reduction-B后面跟着两个Inception-C模块,得到551024的特征图;Reduction-B和Inception-C得到331024的特征图。得到的6个特征图都与预测卷积核卷积,从特征图的位置返回局部检测。
(ws; hs; cs)表示尺寸s的宽、高和通道数。对于每个尺寸,训练一个3 × \times × 3 × \times × cs的核,此核提供每个特征图的位置和目标ID的得分、离散视角和平面内旋转。由于网格引入离散误差(同yolo和ssd),在每个位置创建Bs个不同横纵比的边界框(anchor box 的数目)。
对于尺寸s,有(ws; hs;Bs*(C+V +R+4))个检测图,C: 目标类别数,V: 视角分类Bins的数目,R: 平面内旋转采样数。最后网络会得到21222个不同尺寸和形状的可能的边界框。
网络在给出离散的视角的得分并进行分类上,比直接给出精确的平移和旋转数值表现的更好。因此对视角分类而非回归位姿。6D位姿在视角和平面内旋转的分解可简化问题。当一个新的视点呈现出一个新的视觉结构时,平面内旋转的视点是同一视点的非线性变换。
3. 训练过程
以来自MS COCO【20】的随机图像为背景,使用OpenGL命令将对象随机转换到场景中。对于每个处理过的实例,计算其每个边界框与mask的IoU,大于0.5的被选做此目标类别的正样本。此外,我们所使用的变换确定其最接近的采样离散视点和平面内旋转,并将其四个角值设置为最紧贴合掩模,设置后的四个角值作为回归目标。
与SSD相似,采取多种数据增强的方式,改变图片的亮度和对比度。但是不会旋转图像,因其会导致视角混淆进而得到错误的姿态检测。在反向传播的过程中,保证对每个图片,正负样本的比例为1:2(选取困难负样本)。
3.1 损失函数
- L c l a s s L_{class} Lclass 正负box分类损失
- L v i e w , L i n p l a n e L_{view},L_{inplane} Lview,Linplane: 视图和inplane_rotation的分类损失
- L f i t L_{fit} Lfit:角点回归损失(smooth L1)
3.2 物体对称和视角模糊
为了避免对称的物体带来歧义,在照片生成的时候,如果是对称物体,那么只在绿色的弧线上拍照生成,对于半对称的物体,我们在红色或者紫色区域拍照,对于整个的不规则物体,在整个半球面进行拍照。这种方法很容易进行概括,以处理相互不可分辨的视图,尽管在实践中可能需要对特定对象进行手工注释。本质上,只是在测试过程中忽略了卷积分类器输出的某些视图,在训练中特别注意视点分配。
4. 检测阶段
4.1 检测过程
首先,通过前向传播得到高于某一阈值的所有的检测结果,然后进行极大值抑制。这将得到紧密精细的2D边界框,带有目标ID和所有视角和平面内旋转的得分。对于每个2D检测结果,分析最有可能的视角和平面内旋转,进而建立一系列6D假设,并在其中选择一个最优的。
其实就是先产生2D边界框,然后这个边界框记录了目标ID的得分和所有视角以及平面内旋转的得分,这样的话对于每一个2D检测结果,我就可以得到最有可能的视角和平面内旋转,进而可以建立一系列的6D假设,并且选择一个最优的。
那么一个很关键的地方就是怎么将2D检测框得到的相关结果,转换为6D的假设。
4.2 2D框建立6D假设
前面所讲述的内容都是在平面内进行的,通过视角ID和平面内旋转ID可以进行3D旋转,通过边界框进而可以推断3D平移。在离线阶段,以标准质心距离 z r z_r zr = 0.5m呈现所有离散视图和平面内旋转的可能组合,并计算它们的边界框。
4.3 姿态调整
1 针对RGB数据
将网络得出的假设位姿绘制于场景中,提取3D轮廓点。对每一个轮廓点将其投射到2D平面,在垂直于旋转方向的射线跟图像平面相交求得y,(使用IRLS方法来最小化,Geman-McLure权重来使其鲁棒),优化下式:
2 针对RGBD数据
对于RGB-D图像,给出了当前的位姿,并用标准投影ICP求解,并用点对面公式。两种情况都会进行多轮对应来提高准确度,并使用多线程来加速。
这个过程为每个2D框都提供了多个调整过后的位姿,需要选择一个最好的。对于RGB图像,进行最终渲染,并通过绝对点积计算轮廓梯度和重叠场景梯度之间的方向平均偏差。在RGB-D数据可用的情况下,我们提出假设,估计相机空间法线来用绝对点积测量相似性。
5. 评估方法
为了衡量2D pose Error, 我们计算IoU和VSS, VSS是更为合适的一个衡量,使用于AR领域, 对对称的物体有一定的容错性。
为了衡量3D pose Error, 使用ADD score, 通过计算真实点云和转换后点云的标准差来评估抓取任务的精确性。 如果小于模型直径的0.1, 就会被认为是一个正确的pose.
6. Summary
第一个提出了一个SSD方式检测器用于三维实例检测和全6D位姿估计,并且是在合成模型数据集上训练的。本文证明,基于颜色的探测器确实能够匹敌甚至超越目前最先进的利用RGB-D数据的方法,同时大约快一个数量级。进一步工作是提高CAD模型和场景中物体外观颜色差异的鲁棒性,还有各个损失项之间的平衡问题。
几个思考点
- 视图分类vs姿态回归
实验表明在检测物体姿态方面,分类比回归更加适合。6D姿态分解为视图和in-plane rotation是很自然并且更加容易跟踪问题的, 一个新的视图展示了一个新的可视化结构,而与之相关的in-plane rotation是该视图的非线性变换。 - 为何本文采用二次优化
因为没有对3D 的bounding box 的角点进行匹配优化,网络得到的2D bounding box在根据 视图和inplane rotation转为三维姿态时候,这是大致的估计姿态,并不会十分准确 - 待处理问题
合成数据和真实的数据之间的区别,需要更加合理的数据增强方式来生成更加逼真的数据,依赖2D bounding box corner的回归,对于遮挡越严重的物体,其pose的精度越低。