如果觉得本文对您有所帮助的话,可以给我的github点个赞呀~本人有空会更新一些视频行人再识别的相关资料,比如代码注释、论文翻译等等。
github:https://github.com/AsuradaYuci/awesome_video_person_reid
1.Video-based Person Re-identification via 3D-Convolutional Networks and Non-local Attention
本文以这篇18年reid文章[论文链接]为例,介绍下3D卷积神经网络用于视频行人再识别的情况。
2.引言
对于视频ReID而言,从一个视频段中进行特征聚类是一个关键步骤。目前解决该问题的方法主要是最大池化/平均时间池化,或者RNNs加上注意力机制。如图所示:
(1).特征聚类方法
采用平均或最大池化方法来聚合特征,它们没有充分利用时间依赖性信息。
(2).基于RNN的方法
聚合视频帧中的时间信息,存在的缺点是:这种平等对待所有视频帧的方法,不能学习到最具有判别力的帧。
(3).时间注意力方法
目的是提取有判别力的帧。
但是这些方法不能同时处理时间依赖性和空间错位问题。受到视频动作识别相关研究的启发,文章提出了一种方法来聚合时间依赖性特征并同时使用注意力机制来解决空间错位问题。整体架构如下图所示。
本文的创新点总结如下:
a)文章首先提出在视频序列上使用3D卷积,而不是跨帧使用2D卷积,来提取空间-时间特征的聚合表示,其能够发现像素级信息和视频段之间的相关性(不管你们信不信,反正我信了: ))。
b)作为时空关注策略的非局部块(Non-local block)明确地解决了变形图像的未对准问题。同时通过时空关注方案从视频段中学习聚合特征。
c)空间注意力和时间注意力被整合到端到端3D卷积模型中。
3.网络整体流程图
1)直接将整个视频段作为输入,输出是一个d维的特征向量
f
c
f_c
fc
2)与此同时,非局部块被嵌入进3D残差块中,用以聚合空间和时间特征。
3)一个平均池化层,在其后面跟着一个瓶颈层,用于加速训练和提高性能。
4)一个全连接层被放置在网络的最上层,用于分类(学习身份特征)。
3.1具体方法
整个系统可以分为两个重要部分:一部分为通过3D ResNet从视频段中提取时空特征;另一部分是通过非局部块整合时空特征。
一个视频首先被分成连续的不重叠的视频段{
c
k
c_k
ck},每个视频段包含N帧图片:
c
k
=
{
x
t
∣
x
t
∈
R
H
∗
W
}
t
=
1
N
c_k=\{x_t |x_t \in R^{H*W}\}_{t=1}^{N}
ck={xt∣xt∈RH∗W}t=1N
式中N是视频段
c
k
c_k
ck的长度,H,W分别是图像的高度和宽度。
如上图所示,本文的方法将整个视频段作为输入,输出一个d维的特征向量
f
c
k
f_{ck}
fck。与此同时,非局部块嵌入到3D残差块中,用于聚合时间和空间特征。最后一个平均池化层,在其后面跟着一个瓶颈层,用于加速训练和提高性能。一个全连接层被放置在网络的最上层,用于分类(学习身份特征)。
具有标签平滑的
S
o
f
t
m
a
x
Softmax
Softmax交叉熵损失函数,建立在全连接层之上,以端到端的方式监督整个网络的训练。于此同时,在度量学习阶段,采用Batch Hard triplet loss。最后的测试阶段,视频段
c
i
c_i
ci和
c
j
c_j
cj的相似度可以由
L
2
L_2
L2距离或别的距离函数来计算。
3.2时间上可分离的膨胀3D卷积
在2D卷积神经网络中,卷积应用在2D特征图中,只计算空间维度的特征。当应用到基于视频的问题时,我们希望卷积可以从多个连续帧中捕获时间信息===》这就引入了3D卷积。
将多个连续帧堆叠在一起形成的立方体,在其上应用3D卷积核,来实现3D卷积。第i层,第j个特征图的(
x
,
y
,
z
x, y, z
x,y,z)位置处的值为:
V
i
j
x
y
z
=
b
i
j
+
∑
m
∑
p
=
0
P
i
−
1
∑
q
=
0
Q
i
−
1
∑
r
=
0
R
i
−
1
W
i
j
m
p
q
r
V
(
i
−
1
)
m
(
x
+
p
)
(
y
+
q
)
(
z
+
r
)
V_{ij}^{xyz}=b_{ij}+\sum_m\sum_{p=0}^{P_{i}-1}\sum_{q=0}^{Q_i-1}\sum_{r=0}^{R_i-1}W_{ijm}^{pqr}V_{(i-1)m}^{(x+p)(y+q)(z+r)}
Vijxyz=bij+m∑p=0∑Pi−1q=0∑Qi−1r=0∑Ri−1WijmpqrV(i−1)m(x+p)(y+q)(z+r)
式中,
P
i
P_i
Pi和
Q
i
Q_i
Qi是卷积核的高度和宽度,
R
i
R_i
Ri是3D卷积核沿着时间维度的大小。
W
i
j
m
p
q
r
W_{ijm}^{pqr}
Wijmpqr是连接到前一层
V
i
−
1
V_{i-1}
Vi−1中,第m个特征图中,核的第(
p
,
q
,
r
p,q,r
p,q,r)值;
b
i
j
b_{ij}
bij是偏置。
3D卷积网络由于其具有大量的参数因而难以优化,为了解决这个问题,我们使用2D的ResNet50卷积核膨胀,即额外加上一个时间维度。将2D的
k
×
k
k×k
k×k卷积核乘以跨度t,使之膨胀为一个3D的
t
×
k
×
k
t×k×k
t×k×k的卷积核。
采用imageNet上预训练过的2D卷积核,来初始化所有的3D卷积核,
t
×
k
×
k
t×k×k
t×k×k内核中的每个t平面由预训练的
k
×
k
k×k
k×k权重初始化,通过
1
t
\frac{1}{t}
t1重新调整尺寸。这种时间上可分离的卷积,可以提高各种视频理解任务的性能。
我们用两个连续的卷积层代替3D卷积:首先1D卷积表示时间轴,跟在它后面的是一个2D的卷积层,用于学习空间特征。其结构在残差块中体现。
在Kinetics上进行3D ResNet的预训练,以增强模型的泛化能力。用行人id输出代替最后的分类层。整个模型将T连续帧作为输入,最后分类层的前一层的输出被看作是视频段身份的表征。
3.3 Non-Local 注意力块
非局部注意力块用于捕获空间和时间中的长期依赖性,和处理遮挡和未对齐问题。在深度神经网络中的通用非局部块,可以定义为
y
i
=
1
C
(
x
)
∑
∀
j
f
(
x
i
,
x
j
)
g
(
x
j
)
y_i=\frac{1}{C(x)}\sum_{\forall{j}}f(x_i,x_j)g(x_j)
yi=C(x)1∀j∑f(xi,xj)g(xj)
式中
x
i
x_i
xi是输入信号的位置(图像,序列,视频,通常是他们的特征),
y
i
y_i
yi是对应位置的相同尺寸输出,其响应由所有可能的输入位置
x
j
x_j
xj计算得到。二元函数
f
(
.
)
f(.)
f(.)计算
x
i
x_i
xi与所有
x
j
x_j
xj的信息关联程度,这表示位置i在输出特征中,和输入信息中所有位置
x
j
x_j
xj的注意力分数。一元函数
g
(
.
)
g(.)
g(.)是计算
x
j
x_j
xj点信号对i的影响。
C
(
x
)
C(x)
C(x)是一个归一化常数。
选择
f
(
.
)
f(.)
f(.)为嵌入高斯函数:
f
(
x
i
,
x
j
)
=
e
θ
(
x
i
)
T
ϕ
(
x
j
)
f(x_i,x_j)=e^{\theta(xi)^{T}\phi(xj)}
f(xi,xj)=eθ(xi)Tϕ(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,W均为待学习的参数。进一步的,将
C
(
x
)
C(x)
C(x)设置为一个softmax操作,可以得到一个自注意力形式:
y
=
∑
∀
j
e
θ
(
x
i
)
T
ϕ
(
x
j
)
∑
∀
j
e
θ
(
x
i
)
T
ϕ
(
x
j
)
g
(
x
j
)
y=\sum_{\forall j}\frac{e^{\theta(xi)^{T}\phi(xj)}}{\sum_{\forall j}e^{\theta(xi)^{T}\phi(xj)}}g(x_j)
y=∀j∑∑∀jeθ(xi)Tϕ(xj)eθ(xi)Tϕ(xj)g(xj)
非局部块定义为:
z
i
=
W
z
y
i
+
x
i
z_i=W_{z}y_{i}+x_i
zi=Wzyi+xi
非局部操作被包装成非局部块,然后嵌入到深度神经网络的前面或后面。从式中可以看出,非局部块的输出并没有替代输入,而是和原输入相加,形成一个残差结构。我们可以将一个新的非局部块插入到任何预先训练的模型中,而不会破坏其初始行为。这可以构建一个结合全局和局部信息的更丰富的层次结构。
4.损失函数
文章采用三元组损失函数和具有标签平滑的 S o f t m a x Softmax Softmax交叉熵损失函数来训练网络。对于三元组损失,随机选择P个身份,为每个身份随机采样K个视频段,每个视频段包含t帧。在一个批次中,共有P×K个视频段;三元组损失定义如下:
S o f t m a x Softmax Softmax交叉熵损失函数:鼓励网络正确地预测PK视频段的ID。
标签平滑的 S o f t m a x Softmax Softmax交叉熵损失函数:
最终损失:
5.结果
Mars数据集:
PRID2011,iLIDS-VID数据集:
Non-local Block的作用示意图(不懂怎么获得的):
6.总结
视频行人再识别的难点还是在如何将一系列的图像层次特征聚合成一个视频片段层次的特征。文章中提出直接将视频段作为输入,采用3D卷积神经网络,一步到位同时提取空间和时间信息。(这里就有个疑惑了,如何证明3D卷积能提取时间信息?)最近很多工作都在使用Non-Local Block,本文也是ReID工作中首次引入非局部块,从实验结果来看Non-local还是有效果的。与最近的论文结果相比的话,这篇18年文章的结果还是不够好的。但最近好像没有基于3D卷积来做的,如果大家有兴趣的话(想水论文的话),可以试一试。总而言之,时间建模方法仍然值得我们去探索。
结语
最后打个广告,我收集了近几年的一些视频reid论文以及相应的代码,放在我的github中:[链接],欢迎大家star和fork,有空会继续更新的, 谢谢啦。