大白话解读行人重识别-ReID之DG-Net

综述参考:
from:ReID综述(上)https://www.leiphone.com/news/201712/4Mvj2NBIxCN5bQZI.html
from:ReID综述(下)https://www.leiphone.com/news/201712/JdVuO1BWAIrkPSyx.html

一.DG-Net

源码

1. 摘要和简介

利用生成数据去改进行人ReID:使用一种联合学习框架,即端到端的成对重识别,简单的说,就是把数据生成和行人重识别统一到一个框架中。

  • 十分需要注意的是appearance code也即ai是不仅仅包含衣服信息的也是包含身份信息的,可以根据衣服判别,但是同时需要头发,脸等细节信息完全确定。

2. 生成单元

生成单元包括一个外观编码器Ea,一个结构编码器Es,一个解码器G以及一个判别器D来区分真实图片和生成图片。
具体如图所示大白话解读行人重识别-ReID之DG-Net_第1张图片

与appearance code ai相比,struct code sj保持了更高的空间分辨率,以保持几何和位置特性。然而,这可能导致解码器G在图像生成中只使用sj而忽略ai的简单解决方案,因为解码器倾向于依赖具有更多空间信息的特征。在实际应用中,我们将Es的输入图像转换成灰度,从而驱动G同时利用ai和sj。我们对生成模块实施了两个目标:(1)同一身份生成 使生成器正则化;(大白话:两张同一个人的照片合成该人照片,这里面包含了一张该人照片在分离成ai 和si后依旧能够在利用这个恢复成原照片)(2)交叉身份生成使生成的图像可控并匹配真实数据(大白话:两个人的两张照片互换衣服等(ap code)生成的新照片)

生成模块的两个目标如图所示:
大白话解读行人重识别-ReID之DG-Net_第2张图片


同一身份生成模块损失函数及解释

在同一身份生成模块主要包含三部分的损失,分别如下:
大白话解读行人重识别-ReID之DG-Net_第3张图片
具体解释如下:
(1)提供一张xi,生成模块首先是要学会如何重新构建xi他本人,这个简单self-reconstruction(自身重构)任务,对于生成器来说,这是一个重要的任务,因为起码能保证图片生成自己本人是没有问题的,我们重构这个图片使用的是像素级 L1 loss(图像相同,则像素差为0):对应上图的第一个公式,也即第一个损失函数
(2)对于同一个人的不同图像,appearance code(衣服+鞋子+手机+包)(后面可用ap code代替)是相近的,我们进一步对同一人的任意两张图片进行重构,在这种情况下,生成器最后生成的应该是同一个ID
大白话:生成器需要具备这种能力,那就是同一个人的两种图片进行合成重构,生成图片的身份ID不会发生改变。这个也是像素级L1损失 对应上图的第二个损失函数
(3)这种同一身份但交叉图像重建丢失会使外观编码器将同一身份的appearance code拉到一起,从而减少类内特征变量。同时,为了迫使不同图像的appearance code保持分离,我们使用identification loss来区分不同的身份:
大白话:appearance比如衣服鞋子等也应该具备身份特征,也就是使用这些特征也应该最好能够识别出ID,因而采用了分类损失也就是identification loss,对应上图的第三个损失函数

交叉身份生成模块损失函数及解释

在交叉身份生成模块主要包含三部分的损失,分别如下:
大白话解读行人重识别-ReID之DG-Net_第4张图片

(1)交叉身份ID的生成,其是生成不同ID的图像,在这种情况下,是没有像素级别的监督,因为我们没有合成之后的标签图片,这也就意味着无法像上面同一身份生成模块那样使用像素级L1损失函数。作者是这样解决这个问题的:通过基于ap code与st code,生成新的图片,然后再利用解码器生成 latent code,latent code 包括latent ap code和latent st code,然后使得latent ap code和ap code相比,利用L1损失函数,使得latent st code和st code相比,利用L1损失函数。也就是上图第一个和和第二个损失函数。
大白话:a的衣服和b的身子构成了新的图片,然后解码这张图片也就是使得b再脱下衣服那么这个衣服应该和原来a的衣服相同。
(2)类似于self-identity generation,我们也能强制identification loss作用于基于ap code生成的图像,让他的身份ID保持一致性,仍然采用identification loss,也就是上图第三个损失损失函数
(3)作者还使用了adversarial loss让生成数据的分布接近真实数据的分布(就是让生成图片尽量逼真),也就是上图第四个损失函数。


