【行人重识别】Part-Aligned Bilinear Representations for Person Re-identification论文阅读

版权声明:转载请注明出处 http://blog.csdn.net/TwT520Ly https://blog.csdn.net/TwT520Ly/article/details/80982759

Part-Aligned Bilinear Representations for Person Re-identification



0 论文简介

该论文从整体上看,主要就是采用了一个two-stream的网络结构,对行人进行重识别。

1 论文主要技术

1.1 网络结构

这里写图片描述

对于一张输入的图片,同时在两个分支中计算。第一个分支用于提取Appearance map,也就是人体的表面表征图。第二个分支用于提取Part map,也就是人的肢体关键点的表征图。对于表征图,一种直观的看法就是一种热力图,表明该位置的置信度。
在两个分支中分别计算后,会得到两组特征图,分别是AP,然后将这些特征图并联Bilinear pooling,得到特征向量f,最后采用l2正则化进行normalization得到输出结果。
对于网络结构,第一个分支采用GoogleNet-V1结构,第二个分支采用OpenPose的前三个stage
本文提出了一个双线性池化层。对于输出的特征图A与特征图P,先进行双线性转换,然后再进行空间全局池化。对于池化层没有太多区别,主要就是对于一个矩形范围内的所有输出进行平均池化。主要的改变在与将 p x y 向量与 a x y 向量采用叉乘方式进行融合。公式如下:

f x y = v e c ( a x y p x y ) f = p o o l i n g x y { f x y } = 1 S x y f x y

此时已经得到了融合后的特征图,再进行一次归一化处理。
f ~ = f | | f | | 2

联立上面的公式:

f ~ x y = v e c ( a ~ x y p ~ x y ) a ~ x y = a x y | | f | | 2 p ~ x y = p x y | | f | | 2 f ~ = 1 S x y f ~ x y

可视化效果:
这里写图片描述

1.2 损失函数

损失函数采用三元损失函数进行训练,对于一个人体分别使用 I q 表示查询数据, I p 表示正样本数据, I n 表示负样本数据。 ( I q , I p ) 表示是一个相同身份的人,而 ( I q , I n ) 表示不同身份的人。对于样本分别定义为: f ~ q f ~ p f ~ n 。三元损失可以定义为下面:

t r i p l e t ( f ~ q , f ~ p , f ~ n ) = m a x ( m + s i m ( f ~ q , f ~ n ) s i m ( f ~ q , f ~ p ) , 0 ) s i m ( x , y ) =< x , y > L = 1 | T | ( I q , I p , I n ) T t r i p l e t ( f ~ q , f ~ p , f ~ n )

其中 m 是一个平衡系数,设置为0.2。

1.3 计算相似度

对于输出结果的近似度,可以分解为每一个区域内部的近似度,也就是遍历每一个像素位置。

s i m I ( I , I ) =< f ~ , f ~ >= 1 S 2 < x y f ~ x y , x y f ~ x y > = 1 S 2 x y x y < f ~ x y , f ~ x y > = 1 S 2 x y x y s i m ( f ~ x y , f ~ x y )

两张图的S区域,共有S*S中组合方式,并不是对应计算。于是对于一个区域S,可以转换为特征向量的近似度,但是特征向量是根据A网络和P网络计算出来的特征图经过融合归一化得到的。所以可以再次进行下一步的分解。

s i m ( f ~ x y , f ~ x y ) =< v e c ( a ~ x y p ~ x y ) , v e c ( a ~ x y p ~ x y ) > =< a ~ x y , a ~ x y >< p ~ x y , p ~ x y > = s i m ( a ~ x y , a ~ x y ) s i m ( p ~ x y , p ~ x y )

1.4 对比普通模型

普通算法没有关键点预测这个分支,无法映射出关键点的近似度。 p x y 表示 ( x , y ) 位置是否是关键点。

p x y = [ δ [ ( x , y ) R 1 ] , . . . , δ [ ( x , y ) R k ] ]

其中 R k 表示第k个关键点的bbox。
δ [ x ] = 1   i f   x   i s   t r u e   o t h e r w i s e   0

2 实验与分析

2.1 训练过程

对于该双分支的网络结构,实际训练的过程中仅仅只对一个网络流分支进行梯度传播。训练过程只需要人体重识别数据集而不需要人体关键点数据集。在识别人体关键点的网络中使用openpose的训练好的参数矩阵进行初始化。因此只需要最小化reid过程的损失值。

2.2 复现细节

在人体关键点估计分支中输出结果是185-维度,19-维度关键点信度图,38-维度肢体维度(19-x,19-y)和128-维度的特征。输出结果经过一个3x3的卷积层加BN层, 输出是128维特征图。
在GooleNet中,输入时160x80的图像,输出后经过1x1卷积加BN层得到一个512维的输出结果。
将两个结果聚合成512维度的特征向量。不过对于如此高维度的算法计算时对内存的占用率非常大,因此采用一种tensor sketch的方式进行计算。对原始向量进行随机投影获取低维度的向量。tensor sketch过程
训练过程使用SGD算法,learning-rate设置为0.1,weight-decay设置为0.003,momentum设置为0.9。学习率采用自适应降低,随着迭代次数的增加,学习率会逐渐变小。每一次的batch为180,18个身份各10张图。每一次迭代的三元损失对有10*10*(180-10)*18,大约为 3 10 5

2.3 验证数据集

Market-1501
CUHK03
CUHK01
DukeMTMC
MARS

验证方式是采用(1)mAP (2)CMC

这里写图片描述

3 解决的问题及对应方案

问题一
由于视角转换和姿态的可变性较强以及检测算法的不可靠性,导致了人体关键点失配的情况。
解决方案
结合openpose进行关键点定位和校准。每一个part-aligned都是使用双线性池化将全局特征图关键点特征图结合得到的。也就是一种十分鲁棒的图像近似度匹配。

问题二
采用人体关键点检测的其他意义。
解决方案
可以提取每一个身体部位的bbox。

猜你喜欢

转载自blog.csdn.net/TwT520Ly/article/details/80982759