GaitPart: Temporal Part-based Model for Gait Recognition
目录
论文信息:
Chao Fan, Yunjie Peng, Chunshui Cao, Xu Liu, Saihui Hou,
Jiannan Chi, Yongzhen Huang, Qing Li, Zhiqiang He
北京科技大学,北京航空航天大学,银河水滴,联想
CVPR 2020
摘要
这篇文章中假定人体的每个部分都需要一个特定时空表示,提出了基于部件的模型GaitPart,并从两个方面得到了提高性能的效果:一方面,卷积的新应用:Focal Convolution Layer,可以增强部件级别空间特征的细粒度学习;另一方面,提出了多个平行的微动作捕捉模块(Micro-motion Capture Module, MCM),对应于预定义的人体部分的GaitPart有几个平行的MCM。这里MCM是一种新颖的步态的时序建模方法,关注的是步态周期内的短时间特征,而不是冗余的长时间特征。在CASIA-B和OU-MVLP上都有SOTA的结果。
Intro
当前,大多数的步态识别方法都是把整个人体作为单元去建立时空表示,但我们可以看到人体不同部位具有明显的不同的视觉外观和运动模式。在最新的文献中,利用局部特征更有利于个体识别已经被证实。
当前的工作中,有使用人体部分特征提取 细粒度信息 的,但没有对时间序列进行显式建模;也有通过3D-CNN或者RNN利用 时序信息 的,但这种方法对于周期性的步态来说保留了不必要的长期序列约束,丧失了步态识别的灵活性。
本文提出的步态由两个部件构成:帧级别的部件特征提取器(FPFE)和微运动捕捉模块(MCM)。
- FPFE:应用了FConv,以加强细粒度学习的部件级别空间特征的学习,核心思想是使得顶层的卷积核能够专注于更局部的细节,直接利用细粒度的局部信息;
- MCM:局部的短距离时空特征(微运动模式)是最能区分周期性步态的特征,而远距离依赖则是冗长而低效的,本文提出了一种基于注意力机制的MCM模型来建模局部微运动特征并全局理解整个步态序列;
- 提出了一种新的基于时序基于部件的步态识别框架GaitPart,在CASIA-B和OU-MVLP上都进行了实验,并且在CASIA-B上做了消融实验来证明GaitPart各部件的有效性。
Related Work
(这里只记录了一部分看起来想法比较新颖的)
将特征图分割为条带并将其合并为列向量已经在行人重识别等领域得到了广泛的应用,这种方法忽略了空间对齐,假定每个列向量可以代表一个特定的人体部分。与行人重识别领域不同,文章认为基于部件的方式在应用到步态任务上时应该被设计为 部件互相依赖 的方式,因此GaitPart的参数在生成时空表示时是部件依赖的。因为在步态任务中人体的各部位在外观和运动模式上存在着显著差异,而行人重识别中人体的各部分可能具有相同的属性,比如颜色和纹理等。
GaitSet方法足够简洁有效,但没有明确地对时间变化进行建模。
所以GaitPart的核心在于 局部和短时间建模 。
Proposed Method
Pipeline
如图2所示,一组包含t帧的步态轮廓序列逐帧输入GaitPart中,FPFE用于提取每个帧
f
i
f_i
fi 的空间特征
F
i
F_i
Fi :
F
i
=
F
P
F
E
(
f
i
)
F_i=FPFE(f_i)
Fi=FPFE(fi)
这样可以得到一个特征图序列:
S
F
=
{
F
i
∣
i
=
1
,
…
,
t
}
S_F=\{F_i|i=1,…,t\}
SF={Fi∣i=1,…,t} ,
F
i
F_i
Fi 是一个三维的张量,包含通道数、高、宽三个维度。
之后经过一个水平池化(HP)模块,针对人体部分提取part-informed features,对于
F
i
F_i
Fi 的第j个部分,通过全局平均池化和全局最大池化下采样到
p
j
,
i
p_{j,i}
pj,i 中:
p
j
,
i
=
A
v
g
p
o
o
l
2
d
(
F
j
,
i
)
+
M
a
x
p
o
o
l
2
d
(
F
j
,
i
)
p_{j,i}=Avgpool2d(F_{j,i})+Maxpool2d(F_{j,i})
pj,i=Avgpool2d(Fj,i)+Maxpool2d(Fj,i)
这样就可以获得一个部件表示矩阵(PR-Matrix):
P
=
(
p
j
,
i
)
n
×
t
P=(p_{j,i})_{n\times t}
P=(pj,i)n×t ,每一行的特征可以表示为:
P
j
,
⋅
=
{
p
j
,
i
∣
i
=
1
,
…
,
t
}
P_{j,·}=\{p_{j,i}|i=1,…,t\}
Pj,⋅={pj,i∣i=1,…,t} ,之后将第j部分的时空特征进行聚合:
v
j
=
M
C
M
j
(
P
j
,
⋅
)
v_j=MCM_j(P_{j,·})
vj=MCMj(Pj,⋅)
共有n个平行的MCM,其参数都是独立的,组成了时序特征聚合器(TFA),之后使用几个独立的全连接层把TFA中提取的特征向量映射到度量空间中用于最后的身份识别。
Frame-level Part Feature Extractor(FPFE)
FPFE由三个块组成,每个块有两个FConv层。
如图3所示,FConv是卷积的一种新应用,可以先水平地将输入特征图分为几个部分,然后分别对每个部分进行常规卷积,之后将输出的特征图进行水平连接,作为FConv的最终输出。这样顶层的卷积核将比正常的更窄一些,就能使其更关注于这个部分的局部细节。设p为预定义的部分(即把原始图像划分成几个块),当p=1时,FConv就是一个普通的卷积层。
Temporal Feature Aggregator(TFA)
TFA由n个并行的MCM组成,MCM包括两个部分:微动作模板生成器(MTB)和时序池化层(TP),MTB被设计用于映射微动作特征向量。之后通过TP模块提取最显著的动作特征向量进行聚合,用于最后的身份识别。
MTB : 这里做的假设是将短距离时空表示(微动作特征)看做是周期步态最具有辨别力的特征,并且认为任何特定时刻的微动作模式都应该完全由其自身及其相邻帧所决定。令
R
(
p
i
,
r
)
=
{
p
k
∣
k
=
i
−
r
,
…
,
i
,
…
,
i
+
r
}
R(p_i,r)=\{p_k|k=i-r,…,i,…,i+r\}
R(pi,r)={pk∣k=i−r,…,i,…,i+r} 是由
p
i
p_i
pi 和与它相邻的r帧所组成的子序列,那么i时刻的微动作特征可以被定义为:
m
i
=
T
e
m
p
F
u
n
c
(
R
(
p
i
,
r
)
)
m_i=TempFunc(R(p_i,r))
mi=TempFunc(R(pi,r))
这步操作相当于是在进行一个
R
(
p
i
,
r
)
R(p_i,r)
R(pi,r) 子序列的压缩,MTB在时序维度上进行滑动,将相邻的2r+1维的列向量聚合为一个微运动特征向量。具体实现时使用的是平局池化和最大池化加和的方式,特征序列的表示如下:
S
m
=
A
v
g
p
o
o
l
1
d
(
S
p
)
+
M
a
x
p
o
o
l
1
d
(
S
P
)
S_m=Avgpool1d(S_p)+Maxpool1d(S_P)
Sm=Avgpool1d(Sp)+Maxpool1d(SP)
同时,为了获得更有区分度的特征,还引入了通道注意力机制,在每个时间通过一个以为卷积层对特征向量进行重新加权:
S
l
o
g
i
t
s
=
C
o
n
v
1
d
N
e
t
(
S
p
)
S
M
r
e
=
S
m
⋅
S
i
g
m
o
i
d
(
S
l
o
g
i
t
s
)
S_{logits}=Conv1dNet(S_p)\\ S_M^{re}=S_m \cdot Sigmoid(S_{logits})
Slogits=Conv1dNet(Sp)SMre=Sm⋅Sigmoid(Slogits)
在实际应用中,有两个平行的MTB,在MCM中使用不同的窗口大小,目的是融合序列维上的多尺度信息,从而收集到更丰富的微运动特征。
TP :这个模块也是步态时序聚合的底层逻辑,核心思想是在一个完整的步态周期之后不会产生信息增益。令
S
m
r
e
(
T
)
=
{
m
i
r
e
∣
i
=
1
,
…
,
T
}
S_m^{re}(T)=\{m_i^{re}|i=1,…,T\}
Smre(T)={mire∣i=1,…,T} 代表一个完整步态周期的微运动特征序列,则TP应满足:
F
o
r
∀
t
>
T
,
∃
T
P
(
S
m
r
e
(
t
)
)
=
T
P
(
S
m
r
e
(
T
)
)
For \ \forall t>T, \ \exist \ TP(S_m^{re}(t))=TP(S_m^{re}(T))
For ∀t>T, ∃ TP(Smre(t))=TP(Smre(T))
使用的方法是mean或max.
- mean:(对于假设步态是一个周期运动来说,当且仅当t是T的整数倍时,下面两个式子相等,这显然不太适合于现实应用,因为真实世界的视频长度是不确定的)
T P ( S m r e ( t ) ) = ∑ 1 t m i r e t T P ( S m r e ( T ) ) = ∑ 1 T m i r e T TP(S_m^{re}(t))=\frac{\sum^t_1 m^{re}_i}{t} \\ TP(S_m^{re}(T))=\frac{\sum^T_1 m^{re}_i}{T} TP(Smre(t))=t∑1tmireTP(Smre(T))=T∑1Tmire
- max:(对于假设步态是一个周期运动来说,下面两个式子无论何时都相等)
T P ( S m r e ( t ) ) = m a x ( m 1 r e , … , m T r e , … , m t r e ) T P ( S m r e ( t ) ) = m a x ( m 1 r e , … , m T r e ) TP(S_m^{re}(t))=max(m^{re}_1,…,m^{re}_T,…,m^{re}_t) \\ TP(S_m^{re}(t))=max(m^{re}_1,…,m^{re}_T) TP(Smre(t))=max(m1re,…,mTre,…,mtre)TP(Smre(t))=max(m1re,…,mTre)
实验
消融实验
(只记录了这里作者的消融实验逻辑)
-
FConv有效
-
在底层使用FConv效果并不好,可能是因为相邻部分之间的边缘和轮廓信息被破坏
-
顶层神经元的不同感受野可以适应不同的行走条件
-
两个MTB同时使用效果最好
-
注意力机制很有必要
-
TP阶段使用MAX效果更好
作者在消融实验里还有一个很有趣的点,他做了一个步态序列的打乱操作,但精度的退化非常小。