3.鉴别单元

大白话解读行人重识别-ReID之DG-Net_第5张图片
我们的鉴别模块通过共享外观生成器,嵌入在生成模块之中的,其是行人重识别的主要结构,直白的说,就是嵌入在生成模块之中的,行人重识别模块。按照交换两张图片ap code和st code的思维,我们提出了一种primary feature(主特征-应该是外观)与fine-grained feature(细节特征)的学习方法,更好的去利用了在线生成的图片数据。因为这两个任务的重点,集中在图片生成的不同方面,在外观编码器(appearance encoder)基础上,对于两种类型的特征映射 ,并且分别对两个映射得到的特征,进行身份预测。
也就是通过Ea得到的ap code,开了两个分支fprim与ffine两个分支使用ID LOSS,对身份进行预测。


  • 主要特征学习
    大白话解读行人重识别-ReID之DG-Net_第6张图片
    可以将生成的图像视为训练样本这是大部分文献所采取的方法。但是,在跨id合成图像中的类间变化促使我们采用动态软标记的师生式监督方法。我们使用教师模型来动态地分配软标签到XIJ,这取决于它的复合外观和结构。教师模型是一个在原始训练集上利用identification loss训练的基准CNN。为了训练用于主要特征学习的判别模块,我们将判别模块预测的概率分布p(xij)与教师预测的概率分布q(xij)之间的KL距离最小化,也就是上图对应的损失函数。**该loss就是为了让生成图片ID的概率值,和真实图片ID的概率值相近。**对于每张合成的图片,其内容都是来自于两张真实图片的组合。根据实验结果显示,一个简单的线性CNN教师模型去提供这个动态的软标签,能改进模型的性能。反正一句话在,就是让教师模型,教我们的Ea身份鉴别模型分类。
  • 细粒度特征挖掘
    在这里插入图片描述
    除了直接使用生成的数据来学习主要特征之外,他们特定的分类管道还提供了一种相互测试的替代方法,即模拟同一个人的服装变化。当对以这种方式组织的图像进行训练时,判别模块被迫学习与衣服无关的细粒度id相关属性(例如头发、帽子、包、体型等)。为了训练用于细粒度特征挖掘的判别模块,我们在这个特定分类上强制实施identification loss。
    这不像之前的一些之前的方法,通过手动标记行人属性,该方法会自动从合成的图像中采集细节属性(fine-grained attribute),进一步对比艰难取样的一些方法,不需要去找一些困难的样本(带有详细细节)进行训练。因为我们的鉴别模型可以学习到细节纹理特征的采集。
总结:
1.用了一个学习教师网络,去教Ea(鉴别器)学习主要得身份特征,对一个人的识别。
2.除了老师教的还要自己学会学习一些细致的特征。

4.优化

  • 总的优化函数如下:
    大白话解读行人重识别-ReID之DG-Net_第7张图片
    其中的Limgrecon=Limg1recon+Limg2recon
    Lreconimg是self-identity (自ID)生成图片的loss,Lcoderecon=Lcode1recon+Lcode2recon
    通过cross-identity生成器重构的loss,λimg,λid,λprim是控制各种loss之间联系的权重。

5.结论

在这篇论文中,提出了一种联合学习的框架,也就是数据生成和行人重识别的统一。在生成模块和鉴别模块之间,有一个在线的交互过程,对于他们的任务,会相互收益。这种设计,让行人重识别更好的利用生成的数据。并且在三个数据集上面,证明了我们生成的数据,以及行人从识别的准确率都是当时目前最高的。

你可能感兴趣的:(pyTorch,深度学习,算法)