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

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,先进行双线性转换,然后再进行空间全局池化。对于池化层没有太多区别,主要就是对于一个矩形范围内的所有输出进行平均池化。主要的改变在与将 pxy p x y 向量与 axy a x y 向量采用叉乘方式进行融合。公式如下:

fxy=vec(axypxy)f=poolingxy{fxy}=1Sxyfxy 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 ~ = f | | f | | 2

联立上面的公式:

f˜xy=vec(a˜xyp˜xy)a˜xy=axy||f||2p˜xy=pxy||f||2f˜=1Sxyf˜xy 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 损失函数

损失函数采用三元损失函数进行训练,对于一个人体分别使用 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 。三元损失可以定义为下面:

triplet(f˜q,f˜p,f˜n)=max(m+sim(f˜q,f˜n)sim(f˜q,f˜p),0)sim(x,y)=<x,y>=1||(Iq,Ip,In)triplet(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 m 是一个平衡系数,设置为0.2。

1.3 计算相似度

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

simI(I,I)=<f~,f~>=1S2<xyf~xy,xyf~xy>=1S2xyxy<f~xy,f~xy>=1S2xyxysim(f~xy,f~xy)

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

sim(f˜xy,f˜xy)=<vec(a˜xyp˜xy),vec(a˜xyp˜xy)>=<a˜xy,a˜xy><p˜xy,p˜xy>=sim(a˜xy,a˜xy)sim(p˜xy,p˜xy) 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 对比普通模型

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

pxy=[δ[(x,y)R1],...,δ[(x,y)Rk]] p x y = [ δ [ ( x , y ) ∈ R 1 ] , . . . , δ [ ( x , y ) ∈ R k ] ]

其中 Rk R k 表示第k个关键点的bbox。
δ[x]=1 if x is true otherwise 0 δ [ 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,大约为 3105 3 ∗ 10 5

2.3 验证数据集

Market-1501
CUHK03
CUHK01
DukeMTMC
MARS

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

这里写图片描述

3 解决的问题及对应方案

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值