DG-net GAN在行人重识别的应用
论文原文:JointDiscriminativeandGenerativeLearningforPersonRe-identification
论文链接
代码链接
摘要
- 问题:现有方法的生成通道与判别学习阶段相分离
- 贡献:提出了一种联合学习框架,端到端的成对重识别。(将数据生成和行人重识别统一到一起)
- 模型包括生成模块和判别模块
- 生成模块将每个人编码成 外观代码(appearance code) 和 结构代码(structure code)
- 判别模块 与 生成模块 共享外观编码器
- 生成模块通过切换外观码或者结构码 生成高质量跨id合成图像,在线反馈给外观编码器
介绍
- 不同的相机捕捉的图像包含由背景、视角、人体姿势等变化引起的显著类内变化,需要设计学习更强健的对抗类内差异的表现形式
- 增强对输入变化的鲁棒性就是让模型在训练期间就看到类内变化(GAN)
- 存在问题:生成模型是独立的=》生成模型的优化目标与reid不能很好地对齐,限制了生成数据的增益。
- 通过引入生成模块,DG-net将两者结合
- 编码器将行人图像分成 外观空间 以及 结构空间
- 外观空间 编码 外观和其他身份相关语义
- 结构空间 编码 几何和位置结构信息
- note:生成模型 和 判别模块 共享 外观编码器 ,作为重识别模型的骨架。
- 生成模块负责生成图像,合成图像用于在线优化外观编码器
- 编码器通过改进外观编码 影响生成模块
- 在共享外观编码器的前提下 两个模块进行联合优化
- 不需要额外的辅助数据,就可以生成大量的图像。
相关工作
- Zheng 使用无条件gan增加训练数据
- Huang 用 WGAN 将伪标签分给生成图像
- Li 在reid模型和gan之间共享权重
- 基于姿态的两阶段生成通道来精炼生成图像
- 使用姿势来生成图像
- 以上都将生成和重识别任务分开 分成两个互不相干的任务。
- 还有一些基于全局风格转移的方式:
- Cycle-GAN 、 StarGAN。。。
方法
引入了两种图像映射,自身份生成和交叉身份生成,用来合成高质量的图像,并将其提供给重识别模块进行学习。
Note:判别模块包含初级特征学习和细粒度特征挖掘,可以更好的利用生成的数据。
3.1 生成模块
生成模块包括一个外观编码器Ea,一个结构编码器Es,一个解码器G以及一个判别器D来区分真实图片和生成图片。
- 与外观码a 相比 ,结构码s 保持了更多的空间分辨率,以保持几何和位置特性。
- 但是,这可能导致解码器G 在图像生成是只是用s而忽略a,=》因为解码器倾向于依赖具有更多空间信息的特征。
- 实际中, 会将结构编码器Es的输入图像转化为灰度图像,保证解码器G同时使用 a 和 s
- 生成模块的两个目标 自身份生成 以及 交叉身份生成。
- 同一身份生成 使生成器正则化。就是用同一行人的一张照片获得结构s,然后另外的图片获得外观a,重新合成一张新的图片。
- 交叉身份生成使生成的图像可控并匹配真实数据。“淘宝换装效果”
自身份生成
- 生成器应该能学会重构图片本身,损失函数对应第一个,图像相同,像素差应该为0
- 生成器对同一个人的两种图片进行合成重构,生成图片的身份ID不会发生改变。这个也是像素级L1损失 对应上图的第二个损失函数
- appearance比如衣服鞋子等也应该具备身份特征,也就是使用这些特征也应该最好能够识别出ID,因而采用了分类损失也就是identification loss,对应上图的第三个损失函数
交叉身份生成
- 对于交叉生成的图像,使用解码器重新获得latent appreciate code 和 latent structure code,采用使用1,2两个损失函数
- 除此之外还可以使用identity loss作用于用ap code生成的图像,使得身份id保持一致
- 本文还使用了adversarial loss 让生成的数据分布更接近真实数据分布
3.2 判别模块
根据切换 外观码 和 结构码 生成的图像,提出了主要特征学习 和 细粒度特征学习。
主要特征学习
NOTE: 其实就是根据外观来确定行人id,就是第一张图横着看。
可以将生成的图像视为训练样本这是大部分文献所采取的方法。
但是,在跨id合成图像中的类间变化促使我们采用动态软标记的师生式监督方法。
我们使用教师模型来动态地分配软标签到XIJ,这取决于它的复合外观和结构。
教师模型是一个在原始训练集上利用identification loss训练的基准CNN。
为了训练用于主要特征学习的判别模块,我们将判别模块预测的概率分布p(xij)与教师预测的概率分布q(xij)之间的KL距离最小化,也就是上图对应的损失函数。
该loss就是为了让生成图片ID的概率值,和真实图片ID的概率值相近。
对于每张合成的图片,其内容都是来自于两张真实图片的组合。根据实验结果显示,一个简单的线性CNN教师模型去提供这个动态的软标签,能改进模型的性能。
细粒度特征挖掘
NOTE:将姿态信息看做同一行人,简单来说,就是第一张图竖着看。
当对以这种方式组织的图像进行训练时,判别模块*学习与衣服无关的细粒度id相关属性(例如头发、帽子、包、体型等)。
为了训练用于细粒度特征挖掘的判别模块,我们在这个特定分类上强制实施identification loss。
这不像之前的一些之前的方法,通过手动标记行人属性,该方法会自动从合成的图像中采集细节属性(fine-grained attribute),进一步对比艰难取样的一些方法,不需要去找一些困难的样本(带有详细细节)进行训练。因为我们的鉴别模型可以学习到细节纹理特征的采集。
3.3优化
损失函数: