Beyond Part Models: Person Retrieval with Refined

2019-07-14 09:56发布

一、介绍

提取part-level的特征进行行人重识别提供了细粒度信息,最近的研究表明对提升行人重识别准确度非常有效。其中提取part-level特征发挥作用的关键是每个部分被准确的定位。现有一些利用外部提示的方法如姿态估计等等来定位每个部分,作者提出了一种根据每部分内容上的一致性进行定位的方法。 具体地说,作者目标是学习判别能力强的part-informed features来进行行人重识别,主要做了以下贡献:
  1. 提出了一个叫做Part-based Convolutional Baseline(PCB)的网络。输入一张图片,能够输出若干个part-level features。通过一个平均分片策略,PCB达到了state of the art。
  2. 提出了一个“部分精炼池化”策略(refined part pooling (RPP))。考虑到均匀分片不可避免地会导致每片(part)中包含极端值,这些极端值实际上和其他片更相似。RPP重新分配这些极端值到它相似的片段,使得每片的内容一致性更好。实验证明,PCB + RPP的效果很好。

二、作者的方法

PCB structure:

PCB可以使用任何用于图像分类、没有隐藏全连接层的分类网络作为基础网络(backbone)。为了兼顾performance和网络简洁性,作者使用了ResNet50网络。作者移除了ResNet50 global avg pool层及其以后的部分作为backbone网络。输入一张384x128x3的图片,经过backbone后得到三维张量T : 24x8xc 。将张量T从通道这一维度,看成24x8个列向量。将T从上往下分成p片(p=6),对每片内的列向量在空间上进行avg pool,得到p个c维度的列向量(用g_i表示)。然后通过1x1,kernls=256的卷积层降低g_i的维度,得到p个256维的列向量(用h_i表示)。训练阶段,每个h经过一个分类层产生分类结果,每个分类层的权重不同,各自用softmax loss优化。测试阶段,p个g或者p个h连接在一起作为向量特征,p个g连接略好于p个h连接,但是运算复杂度更高。

Refined Part Pooling:

1、为什么要用RPP算法重新分配极端值? 作者直接将特征图T均分分成上下p片(p=6)(硬分片),基于的假设是T中相同part的f彼此相似,而不同part的f不相似。否则说明这样的分片方式不够合适,存在片间不一致的情况。 PCB训练完成后,作者计算了每个列向量f和各个g_i的cosine距离(cosine距离:理解为两个向量点乘,距离越小,值越大),如果距离 f最近的g_i就是f所在的part,那么说明f是片内一致的。如果距离f最近的g_i不是f所在part的g_i,那么说明f是片内不一致的(极端值),应该将其分配到距离最近的g_i所在的片。计算的结果如下: 由上图可以看到,硬分片的大部分的f都聚集在一起,满足片内一致性。但是有一部分的极端值存在,下面作者提出了RPP算法来重新分配这些极端值到对应的片。 2、RPP算法: 首先将所有的f经过一个   p个神经元的分类层+softmax,得到f属于p1,p2,...,p6的概率(part classfier)。 将每个f属于Pi的概率P(Pi |f)作为权重和f相乘,得到加权后的特征张量Pi (软分片)(sampling operation),Pi大小和T相同,对Pi进行global avg pool后得到g_i。再进行PCB得到g_i后的操作。 网络结构上 是将原来PCB的part avg pooling层替换成part classfier和sampling operation,其余的结构不变。 Part classfier的诱导训练: 如果不对part classfier的分类层W (即1式的W)做任何限制,直接和网络在一起训练,那么就会起到注意力的机制(网络会倾向于选择对结果重要的part,忽略其他part,就像人看东西只看重要的部分,注意力!)。作者通过实验证明这种方式有一定的提升,但是效果不好,甚至比不上硬分片的结果,于是采取了诱导训练的方式得到了远远好于注意力机制的结果。诱导训练流程如下:
  1. 首先训练一个基本的PCB模型
  2. 移除part avg pool层,加入part classfier分类层(一个p个神经元的全连接层),组成PCB + RPP的结构
  3. 将已经训练好的PCB层(不包括新加入的p个神经元的分类层)参数固定住,只更新part classfier层的权重。设置损失函数使得part classfier达到原来均匀分片的分类结果。(引诱训练)
  4. 将所有层的参数更新都打开,fine tune网络。
因为引诱的趋势很明显,第三步的part classfier收敛的很快,第四部也很快,总共10个epochs就能都收敛。  

三、实施细节

  • 使用了水平翻转和图像归一化
  • batch_size=64 ,epochs=60
  • 前20epochs lr=0.1,后40 lr=0.01
  • backbone是ResNet50预训练模型,所有预训练层的学习率为系统学习率的0.1倍
  • 使用RPP时,训练好PCB后多训练10个epochs
  • 两个TITAN XP GPUs,Market1501,训练IDE花费40分钟,训练PCB花费50分钟。多的时间是因为PCB取消了Conv5的下采样层,使T增大了4倍
IDE(baseline):IDE学习一个全局特征。作者使用ResNet实现IDE,并在原始的IDE上做了以下改进:
  • 在pool5后面加了一个256fc+bn
  • pool5层使用了dropout,0.5,虽然pool5层没有参数,但是最近研究表明使用drouout能够得到提升,并且避免过拟合
  • 在Market1501上,IDE rank-1 = 85.3% mAP = 68.5%

四、实验结果

可以看到,PCB的效果很好,RPP能够提升PCB的表现,对mAP的提升更加明显。 PCB比1)将所有的h取均值后只用一个classfier 2)所有classfier共享权重效果  这两个潜在的变种结构效果更好 PCB在Market1501超过了state of the art,比需要额外线索的PDC、GLAD还好。  PCB在Duke和CUHK03上也超过了state of the art.  作者设计实验说明了不同的图像输入尺寸(192x64到576x192,步长96x32)、下采样率(original rate:即原来ResNet的T相对于输入的比率, halved:original rate的一半,即取消了Conv5的下采样,对应4T大小)对结果的影响。 实验证明,输入尺寸越大,下采样率越小,结果越好。最终作者选择了384x128,halved original rate(取消了ResNet50的Conv5的下采样)。   实验证明p=6时效果更好,p太小提取不到局部特征,p太大很多全黑,说明不必要。  通过component analysis证明诱导训练很有用。