行人重识别论文阅读笔记(一)FD-GAN:Pose-guided Feature Distilling GAN for Robust Person Re-identification

这篇文章的大致思想是:用GAN来对行人的特征进行蒸馏,只保留和身份信息有关的特征,而去除了人体姿态这些冗余的特征信息。而在推断的时候,只需用到encoder提取的鲁棒特征就可以了,没有增加额外的计算量。即:为了应对多种多样的姿态变化-->学习到和身份信息有关,而和姿态信息无关的特征表达。

数据库:Market-1501, CUHK03 ,  DukeMTMC-reID

网络输入:每个分支都是行人图片和目标姿势图,要注意两个分支共享一个姿势图(所以这样才有后面的 same-pose loss )

框架:孪生网络的结构也就是两个分支,每个分支都会有一个encoder,一个generator和两个判别器:分别对姿态和身份进行判别。两个分支共享一个身份确认分类器。

整个过程:行人图片通过编码器获得特征表达,目标姿势图也通过它的编码器,两个编码器的输出再和噪声向量融合作为生成器的输入,最终两个分支都输出一张假图片,是该特定行人和特定动作的结合。

身份识别分类器:将两个分支的行人编码器输出的特征表达进行对比来判断是否为同一个人,具体操作,二者特征图相减,平方后,经过一个BN和FC层再加上sigmoid,就可以得到一个二分类的结果。(我不太确定这样做是否有什么依据)这个分类器其实是REID主要应该完成的任务。当这个分类器足够准确时,可以在一定程度上表明行人的特征表达是比较好的。

  • 分类器的loss函数为交叉熵

身份判别器:保持行人编码器提取的身份特征(这个好理解)

  • 原始图片和生成图片都通过一个ResNet,得到特征向量之后,进行和身份识别分类器一样结构的网络,得到最后二分类的结果。但要注意的是,这个ResNet和之前行人编码器的ResNet并不共享权值,也就是完全两个网络。这里的ResNet更多是要区分真假图片。

姿态判别器:去除行人编码器里的姿态特征。

  • 深入思考:如果包含冗余的姿态信息,那在生成行人的假图片时,可能姿势就和开始要求的有差别,因为它会对最后生成的行人姿态产生一定干扰,这样的话姿态判别这里的loss就会高。于是在慢慢训练之后,伴随着这个loss的下降,encoder被影响的会慢慢忽略对姿态信息的提取。
  • 采用了 PatchGAN 的结构,直接将生成的行人图片和姿势图拼接在一起,然后进入一个四层的convolution-ReLU网络和sigmoid,最后输出的是一个置信度的图,值越高说明相应位置的匹配度越高。

细节:

行人图片编码器是基于ResNet-50来训练的,输出的向量是2048维的。

目标姿势图是一个18通道的map,每个通道对应一个关键点的位置,并以高斯分布的热力图所表示的。它的编码器是一个五层的神经网络( Convolution-BN-ReLU ),得到一个128维的向量。

损失函数的组成:

  • Reconstruction loss:生成图片和真实图片之间的
  • Same-pose loss:两个分支生成图片之间的,应该越接近越好,如果是同一个行人的(这个真的很巧妙)
  • 剩下分类器和判别器的loss

训练过程:

1)先训练行人encoder和身份识别分类器,只用到分类器的交叉熵

2)固定行人encoder和身份识别分类器的网络参数,将判别器和生成器加入(二者是轮流训练的),进行训练

3)最后将所有网络参数微调

每一个batch有128对图片对,其中,32对是正样本。

影响效果的关键点:

(1)引入孪生网络结构,使得多了一个same pose loss

(2)两个ResNet-的权重是不共享的。

从结果可以看出,没有判别器,效果会差很多。

你可能感兴趣的:(深度学习)