HHL论文及代码理解(Generalizing A Person Retrieval Model Hetero- and Homogeneously ECCV 2018)

行人再识别Re-ID面临两个特殊的问题:

1)源数据集和目标数据集类别完全不同

2)相机造成的图片差异

因为一般来说传统的域适应问题源域和目标域的类别是相同的,相机之间的不匹配也是造成行人再识别数据集数据分布不同的主要原因之一,如何在域适应中有效利用相机信息还没有一个很好的解决方案。

在这篇论文中,作者主要就是想解决这两个问题。提出了Hetero-Homogeneous Learning (HHL)算法。具体的解决方法如下:

相机差异: 通过目标域中未标注的图片和对应的风格转换图片学习(Homogeneous Learning)

域连通性:将源域/目标域图片视为目标域/源域的负匹配(Hetero Learning)

简要概括:算法先从挑选一张图片,为了实现相机不变性,利用StarGAN生成一系列不同相机风格的图片,与原始图片一起组成正样本,因为训练图片来自于同一个域,这称为Homogeneous Learning。为了实现域连通性则通过采样自源域和目标域的图片进行训练,因为源域和目标域的ID不重叠,很自然地形成了一个负样本对,因其来自不同域被称为Hetero Learning,网络输入是一个triplet。

网络结构如下:

网络包含两个支路,一个是从源样本学习计算的分类交叉熵损失,另一个是相似度学习的triplet损失,是来学习前面介绍的相机不变性和域连通性,通过有标注的源样本,无标注的目标样本和相机风格转换的样本来学习。

Baseline:

作者使用在ImageNet上进行预训练的ResNet50作为骨干网络,去除了最后的1000维的全连接层,增加了两个新的全连接,第一个叫做“FC-1024”,后面接着batchnorm,ReLU和Dropout。第二个叫做“FC-#ID”,输出维度等于类别数。使用了交叉熵损失作为网络监督:

以上就是上图的第一条支路,它的目标是对于给定类别的图片训练出对ID敏感的嵌入(IDE),就是把行人再识别当作分类任务来做。

其实对于同源数据,IDE就能表现得挺不错了,但是IDE的泛化性很差,换到不同的目标数据集上效果将大打折扣。因此作者就引入了上面提到了HHL,也就是第二条支路。

在第二条支路中,“FC-#ID”被替换成了128维的全连接,并且交叉熵损失改成了triplet损失。交叉熵损失用于分类学习。triplet损失用于相似度学习。

相机不变性:

对于相机不变性有一个很直观的理解,就是同一个人不管用哪个相机拍摄的图片,网络都应该识别得出来。本着这一思想,可以想到使用GAN把一张图片转换成多个相机的风格。

如果了解Re-ID肯定知道2018 CVPR就有很多用CycleGAN做了这一研究的,作者这里使用的是StarGAN。CycleGAN只能实现两两之间的转换而StarGAN则可以实现一到多个域之间的转换,关于StarGAN的解读可以移步。StarGAN的生成效果如下:

作者选择的是目标域的图片,目标域存在了C个相机,作者对于每个图片学习生成了C种转换(其中有对应自己相机风格的一张)。目标域的原始图片表示为xit,生成图片表示为xit*,后者的数量是前者的C倍。相机不变性的三元损失公式如下:

其中triplet样本的形成规则如下:
1.先从目标域挑选一张原始图片作为anchor
2.随机挑选anchor的StarGAN合成图片作为正例

3.随机再从目标域挑选一张原始图片作为负例(这一假设严格来说是不合理的,因为每个人都有多张图片,可能就会采样到与anchor中人物相同的,但是因为数据集中负样本对数目远远大于正样本,作者用实验证明了这一假设影响不大)。

域连通性:

在行人再识别中不同域有着不同的个体,于是源域与目标域很自然地就形成了负样本对。作者使用这个特性进行域连通性学习,这样一来网络可以把原始域图片和目标域图片投影到一个共同空间,综合考虑两者之间的关系。

这里的triplet样本组织规则为:

1.首先从源域挑选一张图片作为anchor

2.再利用源域标签,再挑选一张与anchor人物相同的作为正例

3.最后从目标域随机采样一张作为负例

损失函数公式为:

 HHL:

在这篇论文中作者认为对于一个有效的行人无监督域适应系统(UDA)来说,相机不变性与域连通性是互补的。因此作者提出来在训练批中使用单个的loss来联合学习这两个方面。公式化如下:

最后与交叉熵损失结合形成总体损失,交叉熵损失提供了仅在源域上学习到的一个基础的区分能力,实验证明了它不可或缺。

原文地址:https://www.cnblogs.com/Thinker-pcw/p/9787440.html