行人重识别DG_Net@ 学习笔记

DG_Net

行人重识别是指对于给定的某个摄像头下的行人图片,在有监督的条件下去预测该行人的身份(标签),DG_Net是一种端到端的联合学习对抗神经网络框架,联合学习是指数据生成和行人再识别

模型框架

在这里插入图片描述

上图为DG_Net模型框架,其中:判别器(同时也是re-id学习模型)和Ea是同一个模块,虚线表示Es的输入图片是灰度图,该模型包含两个目标:

  1. 同id的自身份标签图片重构
  2. 不同id的跨身份标签图片合成
  3. 简要介绍:DG_Net中生成器将一张行人的图片分为两个编码部分,一个是外观编码,编码器为Ea,Ea生成的编码为ap code,一个是结构编码,编码器为Es,Es生成的编码为st code。其中,appearance主要关注衣服、鞋子、纹理、风格等身份信息,structure主要关注身体骨架大小、头发、姿势、背景等。
  4. 因为解码器更关注空间信息而忽略外观信息导致生成器G更关注st code而忽略ap code,因此在将Es的输入图片转化为灰度图在这里插入图片描述

接下来将分模块逐一介绍

生成器

生成器生成一张图片的情况是:对于任意两张图片A和B,其中图片A利用Ea生成ap code,另一张图片B利用Es生成st code,将ap code和st code输入到生成器,那么生成的图片就包含了A的appearance和B的structure,那么原则上(生成器足够优秀)合成的图片的id应该与B的id一致,因为一个人就算换了衣服还是这个人。
同一个id的同一张图片的 ap和st组合仍然是相同的id

那么开始考虑这一种情况:图片A和图片B是同一张图片,那么由该图片的st code和ap code重构的图片还是这张图片(如果生成器足够优秀),那么可以得到这样的像素级的损失函数:
在这里插入图片描述
在这里插入图片描述

现在考虑这一种情况:图片A和图片B是同一个人,但图片A和图片B行人姿势不同、背景不同,那么由图片A的st code和图片B的ap code重构的图片应该是图片A(如果生成器足够优秀),那么可以得到这样的像素级的损失函数:
在这里插入图片描述
同一id不同姿势的图片重构损失使得Ea能够降低同一id的ap code损失,也就降低了类内特征损失。除了重构损失,论文中还使用了一个身份预测损失(注意这里是为了优化判别器):
在这里插入图片描述
其中p表示xi属于真实标签yi的预测概率,身份预测概率p是基于Ea预测的,也就是Ea包含了身份信息。

不同id图片的a和s组合,s的下标对应的id即为生成图片的id。

现在考虑第三种情况:图片A和图片B是不同行人,那么这种情况下由图片A的ap code和图片B的st code或者图片A的st code和图片B的ap code合成的图片将没有像素级别的监督,因为合成的图片没有其groun-truth,因此不能直接计算像素差loss。论文中提出通过在合成的图片上构建latent code,也就是对生成的图片再进行Ea和Es。通过appearance code和structure code损失进行训练:
在这里插入图片描述这个损失就好比我把衣服借你穿一下,你脱下来还给我之后衣服还是没有变,你人也还是那个人。
这里同样有一个身份预测损失(注意这里是为了优化生成器):
这里为什么是yi而不是yj,我不太懂,知道的小伙伴可以告诉我一下??
还有一个对抗损失,用来匹配生成图片的数据分布和真实图片的数据分布。这里也可以看出来,D和Ea是同一个模型

判别器(re-id learning)

包含:primary feature learning 和 fine-grained feature minning,这两个模块分别注意到了appearance不变的行人特征信息和structure不变的行人特征信息。
在这里插入图片描述
primary feature learning:
使用teacher-student模型,由teacher教student学习。先用一个teacher 模型预测输入图片的软标签,teacher模型使用了一个baseline CNN训练,然后通过最小化由判别器(Ea)关于合成图片预测的概率分布p和由teacher模型对同一合成图片预测的概率分布q之间的KL散度进行训练:
k是全部的行人id数目
Fine-grained feature mining:
模仿相同人衣服的改变:将图片A的st code和不同id的ap code进行组合,然后最小化身份识别预测损失,这样会强迫模型去学习行人更细致的特征,比如身体框架、头发、姿势等。
Lfine为判别器模块添加了身份监督其实就是由teacher带着student学习,但是student也要有自己的思想,就是由teacher占主导地位(prime),student占辅助地位(fine)。

  1. 先使用一个teacher模型去教student(Ea)学习主要的身份特征(re-id)
  2. 如果第一步学习到的特征,判断不出来,就细致地观察,学习到更细致的特征再对行人进行识别。

最后以一种端到端的方法联合训练Es、Ea、生成器和判别器:

扫描二维码关注公众号,回复: 11940614 查看本文章

在这里插入图片描述

注意:

模型中一共提到两个身份识别损失,一个是Ls(self),一个是Lc(cross),其中前者是为了优化判别器D,判别器做的工作就是尽最大努力去判别一张图片的真实性,就是要把真实的图片判对,把fake data判错,而后者是为了优化生成器G,生成器的工作就是尽力去生成一个fake data,为了迷惑判别器,它就是要让fake data特别逼真,这里也就是对论文中公式(6)的解释。

底下是对论文代码的注释。
主要的部分有:reIDmodel.py(Ea),network.py(AdaINGAN(Es,Decoder(G)),MSImageDis(D)),trainer.py(各种loss),train.py(训练过程)

DG_Net代码注释(全)

猜你喜欢

转载自blog.csdn.net/qq_42316533/article/details/108559573
今日推荐