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来联合学习这两个方面。公式化如下:
最后与交叉熵损失结合形成总体损失,交叉熵损失提供了仅在源域上学习到的一个基础的区分能力,实验证明了它不可或缺。

HHL论文及代码理解(Generalizing A Person Retrieval Model Hetero- and Homogeneously ECCV 2018)的更多相关文章
- StarGAN论文及代码理解
StarGAN的引入是为了解决多领域间的转换问题的,之前的CycleGAN等只能解决两个领域之间的转换,那么对于含有C个领域转换而言,需要学习C*(C-1)个模型,但StarGAN仅需要学习一个,而且 ...
- Context Encoder论文及代码解读
经过秋招和毕业论文的折磨,提交完论文終稿的那一刻总算觉得有多余的时间来搞自己的事情. 研究论文做的是图像修复相关,这里对基于深度学习的图像修复方面的论文和代码进行整理,也算是研究生方向有一个比较好的结 ...
- [ZZ]计算机视觉、机器学习相关领域论文和源代码大集合
原文地址:[ZZ]计算机视觉.机器学习相关领域论文和源代码大集合作者:计算机视觉与模式 注:下面有project网站的大部分都有paper和相应的code.Code一般是C/C++或者Matlab代码 ...
- linux io的cfq代码理解
内核版本: 3.10内核. CFQ,即Completely Fair Queueing绝对公平调度器,原理是基于时间片的角度去保证公平,其实如果一台设备既有单队列,又有多队列,既有快速的NVME,又有 ...
- 10K+,深度学习论文、代码最全汇总!
我们大部分人是如何查询和搜集深度学习相关论文的?绝大多数情况是根据关键字在谷歌.百度搜索.想寻找相关论文的复现代码又会去 GitHub 上搜索关键词.浪费了很多时间不说,论文.代码通常也不够完整.怎么 ...
- (转) AI突破性论文及代码实现汇总
本文转自:https://zhuanlan.zhihu.com/p/25191377 AI突破性论文及代码实现汇总 极视角 · 2 天前 What Can AI Do For You? “The bu ...
- 通过汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
秦鼎涛 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验一 通过汇编一个简单的C程序,分析汇编代码 ...
- 『TensorFlow』通过代码理解gan网络_中
『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...
- 通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的
实验一:通过反汇编一个简单的C程序,分析汇编代码理解计算机是如何工作的 学号:20135114 姓名:王朝宪 注: 原创作品转载请注明出处 <Linux内核分析>MOOC课程http: ...
随机推荐
- MySQL 回表
MySQL 回表 五花马,千金裘,呼儿将出换美酒,与尔同销万古愁. 一.简述 回表,顾名思义就是回到表中,也就是先通过普通索引扫描出数据所在的行,再通过行主键ID 取出索引中未包含的数据.所以回表的产 ...
- os.system 裁掉片头 ffmpeg
顺序执行多个指令os.system执行终端命令os.system('start ffmpeg -i x222.mp4 "%s.mp3" && del x222.mp ...
- 变量命名 函数命名 方法 Naming cheatsheet
Naming things is hard. This sheet attempts to make it easier. Although these suggestions can be appl ...
- Metalama简介5.配合VisualStudio自定义重构或快速操作功能
使用基于Roslyn的编译时AOP框架来解决.NET项目的代码复用问题 Metalama简介1. 不止是一个.NET跨平台的编译时AOP框架 Metalama简介2.利用Aspect在编译时进行消除重 ...
- 手机USB共享网络是个啥
智能手机一般都提供了USB共享网络的功能,将手机通过USB线与电脑连接,手机端开启『USB共享网络』,电脑就能通过手机上网. 手机端开启『USB共享网络』: 电脑端出现新的网络连接: 通过设备管理器看 ...
- MongoDB 常用运维实践总结
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 一.MongoDB 集群简介 MongoDB是一个基于分布式文件存储的数据库,其目的在于为WE ...
- 3.yum学习笔记
一.yum介绍 将所有的rpm软件包放到指定服务器上,当进行yum在线安装时,可以自动解决依赖性问题. yum配置文件常位于/etc/yum.repo.d 目录下 [root@aaa251 ~]# c ...
- 简述 private、protected、 public、 internal修饰符的访问权限
1.private: 私有的,只能在此类中访问 2.protected: 受保护的,只能在此类及其继承类中访问 3.public: 公开的,没有访问限制 4:internal: 内部的,只能在当前程序 ...
- Redis 为何使用近似 LRU 算法淘汰数据,而不是真实 LRU?
在<Redis 数据缓存满了怎么办?>我们知道 Redis 缓存满了之后能通过淘汰策略删除数据腾出空间给新数据. 淘汰策略如下所示: 设置过期时间的 key volatile-ttl.vo ...
- 是时候使用 YAML 来做配置或数据文件了
概述 我们做程序,经常需要用到配置信息,回顾一下这么多年的搬砖生涯,我记得用过多种格式的文件来定义配置信息,例如 ini文件,xml文件,或者现在比较流行的 json 文件. 这些年虽然云计算和云原生 ...