因为涉及到GCN里的内容,不懂的同学请自行去了解GCN的相关知识:Fourier Transform、Laplace Transform。
本人默认同学们都学过了。
如何有效地克服视觉上相似负样本的遮挡问题和视觉歧义问题仍然是一个非常具有挑战性的问题。另一方面,观察到视频的不同帧之间可以提供互补信息,行人的结构信息可以为外观特征提供额外的区分线索。因此,对不同帧之间的时间关系和帧内的空间的关系建模,有可能解决上述问题。针对这个,作者提出一个新的时空图卷积网络(STGCN)。STGCN包括两个GCN分支:空间分支、时间分支。空间分支提取人体的结构信息,时间分支从相邻帧中挖掘判别线索。通过联合优化这些分支,模型提取了与外观信息互补的鲁棒时空信息。
具体来说,通过连接不同帧的所有小块来构建图来建模时间关系,目的是在不同的小块之间提供互补信息,从而缓解遮挡和不对齐问题。另一方面,也考虑帧内的结构信息,通过构建视频中每一帧的patch图来提供外观的互补信息。最终提出时空图卷积网络spatial - temporal Graph Convolutional Network, STGCN,来同时对视频中patch的时空关系进行建模。
综上所述,作者的贡献如下:
1、利用GCN对一个框架内和跨框架内人体不同部位的潜在关系进行建模,为person ReID提供更具鉴别性个鲁棒性的信息。
2、提出一个统一框架,共同考虑时间个结构关系,并能够执行端到端训练。
网络结构如上图所示,最上层是时间分支,用于从相邻帧的小块中提取时间线索。中层是空间分支,通过对小块的空间关系建模。底层是全局分支,用于提取行人外观特征。
给定一个视频,表示为V = {I1,I2,……,IT},其中T为从视频中采样的帧数。对于每一帧,将主干模型提取的帧特征图表示为F,F = {F1,F2,FT},其中Fi为视频第i帧的feature map,Fi∈Rhxwxc,其中h、w、c分别表示高度、宽度和信道数。每个feature map Fi被水平分割为P个patch。然后对每个patch进行平均池化处理,每个patch feature 表示为xi。因此,对于一个有T帧的视频,patch的总数为N = T•P。表示该视频的patch为pi = 1,……,N,得到的patch特征向量为xi∈Rc,i=1,……,N。
简单来说,就是从输入的视频序列里选取T帧,使用Backbone对每一帧提取特征,将每一帧的特征进行水平分割,分割出P块,再进行Average Pooling,形成TxP个特征向量。每个特征向量看做Graph的一个节点V。
使用GCN来建模patch之间的关系。设G(V,E)为N个节点的构建patch图,节点vi∈V,边eij=(vi,vj)∈E,将每一个patch视为一个节点,用E中的边表示patch之间的关系。A∈Rnxn为邻接矩阵,其中每个元素表示patch的成对关系。
将图中每两个patch之间的两两关系表示为:
其中,φ是对原有patch特征的对称转换,φ可以表示为φ=wx。参数w是一个d×d维权重,可以通过反向传播学习。通过添加这样的变换,可以自适应地选择和学习帧内或不同帧之间不同面片的相关性。
这里可以理解为将上述TxP个特征向量,两两之间求出余弦相似度,这个相似度就作为两个节点之间的关系,即两个节点之间的边E。
然后,可以构建与G相关的邻接矩阵A∈Rnxn,它使GCN的关键组成部分,因为每个元素Aij都反映了节点xi和节点xj的关系。但考虑到以下两点:
1、对于邻接矩阵的每一行,所有的边值(即连接到patch i的边)之和应为1;
2、邻接矩阵的每个元素都是非负的,系数应该在(0,1)的范围内;
所以对邻接矩阵A的每一行进行归一化处理:
设A = A + In表示自环邻接矩阵,I∈Rnxn为单位矩阵,可以使用重归一化的技巧来近似拉普拉斯图:
最终可以得到图G(V,E)对应的邻接矩阵,以便进一步建模patch的结构和时间关系。
这里是构建归一化的拉普拉斯矩阵。这样GCN所需要的节点矩阵和拉普拉斯矩阵都具备了。
视频中不同帧的patch可以提供互补的信息,以缓解遮挡和噪音造成的问题。
在此模型中,时间GCN模型(TGCN)被设计用来捕获不同帧间patch之间的时间动态关系。
如上图所示,每个视频有N个patch,用所有的patch构建时间图Gt(Vt,Et),其中Vt={X1,X2,……,Xn},然后利用上边得到的邻接矩阵。
对于时间分支,在给定邻接矩阵的情况下,使用GCN来获取整个视频patch的时间关系。在实现中构建m层图卷积。针对第m层(1<=m<=M),图卷积执行:
式中Xm∈Rnxdm是m层所有patch的隐藏特征,dm为特征维度;X0∈Rnxd为CNN主干网络获得的初始patch特征;W(m)∈Rdmxdm为待学习的参数矩阵。在每一层图卷积之后,附加一层归一化层和一个LeakyReLU(负输入斜率α=0.1)。在实验中发现使用快捷连接会更加有效和稳定,
经过图卷积后,对于每个视频,时间GCN模块的输出为XM∈Rnt x dM。最后,对XM使用最大池化操作。因此,对于每个视频,得到其时间GCN特征:ft∈R1xdM,其中dM设置为2048。
为了提取时间信息,将所有节点以及边关系组成一个Graph进行图卷积,对输出进行Max pooling输出一个一维向量作为时间信息表示。
如上图所示,结构GCN模块(SGCN)与TGCN不同。
在SGCN中,首先使用GCN对视频中每一帧(即每一帧都有一个GCN)中有不同patch的空间关系进行建模。然后对视频帧的GCN特征进行融合,得到视频的内在结构特征。
具体来说,给定一个T帧的视频,第i个帧的GCN表示为Gs(Vs,Es),其中Vi.s={xi.1,xi.2,……,xi.p}(注意下标i表示第i帧,每一帧被分为p个path)。
与TGCN相似,利用上边的邻接矩阵公式得到每个Gs.i(Vs,Es)对应的邻接矩阵As.i;然后为第i个帧建立一个k层图卷积。对于第k个(1<=k<=K)图卷积层,其具体操作为:
其中Wk.i∈Rdkxdk,dk为feature的维度。对每个子GCN特征进行降维,最终GCN的输出为XK.i∈Rpx256;然后使用最大池化操作,将每帧的特征维度降为256.最后将视频的特征进行拼接,记为fs。
为了提取空间信息,对每一张图像都进行图卷积,分别输出一个一维向量,最后按时间顺序拼接起来作为空间信息表示。
模型由全局分支、时间分支和空间分支组成。全局分支为每个视频特征提取全局的外观特征。带有TGCN的时间分支在不同帧间建立patch的时间关系模型,用于学习时间信息,可以为其他patch提供互补信息。带有SGCN的空间分支来建模每一帧的空间关系,以提供结构信息。
采用批处理硬三重损失函数batch hard triplet loss和软最大交叉熵损失函数softmax cross-entropy loss对网络进行训练。
作者分别计算了三种类型特征的三重态巡视,
对于softmax交叉熵损失函数,将fglobal、ft、fs三种类型的特征串联起来作为最终特征,fall=[fglobal,ft,fs],其中[•]表示串联。最后利用fall计算softmax。
Loss function就是传统ReID最常用的Triplet和Softmax,只不过是将每一个分支的Triplet综合了起来。