Part-Aligned Bilinear Representations for Person Re-identification
0 论文简介
该论文从整体上看,主要就是采用了一个two-stream
的网络结构,对行人进行重识别。
1 论文主要技术
1.1 网络结构
对于一张输入的图片,同时在两个分支中计算。第一个分支用于提取Appearance map
,也就是人体的表面表征图。第二个分支用于提取Part map
,也就是人的肢体关键点的表征图。对于表征图,一种直观的看法就是一种热力图,表明该位置的置信度。
在两个分支中分别计算后,会得到两组特征图,分别是A
和P
,然后将这些特征图并联Bilinear pooling
,得到特征向量f
,最后采用l2
正则化进行normalization
得到输出结果。
对于网络结构,第一个分支采用GoogleNet-V1
结构,第二个分支采用OpenPose
的前三个stage
。
本文提出了一个双线性池化层
。对于输出的特征图A
与特征图P
,先进行双线性转换,然后再进行空间全局池化。对于池化层没有太多区别,主要就是对于一个矩形范围内的所有输出进行平均池化。主要的改变在与将
pxy
p
x
y
向量与
axy
a
x
y
向量采用叉乘方式进行融合。公式如下:
此时已经得到了融合后的特征图,再进行一次归一化处理。
联立上面的公式:
可视化效果:
1.2 损失函数
损失函数采用三元损失函数进行训练,对于一个人体分别使用
Iq
I
q
表示查询数据,
Ip
I
p
表示正样本数据,
In
I
n
表示负样本数据。
(Iq,Ip)
(
I
q
,
I
p
)
表示是一个相同身份的人,而
(Iq,In)
(
I
q
,
I
n
)
表示不同身份的人。对于样本分别定义为:
f˜q
f
~
q
,
f˜p
f
~
p
和
f˜n
f
~
n
。三元损失可以定义为下面:
其中 m m 是一个平衡系数,设置为0.2。
1.3 计算相似度
对于输出结果的近似度,可以分解为每一个区域内部的近似度,也就是遍历每一个像素位置。
两张图的S区域,共有S*S中组合方式,并不是对应计算。于是对于一个区域S,可以转换为特征向量的近似度,但是特征向量是根据A网络和P网络计算出来的特征图经过融合归一化得到的。所以可以再次进行下一步的分解。
1.4 对比普通模型
普通算法没有关键点预测这个分支,无法映射出关键点的近似度。
pxy
p
x
y
表示
(x,y)
(
x
,
y
)
位置是否是关键点。
其中 Rk R k 表示第k个关键点的bbox。
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∗105
3
∗
10
5
。
2.3 验证数据集
Market-1501
CUHK03
CUHK01
DukeMTMC
MARS
验证方式是采用(1)mAP
(2)CMC
3 解决的问题及对应方案
问题一
由于视角转换和姿态的可变性较强以及检测算法的不可靠性,导致了人体关键点失配的情况。
解决方案:
结合openpose进行关键点定位和校准。每一个part-aligned
都是使用双线性池化将全局特征图
与关键点特征图
结合得到的。也就是一种十分鲁棒的图像近似度匹配。
问题二
采用人体关键点检测的其他意义。
解决方案
可以提取每一个身体部位的bbox。