【行人识别】Deep Transfer Learning for Person Re-identification

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shenxiaolu1984/article/details/53607268

Geng, Mengyue, et al. “Deep Transfer Learning for Person Re-identification.” arXiv preprint arXiv:1611.05244 (2016).

概述

本文解决行人的Re-Identification问题:判断两次出现的人是否是同一个人。在Market 1501竞赛中名列榜首,其Rank-1准确率比第二名高出约4%,和传统方法相比提升更是十分明显。
Market 1501样例

本文的亮点有三:

  • 在网络结构方面,使用训练好的GoogleNet进行特征提取;同时使用Verification和Classification代价进行优化。
  • 在训练时,分两步进行参数调优,使得小数据集的使用成为可能。
  • 使用一种巧妙的非监督方法,利用未标定的大量视频数据。

网络结构

特征提取

使用在ImageNet上训练好的GoogleNet1提取 K=1024 维特征。
这里写图片描述
GoogleNet约有100层网络,其中由参数的只有22层(如果算pooling是27层),整体参数不超过10M。需要训练的参数少,也是作者选择GoogleNet的原因。

由于充分利用了大训练集上的预训练结果,本文的正确率比以往工作有了明显提升。

代价

同时考虑两个代价。
分类代价:将一个输入图像分类为已知的N个类别中的一类。
这里写图片描述

鉴别代价:判断两个图像是否为同一个人。特别注意,上下两路中的dropout层完全相同,保证略去的节点位置对应。
这里写图片描述

同时考虑两个代价,也是本文正确率高的原因之一。

需要特别声明的是,GoogleNet在不同阶段实际有三个输出。对这三个输出都同等地施加上述两个代价。

测试方法

在执行行人识别任务时,实际被利用的只有GoogleNet部分的网络。遵循如下规则。

预处理

  • 计算所有gallery中人的特征

识别

  • 对输入图像,计算其特征
  • 与gallery中特征逐个比较,计算欧式距离
  • 距离最小的,认定为识别结果

训练方法

监督学习

在监督学习场景下,数据库中的每个样本标定的人员身份。

初始化时,提取特征网络使用GoogleNet参数,softmax部分随机初始化。

训练分为两步完成:

  • 固定其他参数,只训练softmax层
  • 训练所有层参数

一个特别一点的情况是,用于训练的行人数据库有两个,一个包含 N1 个人的较大的库作为辅助,一个包含 N2 个人的较小的库为目标。

训练分为三步:

  • 固定其他参数,在大库上训练输出为 N1 的softmax层
  • 固定其他参数,在小库上训练输出为 N2 的softmax层
  • 在小库上训练所有层参数

无监督学习

非监督学习场景下,人员身份未标定,但能够区分图像是否来自不同摄像机。

为简洁起见,设有两个摄像机 a,b ,分别拍摄了 Ma,Mb 张行人图像,记为 {Xa},{Xb}

经过特征网络提取的特征记为 {Ya},{Yb}

co-training

co-training方法可以从未标定的数据集中训练出监督模型。简略地表示如下:

  • 设计两个具有互补性质的模型;
  • 用模型1的结果,标定所有数据;
  • 用当前数据训练模型2
  • 用模型2的结果,标定所有数据;
  • 重复上述过程2-3次即完成拟合

模型1

使用如下方式标定无监督数据

  • 将来自 a 摄像机的 Ma 张图像标定为 Ma 个独立类别。
  • 对于来自 b 摄像机的图像,根据特征网络输出的特征,查找其特征 yib {Ya} 中的最近邻,将其标定位该最近邻的类别。

使用如上标记数据,更新网络参数。

注意,网络参数变化后,标定结果也会发生变化。

模型2

模型2和模型1流程类似,但在查找最近邻是要使用另一种特征表达 z

两个摄像机共拍摄了 M=Ma+Mb 张图像。将所有图像的特征排列成一个 K×M 的矩阵 Y

考虑将 Y 进行低秩分解,变成两个矩阵 D , Z 的乘积。最小化下式:

||YK×MDK×NZN×M||2F+λΩ(Z)

同时满足: ||di||22<1 ,要求 D 的列的模小于1。

其中,第一项是Frobenious范数,定义为矩阵元素平方和的方根。

第二项是graph regularization,定义为:

Ω(Z)=ij=1MWij||zizj||22

这是 Z 矩阵各列之间差向量二范数的一个加权和。
如果第i列和第j列对应的样本来自同一个摄像机,则权重 Wi,j=0
否则,设i来自相机 a ,j来自相机 b 。查找i在 b 相机中的k近邻(k=4)。如果j输入此k近邻,则 Wij=1 ,否则 Wij=0

这一项的意义是,要求新的表达 z 具有邻近特性。如果两个样本相似,则要求其表达也接近。

graph regularization求解

L=DW+ϵI ϵ 为小量),上述最小化转化为:

||YDZ||2F+λtr(ZLZT)

Z 求导,可得:

YTDZ+λZL=YTD

这是一个Sylvester等式,可以使用Bartels-Stewart算法求解,该方法在LAPACK中提供了实现。

数据组织

由于网络包含分类代价,类别数量不同会导致网络结构变化。所以使用如下方法构造minibatch:

  • 每一次迭代,随机选择32个人
  • 每个人,随机选择2个样本。每次将这64个样本载入GPU,构成一个minibatch。
  • 生成所有“不同人”样本对,共2*32*2*31 = 3968对。
  • 生成所有“相同人”样本对,并随机复制为同样数量的3968对2

训练超参数

学习率:输出0.001,每40K迭代乘0.1
迭代数:直接使用大库的迭代数为40K/150K;从大库迁移到小库的迭代数为20K/20K/20K。
代价权重:verification和classification的权重比为3:1
co-training λ 由交叉验证确定
数据扩展:每个原始样本保持中心做随机2D变换,扩展为5个。

总结

实验部分十分丰富,此处只介绍结论。

  • 使用在一般数据库上训练的GoogleNet,大大提升了了准确率,超出第二名约10%;
  • 使用classfication+verification的复合损失,比单独损失提升准确率7%-9%,添加triplet loss不能提升准确率;
  • 在verification中使用统一的dropout提升准确率3%;
  • 分两步fine-tune提升准确率8.7%;
  • 非监督方法比原有方法提升显著,准确率约在40%-60%;
  • 非监督方法中的co-training提升准确率2%-3%;
  • 使用在ImageNet上预训练的特征提取网络,能够值得提取的特征更具有“目标”语义。
    这里写图片描述

  1. Szegedy, Christian, et al. “Going deeper with convolutions.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2015.
  2. 此处待详。

猜你喜欢

转载自blog.csdn.net/shenxiaolu1984/article/details/53607268