1 图像中物体的定位
这一阶段的任务是在图像中识别物体的中心点,分为两个阶段:
1.1 粗分割
- 将尺寸为512
×
\times
×
\times
- 将图像块输入到VGG分类网络(将最后全连接层的输出改为
16
×
16
=
256
16\times 16=256
×
\times
- 大于设定阈值的8
×
\times
1.2 细分割
- 将包含最大物体区域的图像部分resize为
16
×
16
16\times 16
- 网络只有两个卷积层和两个池化层,输出结果同粗分割时类似;
- 根据精细化分割的结果得到BBox,进而得到物体的中心点。
2 预测三维位姿
根据第一阶段分割的结果——即图像中感兴趣物体的中心点位置,crop出以该点为中心的图像块输出到这一阶段的网络(同为VGG),输出为物体在三维场景中3D BBox八个角点在图像上的投影点坐标,根据这8组3D-2D的对应点,求解PnP可以得到物体的6D位姿。
3 旋转对称物体的位姿估计
BB8在处理旋转对称物体的方法很有代表性,下面是本人结合原论文对该方法的理解。
原文的3.3小节中详细地描述了处理对称物体地方法,我这里先简单总结一下:
首先,对于训练集中的对称物体,识别它的对称角度(angle of symmetry),如上图(a)中所以物体如果忽略圆环上小的突出,可以简单 理解为一个对称角度为180°的物体(也即保持相机的拍摄位姿不变,物体围绕它自己坐标系的对称轴旋转180°后拍摄得到的图像和未旋转前得到的图像非常相似)。
然后,记该物体的对称角度为
α
\alpha
α,物体的旋转角度为
β
\beta
β,则只有限定物体的旋转角度
β
∈
[
0
,
α
)
\beta \in [0, \alpha)
β∈[0,α),物体的二维成像与物体的实际位姿才存在一一对应的关系,所以我们需要将训练集中的标注位姿转换到一定的范围,使得在该范围内拍摄得到的图像满足上述一一对应的关系。实际上这里只需要对训练集中的标注位姿做简单的3D几何变换就可以了,下面讲一下这个过程。
如上图所示,假设物体的对称角度为180°,则我们在固定的纬度拍摄物体制作数据集时,只需要在半个圆弧的范围内拍摄即可,所以,如果假设原始标注的位姿不在这个半圆弧范围内,我们就需要沿着该维度的圆形轨迹围绕对称轴反向旋转
β
−
180
\beta -180
β−180°。这个过程只需经过下面的计算即可实现:
[
R
′
∣
t
′
]
=
[
R
3
×
3
∣
t
3
×
1
]
[
c
o
s
(
β
%
α
)
−
s
i
n
(
β
%
α
)
0
0
s
i
n
(
β
%
α
)
c
o
s
(
β
%
α
)
0
0
0
0
1
0
0
0
0
1
]
(1)
\left[ \begin{matrix} R’&|&t’ \end{matrix} \right]= \left[ \begin{matrix} R_{3\times 3}&|&t_{3\times 1} \end{matrix} \right] \left[ \begin{matrix} cos(\beta\%\alpha)&-sin(\beta\%\alpha)&0&0\\ sin(\beta\%\alpha)&cos(\beta\%\alpha)&0&0\\ 0&0&1&0\\ 0&0&0&1 \end{matrix} \right]\tag{1}
[R′∣t′]=[R3×3∣t3×1]⎣⎢⎢⎡cos(β%α)sin(β%α)00−sin(β%α)cos(β%α)0000100001⎦⎥⎥⎤(1)
上式中的%表示求余数。
第三,通过观察我们发现,即使物体经过旋转之后(改变相机的位姿相对来说就是旋转物体),当它的旋转角度趋于区间
[
0
,
α
)
[0, \alpha)
[0,α)的两端,拍摄得到的照片依然非常相似,如上上图的(a)和©,继续将物体的旋转角度限制在
[
0
,
α
/
2
)
[0, \alpha/2)
[0,α/2)之间。这一步只需要识别出物体经过上一步处理得到的旋转角度,如果位于
[
α
/
2
,
α
)
[\alpha/2,\alpha)
[α/2,α)之间,则将该图像镜像处理,输入模型得到预测的关键点后在镜像回去。
最后,对于回转物体(也即对称角度为0°),式(1)中直接反向旋转
β
\beta
β°。