6D目标检测简述
文章目录
- 6D目标检测简述
- 介绍
- 基于模版匹配的算法
- 基于点的算法
- 基于描述子的算法
- 基于特征的算法
- 基于深度学习的6D姿态估计
- 基于RGB图像的深度学习方法
- **SSD-6D**
- **Deep-IM**
- **PV-Net**
- **HybridPose**
- **Self6D**
- **DSC-PoseNet**
- **GDR-Net**
- **SO-Pose**
- **KDF-Net**
本文参考了ITAIC的文章 A Review of 6D Object Pose Estimation
介绍
6D目标检测,和传统的目标检测类似,都是从图像(包括点云)中去识别物体的位置。
传统的2D目标检测,像是SSD、YOLO等,识别的结果是一个边界框(bounding box)
而3D目标检测的结果则是一个3D的边界框。
6D目标检测的输出结果包括两个部分:
- 物体的空间坐标:x, y, z
- 物体的三个旋转角: pitch, yaw, roll
传统的6D目标检测可以被分类成以下几种:
- 基于模版匹配
- 基于点
- 基于描述子
- 基于特征
方法 | 优点 | 缺点 |
---|---|---|
基于模版匹配 | 擅长针对无纹理或者弱纹理的物体 | 对遮挡比较敏感 |
基于点 | 抗遮挡 | 依赖纹理细节 |
基于描述子 | 抗遮挡 | 依赖纹理细节 |
基于特征 | 擅长弱纹理,同时抗遮挡 | 较难处理对称物体 |
基于模版匹配的算法
基于模版匹配的算法,其思路就是: 生成尽可能多的模版,每一个模版表示不同的旋转姿态,同原图进行相似度的计算
由于实际环境会受到光照、遮挡的影响,这类算法在这种情况下表现较差。
同时,由于需要生成多的模版,所以算法的计算代价也较高。
较为经典的模版匹配算法,比如 linemod
ICCV-2011: Multimodal templates for real-time detection of texture-less objects in heavily cluttered scenes
使用了图像的色彩梯度(Color Gradient) 来抵抗光照和噪声等影响,同时引入了深度信息来构建数个表面垂直向量来作为特征
基于点的算法
这里所说的点,其实是空间中的点。基于点的算法,其本质是: 利用点云之间的匹配来实现姿态估计
和模版匹配类似,通过构造一些点的特征,边的特征,然后生成不同姿态下的特征集合,通过特征匹配进而实现点云的匹配。
这里给出一些相关文献,供大家参考:
CVPR-2010: Model globally, match locally: Efficient and robust 3D object recognition
IROS-2012: 3D pose estimation of daily objects using an RGB-D camera
基于描述子的算法
描述子通常是用来刻画点周围的一些几何特征,比如说:点坐标的特点,法向量或者是曲线
该方法和基于点的方法类似,都对纹理特征依赖比较严重
本质也是需要预先生成一堆描述子集合,然后逐个进行匹配。
一些经典的方法,比如说点特征直方图(Point Feature Histogram, PFH),有兴趣的读者可以自行阅读
R. B. Rusu, N. Blodow, Z. C. Marton, et al, Aligning Point Cloud Views using Persistent Feature Histograms, Proceedings of IEEE/RSJ International Conference on Intelligent Robots and Systems, pp. 3384-3391, 2008.
基于特征的算法
同样的,我们需要生成一系列特征集合,进行模型的训练,如下图所示:
通过一些机器学习的方法,比如随机森林等,训练一个分类器,以特征作为输入,输出对6D姿态的估计
- E. Brachmann, A. Krull, F. Michel, et al, Learning 6D Object Pose Estimation Using 3D Object Coordinates, Proceedings of European Conference on Computer Vision, pp. 536-551, 2014.
- M. A. Fischler, R. C. Bolles, Random sample consensus: a paradigm for model fitting with applications to image analysis and automated cartography, Communications of the ACM, vol. 24, issue 6, pp. 381-395, 1981.
基于深度学习的6D姿态估计
这里,我们将所有的基于深度学习的方法分成两类:
- 基于RGB图像的方法
- 基于RGB-D图像的方法
RGB-D图像即是在原本的图像通道上,加了一个深度通道,代表像素点的深度信息
基于RGB图像的深度学习方法
这里给出一些相关的方法的总结表格
- SSD-6D: Making RGB- Based 3D Detection and 6D Pose Estimation Great Again,
- DeepIM: Deep Iterative Matching for 6D Pose Estimation
- PVNet: Pixel-Wise Voting Network for 6DoF Pose Estimation
- HybridPose: 6D Object Pose Estimation Under Hybrid Representations
- Self6D: Self-supervised Monocular 6D Object Pose Estimation
- Dsc-posenet:Learning6dofobjectpose estimation via dual-scale consistency
- GDR-Net: Geometry- Guided Direct Regression Network for Monocular 6D Object Pose Estimation
- SO-Pose: Exploiting Self-Occlusion for Direct 6D Pose Estimation
- KDFNet: Learning Keypoint Distance Field for 6D Object Pose Estimation
其中ADD(-S) 代表预测点和最近的真实点的距离偏差,越小越好。
SSD-6D
该方法是将原来目标检测的SSD范式拓展到了6D目标检测领域,使用InceptionV4,估计2D的边界框,并且对所有的视角和旋转进行打分。
可以看到,最后的预测结果由四个部分组成:
- 4:2D边界框坐标
- C:代表物体的类别
- V:代表物体的视角个数,可以理解成物体的角度
- R:平面内旋转的类别 (in-plane rotation class)
同时,SSD-6D使用ICP,来提高精确度,优化姿态的结果
在6D姿态识别中,ICP是指迭代最近点(Iterative Closest Point)算法。该算法主要用于将一个点云或三维模型与另一个点云或三维模型对齐或配准。在6D姿态识别中,ICP算法可以用来估计目标物体的姿态,即将一个模型与目标物体的点云匹配,找到最合适的姿态使两个模型之间的误差最小化。通过迭代求解最近点匹配问题,ICP算法可以不断优化姿态估计的准确性,从而实现6D姿态识别。
Deep-IM
DeepIM使用了一个FlowNetSimple的骨干网络,用来预测一个相对的特殊欧式群 SE(3) 的元素
SE(3) 是一个包含所有旋转和平移的集合,其中该集合中的元素可以表示成4x4的矩阵
T = ( R v 0 1 ) T = \begin{pmatrix} R&v\\ 0&1 \end{pmatrix} T=(R0v1)
其中, R R R 是一个3x3的旋转矩阵, v v v 是一个平移向量
在训练过程中,DeepIM还会有两个额外的分支,用来进行Mask和光流估计
FlowNetSimple: A. Dosovitskiy, P. Fischer, E. Ilg, et al, FlowNet: Learning Optical Flow with Convolutional Networks, Proceedings of International Conference on Computer Vision, pp. 2758-2766, 2015.
PV-Net
如上图所示,PV-Net首先使用一个网络,做向量场估计以及语义分割,然后投票得到关键点位置的假设,最后得到关键点位置的分布
这里,PV-Net的骨干网络使用的是ResNet18。
HybridPose
HybridPose方法的特点就是揉合了多种不同的特征:关键点、边缘向量和对称相似(symmetry correspondences)
Self6D
首个将自监督学习引入6D姿态估计中,利用神经渲染(neural rendering)来实现视觉和几何的对齐
(a)先使用生成的数据进行模型训练
(b)基于训练后的模型,在大量的RGB-D数据上进行推断
(c)然后基于这些推断结果再进行训练,优化6D姿态检测的结果
DSC-PoseNet
主要分成两个步骤:
1. 利用2D边界框进行弱监督的分割
首先使用一个分割网络,在生成的数据上进行初始训练。
然后在实际的图像上推断,利用2D边界框移除掉一些异常的分割结果,反复优化这个分割网络
2. 自监督关键点学习
构造一个双尺度(dual-scale)的自监督信号来训练DSC-PoseNet
主要有两个部分:
- 原始图像经过DSC-PoseNet之后,得到2D关键点和分割结果
- 利用2D边界框,裁剪和缩放之后,经过DSC-PoseNet,得到2D关键点和分割结果
利用第一部分的分割结果,以及分割网络的结果进行对齐,
第一和第二部分得到的关键点进行比对,计算出不同尺度下的连续性,构造误差
GDR-Net
同先前的一些网络输出一样,最后输出包含两个部分,一个是旋转矩阵,一个是平移向量
在训练过程中,会使用一个随机放大技巧(Dynamic Zoom-In), 然后经过网络生成3个中间几何特征(intermediate geometry feature),分别是:
- Dense Correspondences Map:
M
2
D
−
3
D
M_{2D-3D}
M2D−3D
- 其大小是2x64x64,本质上就是每个像素2D投影的坐标
- Surface Region Attention Map:
M
S
R
A
M_{SRA}
MSRA
- 对于每一个像素来说,输出该点所属于表面区域,这里应该是不同的表面区域代表不同的类别
- 可以看到形状是64x65x65,意味着一共有64个不同表面区域
- 文章后续探究了不同的表面区域数量对方法的影响,有兴趣的可以看一下原文
- Visible Object Mask:
M
v
i
s
M_{vis}
Mvis
- 就是一个遮罩,类似语义分割的物体遮罩
SO-Pose
如上图所示,该方法的特点就是引入了一个自遮挡信息(Self-Occlusion Information),进一步增强了准确度
KDF-Net
传统方法通常都是使用像素粒度的投票来确定2D的关键点,利用解决PnP问题来求解物体的姿态
不过这种投票方法,因为是基于方向的,所以难以处理一些比较长、薄的物体
这些长、薄的物体的方向难以被推断出来,因此,该方法提出了一种关键点距离场 (Keypoint Distance Field)
利用KDF来预测2D的关键点位置
如上图所示,首先用一个全卷积网络来预测KDF,对于每一个像素应该都有一个KDF,然后使用RANSAC方法去随机采样N次
再使用投票来选出关键点,最后使用PnP求解