首先本文是专注于自动驾驶领域,在这项任务中,交通参与者沿纵轴的平移距离变化比较大,因此,平移的估计是更具有挑战性的。同时,车辆的平移估计比方向估计更为关键。
传统的方法是将平移估计作为一个独立的过程,而不是使用几何投影法进行目标类的预测和旋转估计。但是,几何投影法方法是有假设的前提条件的。
1、三维物体的中心投影到二维图像的物体的bounding box的中心
2、正确估计预测的对象类别和旋转向量
网路的主要组成部分,2D空间的检测头和6D-VNet在3D space中回归6DoF的旋转和平移向量
整体的网络架构
6D-VNet是建立在如Figure 3所示的标准对象检测网络上的。该系统是一个经过端到端训练的两级网络,用于估计目标的6DoF姿态信息。网络的第一阶段是典型的二维目标检测网络(Mask R-CNN)。该网络的第二阶段是自定义头估计目标6DoF位姿信息。
6DoF姿态估计分支是该模型的新颖之处,分为两部分:第一步是,如果候选类属于车辆类别,则对每个候选框进行RoIAlign,并且执行子类分类和旋转估计。由于对于给定的车辆类别来说,平面旋转是唯一的,所有车辆都共享相同的偏航、俯仰和滚转角的旋转特性。因此,来自于RoIAlign层的固定大小的视觉提示,对于估计候选的子类类别和旋转是充足。
第二部分采用RoIAlign特征和bounding box信息(在Sec. 3.2中描述的世界单位中),通过连接操作来估计三维平移向量。据我们所知,这个新颖的formulation是第一个直接回归平移向量的方法。联合特征组合方案通过拼接操作对对象类和旋转信息进行隐式编码(⊕ 在Fig. 3)。将平移回归头与子类分类和四元数回归的联合损失相结合,可以实现平移回归头的协同作用。我们在实验中证明,我们提出的新的平移回归方法比将平移估计作为后处理步骤的方法有更加准确的位置估计。这种对平移向量的精确估计,对于物体之间的距离至关重要的应用来说尤为重要(e.g. 在自动驾驶场景中)。
1. Network Architecture
其实整体的结构的话,看网络的架构就应该会是比较的清楚的,对于6DoF姿态估计分支来说,整体可以简单的分为两部分。
第一步是判断候选类的类别,如果为车辆类别,则对候选框进行RoIAlign,这个地方不同于Mask RCNN,在Mask RCNN中,产生RoI之后,即进行RoIAlign操作,然后将RoIAlign之后的特征放到后续的网络中。但是在6D-VNet中是先进行相关的操作,然后输出类别和box以及mask,当判断其为车辆类别之后再进行RoIAlign操作(这个地方不是特别的确定,因为这样产生的mask是没有Mask RCNN 准确的,需要看一下它的代码)。注:还有一个关键的问题是,作者在文中好像并没有提及mask是用来做什么的。
第二部分是采用RoIAlign特征和Bounding box的信息,通过连接操作来估计三维平移向量。联合特征组合方案通过拼接操作对对象类和旋转信息进行隐式编码(⊕ 在Fig. 3)。将平移回归头与子类分类和四元数回归的联合损失相结合,可以实现平移回归头的协同作用。
2. Joint losses
损失函数的设计是一个很关键的部分,端到端的训练网络,最小化损失
L
\mathcal{L}
L:
L
\mathcal{L}
L=
L
d
e
t
\mathcal{L}_{det}
Ldet+
L
i
n
s
t
\mathcal{L}_{inst}
Linst,其中
L
d
e
t
\mathcal{L}_{det}
Ldet代表标准检测网络中的多任务损失函数:
L
d
e
t
\mathcal{L}_{det}
Ldet=
L
c
l
s
\mathcal{L}_{cls}
Lcls+
L
b
o
x
\mathcal{L}_{box}
Lbox+
L
m
a
s
k
\mathcal{L}_{mask}
Lmask。分类损失
L
c
l
s
\mathcal{L}_{cls}
Lcls,2D bounding box 损失
L
b
o
x
\mathcal{L}_{box}
Lbox和2D mask损失
L
m
a
s
k
\mathcal{L}_{mask}
Lmask。
L
i
n
s
t
\mathcal{L}_{inst}
Linst代表6DoF估计的子类分类的单个实例损失。特别地,它代表三元损失
L
i
n
s
t
\mathcal{L}_{inst}
Linst=
λ
s
u
b
_
c
l
s
L
s
u
b
_
c
l
s
\lambda_{sub\_cls}\mathcal{L}_{sub\_cls}
λsub_clsLsub_cls+
λ
r
o
t
L
r
o
t
\lambda_{rot}\mathcal{L}_{rot}
λrotLrot+
λ
t
r
a
n
s
L
t
r
a
n
s
\lambda_{trans}\mathcal{L}_{trans}
λtransLtrans,其中
λ
s
u
b
_
c
l
s
\lambda_{sub\_cls}
λsub_cls,
λ
r
o
t
\lambda_{rot}
λrot,
λ
t
r
a
n
s
\lambda_{trans}
λtrans是用来平衡他们对应损失的超参数。
Sub-category classification loss
L
s
u
b
_
c
l
s
\mathcal{L}_{sub\_cls}
Lsub_cls。Sub_category 代表车辆库中较详细的类别:e.g. Audi-A6 ,BMW-530,Benze-ML500,etc 为了平衡训练图像中不经常出现的车辆的情况,采用加权交叉熵进行分类损失,加权交叉熵被用来子类分类损失。
Rotation loss
L
r
o
t
\mathcal{L}_{rot}
Lrot 。在文章中,作者使用四元数来表示方向信息。当然,四元数来表示信息是存在一个问题的,即四元数 q 和 -q 表示相同的旋转,因为(来自每个半球的)两个惟一值映射到一个旋转。为了解决这个问题,作者将所有四元数限制在一个半球上,这样每个旋转都有一个唯一的值。因此,对于旋转头,给定ground truth唯一四元数q和预测的 -q,旋转的损失被定义为:
回归范数
∣
∣
∣
∣
γ
||||_{\gamma}
∣∣∣∣γ是欧氏空间回归的一个重要选择。典型的,深度学习模型使用
L
1
=
∣
∣
∣
∣
1
L_{1}=||||_{1}
L1=∣∣∣∣1或
L
2
=
∣
∣
∣
∣
2
L_{2}=||||_{2}
L2=∣∣∣∣2。用本文使用的数据集,作者发现
L
1
L_{1}
L1泛型表现的更好:误差不随幅值的平方增加,也不使较大的残差过度衰减。
Translation loss
L
t
r
a
n
s
\mathcal{L}_{trans}
Ltrans. 用世界单位代替像素单位回归平移向量,稳定了损失。被检测对象的变换使用2D bounding box在像素空间中的中心,高和宽
u
p
u_{p}
up,
υ
p
\upsilon_{p}
υp,
h
p
h_{p}
hp,
w
p
w_{p}
wp 和输出他们在世界空间中对应的
u
w
u_{w}
uw,
υ
w
\upsilon_{w}
υw,
h
w
h_{w}
hw,
w
w
w_{w}
ww:
其中相机的内在的标定矩阵是【
f
x
,
0
,
c
x
;
0
,
f
y
,
c
y
;
0
,
0
,
1
f_x,0,c_x;0,f_y,c_y;0,0,1
fx,0,cx;0,fy,cy;0,0,1】。
采用Huber loss来描述平移估计中的损失:给定ground truth 3维的平移矩阵t 和预测的
t
~
\widetilde{t}
t
,平移损失是:
其中超参数
δ
\delta
δ控制异常值的边界。如果
δ
\delta
δ设置为1,它就变成了smooth-L1 损失。在这篇论文中,
δ
\delta
δ被设置为2.8,作为平移估计截止的阈值。
3. Weighted Non-local neighbor embedding
这是本文的另一个创新点, 加权的non-local block。其意图是为了获取检测到的感兴趣物体之间的空间依赖。相邻对象之间的依赖关系将有助于网络对6DoF姿态估计进行整体调整,而不是单独处理它们。例如,在同一车道上,相邻的车几乎会沿着相同的方向行驶,并保持一定的距离。使用加权的non-local操作有几个优点:
(i)non-local 操作通过计算任意两个位置之间的交互来直接捕获长期的依赖,而不管它们的位置距离。
(ii)non-loacl操作维持可变的输入大小,并且可以轻松地与其他操作结合使用。
(iii)提出的加权操作使得将输出映射与自我注意机制相关联成为可能,从而获得更好的可解释性。
non-local操作作为一个有效的和通用的组件捕获与深度神经网络的长期依赖。non-local操作维持可变的输入大小。直观地,一个non-local操作将一个位置的响应计算为输入特征图中所有位置的特征的加权和。将深度神经网络中的一般non-local操作定义为:
对于non-local并没有什么理解,单纯的从公式和这个论文中来看,应该是
C
(
x
)
C(x)
C(x)做一个标准化;
f
(
x
i
,
x
j
)
f(x_i, x_j)
f(xi,xj)计算像素间的相关性,作为一个加权系数;
g
(
x
j
)
g(x_j)
g(xj)对输入feature做语义转换(让算法自己训练这个操作),并经过加权系数得到第 i 位置的特征,这个特征融合了每个位置的相关性。
这个non-local models对于
f
f
f和
g
g
g的选择来说是不敏感的。为了简单和快速的计算,我们考虑
g
g
g的线性嵌入的形式:
g
(
x
j
)
=
W
g
x
j
g(x_j)=W_gx_j
g(xj)=Wgxj,其中
W
j
W_j
Wj是一个要学习的权重矩阵。对函数
f
f
f以嵌入高斯函数形式实现:
f
(
x
i
,
x
j
)
f(x_i,x_j)
f(xi,xj)=
e
θ
(
x
i
)
ϕ
(
x
j
)
e^{\theta(x_i)\phi(x_j)}
eθ(xi)ϕ(xj),其中
θ
(
x
i
)
=
W
θ
x
i
\theta(x_i)=W_{\theta}x_i
θ(xi)=Wθxi 和
ϕ
(
x
j
)
=
W
ϕ
x
j
\phi(x_j)=W_{\phi}x_j
ϕ(xj)=Wϕxj是两个嵌入。
C
(
x
)
=
∑
∀
j
f
(
x
i
,
x
j
)
C(x)=\sum_{{\forall}_j}f(x_i,x_j)
C(x)=∑∀jf(xi,xj)。最近提出的self-attention【36】是嵌入高斯版本中non-local操作的一个特例:定给定
i
i
i时,
1
C
(
x
)
∑
f
(
x
i
.
x
j
)
\frac{1}{C(x)}\sum{f(x_i.x_j)}
C(x)1∑f(xi.xj)变成了沿维度
j
j
j进行softmax的计算。所以我们有
y
=
s
o
f
t
m
a
x
(
x
T
W
θ
T
W
ϕ
x
)
g
(
x
)
y=softmax(x^TW^T_{\theta}W_{\phi}x)g(x)
y=softmax(xTWθTWϕx)g(x)。
但是,我们发现当输入的维度
d
d
d(对于
H
×
W
×
C
H \times W \times C
H×W×C的特征图来说,C是通道数,
d
=
H
×
W
d=H \times W
d=H×W)变大时,点积的大小变大,将softmax函数推到具有极端梯度的区域。结果,
y
y
y也将有一个极端的值。为了抵消这个影响,我们提出了使用weighted non-local operation 来计算self-attenation map
A
\mathcal{A}
A:
所以
y
=
A
g
(
x
)
y=\mathcal{A}g(x)
y=Ag(x)。weighted non-local操作将点积注意方差缩放到单元1,因此不会将softmax操作推到极端、饱和的值。相似的技术也在【16】中被采用,在何处提高最终的softmax的temperature以获得软目标。直观地,这个加权的操作有相同的表达式的形式。但是,在softmax中合适的temperature很难确定。要不,我们将点积输入方差缩放到单元1。因此,softmax操作后的输出映射将以一种自我注意公式的形式提供一个合理的解释。
注:但是关于non-local block 只通过论文是没有很详细的介绍的,需要去结合一下代码,其他的相关的文献来看一下这个模块。自我感觉它类似于attention,用来捕捉长距离像素之间的信息,最终实现每个像素的全局感受野。并且通过不同的操作,还可以得到不同空间、时间、通道的像素之间的信息相关性。