Pose Transferrable Person Re-Identification
作者: Jinxian Liu, Bingbing Ni等人 2018 CVPR
1. Motivation
既然pose影响reid性能,那让网络尽可能多地看到不同pose的图像不就可以了。于是作者一个三步走策略:
- 第一步:用训练集训练reid模型,让模型具有一定的鉴别力,让整个方法的效果不会低于baseline,即Guider
- 第二步是从MARS上提取各式各样的pose,然后和训练集图像一起利用Generator-Guider-Discriminator结构生成图像
- 第三步是生成图像后和原训练集图像一起送给预训练过的reID模型进行微调(用生成图像对Guider微调)。
2.介绍
作者说该模型还可用于其他pose迁移任务如行人检测、行人追踪等
3. 方法
3.1. Overview
3.2. Pose Transfer Module: Generator-Guider-Discriminator , G-R-D
3.2.1 Skeleton-to-Image Generation----第二步
直接用OpenPose对MARS图像提pose得到RGB的骨骼图像s,然后用cGAN训练网络,其需要paired图像输入(CycleGAN解决了这个问题,CycleGAN传送门),即原图x,骨骼图s,带pose s的GT图y(x和s是绑定在一起的,说是两张图,但其实是一张图,s只是个约束条件)。测试时,用图x和s生成
其中z是随机噪声,本文中其实没有明确使用。然后将真triplet
和生成triplet
一起给D辨真伪。其中triplet内是三张图按channel堆叠在一起送给D辨别的。min-max博弈损失为:
其中L1损失是让生成图像质量更好,L2会使得生成图像过于平滑,模糊(L1也会,略好点)。
3.2.2 Guider Module: ReID Boosting-----第一步得到但用于第二步
光用D看生成图像怎么样还是不够,于是还训练了一个guider R对生成图像进行鉴别。和D不同的是,R在第一步训练好后就fixed,不像D那样更新。
而Guider其实就是一个用训练集预训练的reID模型,其实就是对生成图像进行reID任务,相当于一个“引导”的作用,让生成图像更有利于现有的reID模型分类。既然是普通的reID,常用损失就有交叉熵损失和三元组损失:
- Cross-Entropy based Guider Loss
q a q_a qa和 x a x_a xa分别是类a的标签和图像,而 P R ( ∗ ) P_{R}(*) PR(∗)是*经过R后输出的属于类a的概率 - Triplet based Guider Loss
输入是triplet,anchor是类a的图像 x a x_a xa的生成样本
positive是类a的一个真实样本 r a r_a ra,negative是类b的图像 x b x_b xb的生成样本
组成的一个triplet为
。
而 d A , B d_{A,B} dA,B表示AB分别经过R后的行人特征之间的L2距离,而 α \alpha α是margin, [ ∗ ] + [*]_+ [∗]+是max(0,*)。
常见做法是交叉熵损失和三元组损失联调,效果很好。本文直接二选一,即
L
R
L_R
LR。得到这一阶段的总损失为:
从而优化目标为:
3.3. Training with Balanced Data—第三步
第一步是直接用训练集如Market,Duke或CUHK的训练集训练图2张的reID模块,得到的就是Guider。
而第三步就是对训练集和训练集迁移到MARS上的pose的图像一起(ID不变)微调Guider,让reID模块更强。
作者文章中用源域和目标域,但其实做的是单域,目标域就是提供训练集的那个域,文章中是Market、Duke和CUHK。而源域就是提供一些各种各样的pose,文章中是MARS。
这里,作者用了LSR策略,也就是生成图像虽然ID不变,但不要过分信赖ID标签,而是打下面这种软标签:
CamStyle也有相似的操作,传送门
ϵ
=
0
\epsilon=0
ϵ=0就是完全信任ID的硬标签,就是ZZ在CamStyle中普通版本的打标签方法,而
ϵ
=
1
\epsilon=1
ϵ=1就是ZZD的LSRO。
而第三步和第二步的Guider一样,需要损失来监督,作者也是用了交叉熵损失和三元组损失监督。根据LSR的交叉熵损失为:
而triplet的选择就和普通三元组无异。只不过anchor是真实图像时,positive和negative也从真实图像中选,而anchor是生成图像时,positive和negative就从整个真实图像+生成图像组成的训练集中选,具体形式就不展开
注意:第二步中Guider用什么结构和损失,第三步中就也一样
3.4 网络架构
生成器使用siamese(triplet的输入) and U-net(图2的G中存在的跳过连接)的那种结构,而鉴别器就是简单的堆叠结构。而Guider即ReID模块,用的是ResNet50或DenseNet169.
4. 实验
4.1. 数据集
在Market、Duke和CUHK上训练和测试,而s是从MARS提取的。四个数据集分别简记为M,D,C,MA
4.2. 实验细节
三步走策略:
- Pre-training a ReID model to be the guider. 也就是训练Guider 第一步
在M和D上:
** 用ResNet50作guider(reID模块),交叉熵损失监督,lr为0.001,在30个epoch后衰减为0.0001,记为R-CE
** DenseNet169作guider,交叉熵损失监督,lr为0.001,在25个epoch后衰减为0.0001,不要dropout
** DenseNet169作guider,三元组损失监督,lr为0.001,bs为128,margin为1,记为D-Tri
以上均用动量为0.9的SGD优化
在C上:
** 用ResNet50作guider,交叉熵损失监督
** 用ResNet50作guider,三元组损失监督
** DenseNet169时和resNet50效果差不多
一律:
- Boosting training of skeleton-to-image model.即生成图像 第二步
- Improving ReID model with generated samples 微调 第三步
ε 设为0.4 , α设为0.5
4.3. 实验结果
- 和baselien以及其他图像生成方法比
- 和SOTA比
4.4. 消融实验
- 是否用guider的影响—是否预训练reID的影响
没有时,生成图像明显模糊很多,并且结果差几个点 - 不同的Guider的影响
4.5 参数分析
-
一张图进行N张图像迁移
两三张最好,太多了假的会由于丢失细节或生成结果中的奇异点开始起副作用 -
其他参数