失踪人口回归 😃. 如果觉得本文对您有所帮助的话,可以给我的github点个赞呀~本人有空会更新一些视频行人再识别的相关资料,比如代码注释、论文翻译等等。
github:https://github.com/AsuradaYuci/awesome_video_person_reid
目录
1.Learning Multi-Granular Hypergraphs for Video-Based Person Re-Identification
CVPR2020关于video reid的有3篇,性能都有较大幅度的提升,其中2篇是基于图(graph), 这篇是其中一篇,学习多粒度超图(MGH)。
视频行人再识别是计算机视觉领域的一个重要研究主题。解决这个具有挑战性任务的关键在于:在视频序列中同时利用空间和时间线索。
在本文中,提出了一个新颖的基于图(Graph)的网络框架,多粒度超图(Multi-Granular Hypergraph(MGH)),通过在多个粒度方面,对时空依赖性进行建模,来追求更好的表征能力。
具体地,在视频序列中,使用不同层次的部分特征(分part)来构建具有不同空间粒度的超图。在每个超图中,连接跨不同时间范围的一系列图节点的超边(hyperedges),捕获不同的时间粒度。
最后,通过互信息最小化(mutual information minimization),学习多粒度的更多样化图层次的表征,进一步增强整体的视频表征。
2.方法:多粒度超图的学习
整体的网络框架如图所示:
2.1多粒度特征提取
给定一个包含T帧的图象序列 I I I={ I 1 , I 2 , . . . , I T I_1,I_2,...,I_T I1,I2,...,IT},使用一个CNN网络(Resnet50)来提取一个单独的特征图: F i = C N N ( I i ) , i = 1 , . . . , T ( 1 ) F_i=CNN(I_i),i=1,...,T \qquad \qquad \qquad(1) Fi=CNN(Ii),i=1,...,T(1)
式中,
F
i
F_i
Fi是一个维度为
C
∗
H
∗
W
C*H*W
C∗H∗W的三维张量(C是通道数,H和W分别为特征图的高度和宽度)。接着将这个特征图进行水平分割,分割成
p
∈
p\in
p∈{1, 2, 4, 8}(类似于PCB),对分割后的特征图进行平均池化操作,构建part-level的特征向量。
整个序列生成
N
p
=
T
∗
p
N_p=T*p
Np=T∗p个part-level的特征, part-level的特征定义为
h
0
=
h^0=
h0={
h
1
0
,
h
2
0
,
.
.
.
,
h
N
p
0
h_1^0, h_2^0,...,h_{N_p}^0
h10,h20,...,hNp0}。如上图所示,在每一个视频帧中,第一个粒度包含一个全局特征向量,而第二和第三个粒度则包含2个和4个的part-level的特征。
2.2多粒度超图
在提取每一帧的初始全局和部分特征(初始节点特征node feature)之后,下一步是通过学习不同节点之间的相关性,来更新节点特征。为了生成可靠的表征,必须同时考虑各个特征的空间和时间相关性。为了探索序列中的空间和时间依赖性,HGNNs允许节点通过图中的消息传递与其邻居进行通信。与标准图模型相比,超图(hypergraphs)可以对涉及多个节点的高阶相关性进行建模,这更适合于对序列中的多粒度相关性进行建模。
超图的构建:
我们提出通过构建一系列的超图
G
=
G=
G={
G
p
G_p
Gp}
p
∈
{
1
,
2
,
4
,
8
}
_{p\in\{1,2,4,8\}}
p∈{1,2,4,8}来捕获时空依赖。这里每个超图对应一个特定的空间粒度。具体来说,
G
p
=
(
V
p
,
ε
p
)
G_p=(V_p,\varepsilon_p)
Gp=(Vp,εp)由
N
p
N_p
Np个顶点
V
p
V_p
Vp和一系列超边
ε
p
\varepsilon_p
εp组成。这里我们利用
v
i
∈
V
p
v_i\in V_p
vi∈Vp,
i
∈
{
1
,
.
.
.
,
N
p
}
i\in \{1,...,N_p\}
i∈{1,...,Np}来表示图节点。我们定义一系列的超边来建模超图中的短时和长时相关性。如果要学习短期相关性,一个超边仅与时间上相邻的特征相连。通过链接不同时间长度的特征,超边对中长期的相关性进行建模。具体而言,对于每个图节点
v
i
v_i
vi,根据节点之间的特征相似度,我们可以找到这个节点在特定时间范围内的K个最近邻。然后,我们用一个超边将这
K
+
1
K+1
K+1个节点连接起来.
e
i
t
=
{
v
i
,
∀
v
j
∈
N
K
(
v
i
)
}
,
s
.
t
.
∣
v
i
−
v
j
∣
≤
T
t
(
2
)
e_{it}=\{v_i, \forall{v_j}\in{N_K(v_i)}\},s.t.|v_i-v_j|\le{T_t}\qquad \qquad \qquad(2)
eit={vi,∀vj∈NK(vi)},s.t.∣vi−vj∣≤Tt(2)
式中,
N
K
(
)
N_K()
NK()是包含前K个近邻的邻居集,
∣
∗
∣
|*|
∣∗∣表示序列中顶点之间的时间距离,
T
t
T_t
Tt是时间范围的阈值。在论文中,采用3个阈值(例如
T
1
,
T
2
,
T
3
T_1,T_2,T_3
T1,T2,T3)来进行短时,中时,长时的依赖建模。
超边的传播:
如上图所示,基于超图,我们设计了一个超图神经网络(HGNN)来传播图信息和更新节点特征。给定一个节点
v
i
v_i
vi,使用
A
d
j
(
v
i
)
=
{
e
1
,
e
2
,
.
.
.
,
e
k
i
}
Adj(v_i)=\{e_1,e_2,...,e_{ki}\}
Adj(vi)={e1,e2,...,eki}来表示包含该节点的所有超边.。这些超边包含与
v
i
v_i
vi节点相关性最高的节点。然后在超边上定义一个聚合操作,以捕获特征相关性。
具体地,我们将除节点
v
i
v_i
vi以外的超边中的所有节点特征进行平均操作,作为超边的特征.
m
i
k
l
=
∑
j
≠
i
v
j
∈
e
k
h
j
l
−
1
,
∀
e
k
∈
A
d
j
(
v
i
)
(
3
)
m_{ik}^{l}=\sum_{j\neq i}^{v_j\in e_k}h_j^{l-1}, \forall e_k\in Adj(v_i)\qquad \qquad \qquad(3)
mikl=j=i∑vj∈ekhjl−1,∀ek∈Adj(vi)(3)
式中,
h
j
l
−
1
h_j^{l-1}
hjl−1表示HGNN第
l
−
1
l-1
l−1层的节点特征
v
j
v_j
vj。然后,通过计算节点特征和超边特征之间的相关性,来评估每个超边的重要性。
z
i
k
=
ϕ
(
h
i
l
−
1
,
m
i
k
l
)
(
4
)
z_{ik}=\phi(h_i^{l-1},m_{ik}^l)\qquad \qquad \qquad(4)
zik=ϕ(hil−1,mikl)(4)
式中,
ϕ
\phi
ϕ用于计算特征之间的相似性(本文采用余弦距离).然后利用Softmax函数对重要性权重进行归一化,接着聚合超边信息。
γ
i
k
=
e
x
p
(
z
i
k
)
∑
j
e
x
p
(
z
i
k
)
(
5
)
\gamma_{ik}=\frac{exp(z_{ik})}{\sum_{j}exp(z_{ik})}\qquad \qquad \qquad(5)
γik=∑jexp(zik)exp(zik)(5)
n
i
l
=
∑
k
γ
i
k
m
i
k
l
(
6
)
n_i^l=\sum_{k}\gamma_{ik}m_{ik}^l\qquad \qquad \qquad(6)
nil=k∑γikmikl(6)
获得超边的信息之后,通过concat之前的节点特征和超边特征信息,使用一个全连接层来更新节点特征.
h
i
l
=
σ
(
W
l
[
h
i
l
−
1
,
n
i
l
]
)
(
7
)
h_i^l=\sigma(W^l[h_i^{l-1},n_i^l])\qquad \qquad \qquad(7)
hil=σ(Wl[hil−1,nil])(7)
式中,
W
l
W^l
Wl是一个权重矩阵(FC),
σ
\sigma
σ是一个激活函数。重复上述特征更新步骤L轮,获得一系列的特征节点输出
O
p
=
{
h
i
L
}
,
∀
e
k
∈
A
d
j
(
v
i
)
O_p=\{h_i^L\},\forall e_k\in Adj(v_i)
Op={hiL},∀ek∈Adj(vi).
注意力超图特征聚合:
获得每个超图(空间粒度)的最终更新的节点特征之后,我们需要将每个超图的节点(part-level)特征聚合为图(视频)层次的表征。在选择聚合方案时,我们应该考虑到,不同节点的重要性是不同的(比如,遮挡和背景部分的节点的重要性肯定低于行人身体部位),因此有必要设计一个特定的注意力机制来解决这一问题。
提出了一个注意力模块,为每一个超图生成节点层次的注意力,以选择最具区分性的part-level特征。对于每一个超图,根据以下公式计算节点的注意力
α
p
=
{
α
1
,
.
.
.
,
α
N
p
}
:
\alpha_p=\{\alpha_1, ...,\alpha_{N_{p}}\}:
αp={α1,...,αNp}:
u
i
=
W
u
h
i
L
u_i=W_uh_i^L
ui=WuhiL
α
i
=
e
x
p
(
u
i
)
∑
j
e
x
p
(
u
j
)
\alpha_i=\frac{exp(u_i)}{\sum_jexp(u_j)}
αi=∑jexp(uj)exp(ui)
式中,
W
u
W_u
Wu是一个权重矩阵.然后,对节点特征进行加权求和得到超图的特征.
h
p
=
∑
v
i
∈
V
p
α
i
h
i
L
h_p=\sum_{v_i\in V_p}\alpha_ih_i^L
hp=vi∈Vp∑αihiL
3.损失函数
文章除了采用三元组损失函数和
S
o
f
t
m
a
x
Softmax
Softmax交叉熵损失函数来训练网络,为了得到多样化的水平分割后的图特征,还引入了信息论中的最小化互信息损失函数。我们的目的是减少来自不同超图的特征之间的互信息,从而通过连接所有特征来增加最终视频表征的判别性。
定义拥有
p
p
p个空间分割的图层次特征为
H
p
=
{
h
p
i
}
i
=
1
N
c
H_p=\{h_p^i\}_{i=1}^{N_c}
Hp={hpi}i=1Nc,
N
c
N_c
Nc为训练集中的tracklets数目.互信息损失定义如下:
L
M
I
=
∑
p
,
q
∈
{
1
,
2
,
4
,
8
}
p
≠
q
I
(
H
p
,
H
q
)
L_{MI}=\sum_{p,q\in\{1,2,4,8\}}^{p\neq q}I(H_p, H_q)
LMI=p,q∈{1,2,4,8}∑p=qI(Hp,Hq)
式中,
I
I
I表示计算不同超图之间的互信息.
最终损失:
L
a
l
l
=
L
x
e
n
t
+
L
t
r
i
+
L
M
I
L_{all}=L_{xent}+L_{tri}+L_{MI}
Lall=Lxent+Ltri+LMI
4.结果
5.总结
视频行人再识别发展到现在,性能刷的越来越高,Mars数据集上mAP85.8是真的高,我虽然rank1也做到过90,但mAP最高83.9。不过这篇文章在小库上的性能并没有那么夸张。总的来说,发顶会的话,传统基于注意力那一套创新性好像不太够了(估计reviewer 看到attention这个词就索然无味了),所以目前也是比较难做的.这篇文章整了个图结构,其实还是注意力那一套,换了个名字,突出了创新性.最近很多基于图的工作(CVPR还有另一篇也是基于图的,感觉名字都差不多,哈哈),但开源代码很少,我也没复现过,有机会深入了解一下.硬拼performance不是一个好出路(机器得强,batch_size影响挺大的),找些新鲜的,做的人少的方向(遮挡reid,半监督,无监督)试试,也许是个不错的选择。
结语
最后打个广告,我收集了近几年的一些视频reid论文以及相应的代码,放在我的github中:[链接],欢迎大家star和fork,有空会继续更新的, 谢谢啦。