NeurIPS 2020 | 自步对比学习:充分挖掘无监督学习样本
近年来,在无监督学习的浪潮下,无监督及领域自适应的目标重识别任务也逐渐受到大家的关注,在刚刚过去的 ECCV2020 中这个方向所发表的论文就有十余篇。
领域自适应重识别任务的研究历史较无监督重识别任务而言较长一些,但本质上这两项任务是非常相似的。正如上文所述,领域自适应重识别任务相较于无监督重识别任务而言,只是在问题设置上多出了有标签的源域数据。
所以,大部分的算法也都可以通用,因为很多领域自适应重识别算法只需要去除源域预训练的步骤,即可应用于无监督重识别任务上。该论文所介绍的方法在这两项任务上也都取得了很不错的结果。
下面,将先以领域自适应重识别任务为例介绍方法,再讲解如何应用于无监督重识别任务。
问题与动机
解决领域自适应重识别任务的算法可以分为两类,伪标签类和域转换类,目前伪标签类可以获得更好的性能,而伪标签类中的基于聚类的伪标签法较为有效,所以本文所基于的 baseline 是基于聚类的伪标签算法。
目前大部分基于聚类的伪标签算法(如 SSG、MMT 等)在训练上分为两步:第一步,在源域上利用有标签的源域数据进行有监督的预训练;第二步,在预训练的模型基础上,利用目标域无标签的数据及其聚类产生的伪标签进行 fine-tune。
这样的算法流程目前已经可以获得相对令人满意的结果,但他们仍然存在两点缺陷:
1)在第二步的目标域训练中忽略了源域数据(仅用于预训练),但我们认为源域的数据由于具有真实准确的标签,所以应当被充分利用;
2)在基于聚类的伪标签法中,往往没有用到全部的目标域无标签数据,因为基于密度的聚类(如 DBSCAN 等)本身会产生聚类离群值(outlier),这些聚类离群值由于无法分配伪标签,所以被丢弃,不用于训练。但我们认为,这样的聚类离群值往往正是那些值得挖掘的困难训练样本。尤其在训练的早期,往往存在大量的聚类离群值,若简单丢弃它们,训练样本将大幅减少。
所以如何合理地挖掘所有可用的信息是提升性能的关键。如上图所示,我们提出在训练中使用全部的源域数据和目标域数据,并利用一个混合记忆模型(Hybrid Memory)来提供监督:对于源域数据而言,监督是他们真实的标签;
对于目标域聚类内的数据而言,监督是他们的聚类标签;对于目标域的聚类离群值而言,他们每张图本身被看作一个单独的类,所以监督是实例级的标签。我们将所有的源域类、目标域聚类、目标域每个聚类离群值实例看成平等的类别。
自步对比学习框架
以下是我们所提出自步对比学习(Self-paced Contrastive Learning)框架,包括一个图像特征编码器(Encoder)和一个混合记忆模型(Hybrid Memory)。
核心是混合记忆模型在动态变化的类别下所提供的连续有效的监督,以统一对比损失函数(Unified Contrastive Loss)的形式监督网络更新,实现起来非常容易,且即插即用。下文将具体介绍。
统一对比损失函数
类别原型(Class Prototype)可以理解为该类别中较为有标志的特征,例如无偏分类器中的权重(Weights)。
在这里,我们使用源域真实类别的类质心(Class Centroids)作为源域数据的类别原型 {w},使用目标域聚类的质心(Cluster Centroids)作为聚类内的目标域数据的类别原型 {c},使用目标域聚类离群值的实例特征(Outlier Instance Features)作为无聚类的目标域数据的类别原型 {v}。
我们所提出的混合记忆模型可以实时提供这三种类别原型以作训练监督,后文将具体介绍这三种类别原型的更新过程。
对于每一组输入的 mini-batch,同时包含源域数据和目标域数据(我们在编码器中使用 Domain-specific BNs 来消除不同领域数据间的域差异),他们需要与上述三种类别原型进行比较。所以我们提出统一对比损失函数(Unified Contrastive Learning):
该损失函数可以使得每个训练样本靠近它所属于的类别(包含源域真实类、目标域聚类、目标域无聚类实例),而远离其他类别。
举例来说,对于一个来自源域的样本,其对应的正面原型(Positive Prototype)则是它真实类别所对应的质心(Class Centroids);对于一个来自目标域的样本,若其在聚类内,则正面原型为其所对应的聚类质心(Cluster Centroids),反之,若其不在聚类内,为聚类离群值,则正面原型为该离群值所对应的实例特征(Outlier Instance Features)。
其实,我们所设计的“混合记忆模型(Hybrid Memory)+统一对比损失函数(Unified Contrastive Loss)”与大家常用的“分类器(Classifier)+交叉熵损失函数(Cross-entropy Loss)”在工作机理上非常相似,可以简单的认为混合记忆模型是非参数化(Non-parametric)的分类器。
那么,为什么我们不用普通分类器来完成这一任务呢?这是由于目标域的聚类及聚类离群值在训练过程中动态变化(一般每个 epoch 前更新),无法使用固定的聚类 ID 及离群值实例 ID 训练分类器。如若在每次更新完 ID 后需要重置分类器,分类器由于无法连续更新,会导致性能较差。
有同学会问,以前的算法(如MMT),每个 epoch 重置分类器依然训练效果很好,这是为什么?这是因为这些算法不使用聚类离群值进行训练。
试想,将每个聚类离群值也看做单独的类加入分类器,而每个 epoch 只能遍历到该类对应的样本一次(因为一个离群值是一个类),那么,在类样本数如此不平均的情况下,分类器几乎得不到有效的训练,便会被重置。
我们所提出的统一对比损失函数与自监督任务(如 MoCo、SimCLR 等)中常用的对比损失函数最主要的区别在于,我们同时考虑了三种不同的类别原型,而以前的对比损失函数只考虑实例级的类别原型。
他们将所有样本看作独立的类,进行实例区分(Instance Discrimination)训练,这样的算法很大程度上忽略了类内(Intra-class)关系,也就是同一 ID 的不同图像间的联系,故以前的对比损失函数不适用于重识别任务。
混合记忆模型
上文中,我们提到混合记忆模型(Hybrid Memory)实时提供三种不同的类别原型,那么,这三种类别原型是如何动态地在混合记忆模型中连续更新变化的呢?
我们提出使用动量更新(Momentum Update),想必这个词对大家来说并不陌生,在 MoCo、Mean-teacher 等模型中常有见到,简单来说,就是以“参数=(1-动量)x新参数+动量x参数”的形式更新。在这里,我们针对源域和目标域采取不同的动量更新算法,以适应其不同的特性。
对于源域的数据而言,由于具有真实的类别,我们提出以类为单位进行存储。这样的操作一方面节省空间,一方面在实验中也取得了较好的结果。我们将当前 mini-batch 内的源域特征根据类别算均值,然后以动量的方式累计到混合记忆模型中对应的类质心上去,详见下图。
对于目标域的数据而言,我们提出全部以实例为单位进行特征存储,这是为了让目标域样本即使在聚类和非聚类离群值不断变化的情况下,仍然能够在混合记忆模型中持续更新(Continuously Update)。具体而言,我们将当前 mini-batch 内的目标域特征根据实例的index累计到混合记忆模型对应的实例特征上去。
那么,如何获得目标域的聚类质心及离群值实例特征呢?我们在混合记忆模型中,将同一聚类 ID 的特征做平均,即可获得聚类质心;而离群值的实例特征则直接从混合记忆模型中提取剩下的实例特征即可,如下图。
由简入难的自步学习
我们发现,由于聚类和聚类离群值都被看作平等且独立的类,所以聚类的可靠性对训练的影响至关重要。由于网络在训练的一开始对于图像的辨别性较差,聚类的噪声也较大。
所以我们借鉴自步学习(Self-paced Learning)的思想,先从最可靠的聚类开始,再逐步增加聚类,由简入难。我们提出了一个聚类可靠性评价标准(Cluster Reliability Criterion),保留可靠的聚类,而将不可靠的聚类拆解回无聚类的离群值实例。
我们所提出的聚类可靠性评价标准分为聚类独立性(Cluster Independence)和聚类紧凑型(Cluster Compactness)。
聚类独立性(Cluster Independence)体现为一个可靠的聚类应当具有良好的类间距离,通俗点来说,不能和附近的聚类“如胶似漆”。我们提出,放宽聚类的标准,例如 DBSCAN 中的最小类内距离,此时,如果该聚类与周围的聚类融合成了一个大聚类、或者吸收了附近的离群值,那么我们认为,该聚类的独立性不太好。
我们使用一个IoU(Intersection over Union)公式来计算聚类的独立性。
聚类紧凑型(Cluster Compactness)体现为一个可靠的聚类内的样本应该相互靠近,具有良好的类内距离。类似的,我们提出,缩紧聚类的标准,此时,如果该聚类被拆解成了多个小聚类、或者拆出了一些聚类离群值,那么我们认为,该聚类的紧凑型不太好。
我们使用另一个 IoU 公式来计算聚类的紧凑型,如上图所示。
直观地说,该聚类可靠性评价标准的出发点在于,一个可靠的聚类应当在多尺度的聚类环境下保持稳定。从下图训练的统计中可以看出,使用了聚类可靠性评价标准的模型(红色线)相比较于未使用的模型(蓝色线),无论是在聚类的数量还是质量上,都离真实类别更近。
算法流程
以上,我们介绍了核心的模块,我们梳理一下具体训练流程:
初始化(Initialization):图像编码器(Encoder)的初始化一般使用 ImageNet Pre-trained Weights,混合记忆模型(Hybrid Memory)的初始化使用初始的编码器对所有的样本进行一次前向计算。
聚类和聚类离群值:在每个 epoch 前进行聚类,并根据聚类可靠性评价标准(Cluster Reliability Criterion)进行聚类的筛选,仅保留可靠的聚类,其余样本均视作聚类离群值。
网络和混合记忆模型的更新:在每个 iteration 中,首先利用编码器对 mini-batch 的样本进行特征编码,然后利用统一对比损失函数(Unified Contrastive Loss)进行网络的反向传播更新,最后利用编码的特征以动量更新(Momentum Update)的方式更新混合记忆模型(Hybrid Memory)。
无监督重识别上的应用
在一开始曾提到,该方法也可以被有效利用在无监督重识别任务上,只需要将混合记忆模型和统一对比损失函数中有关源域的部分去掉即可。
无监督重识别任务上的自步对比学习框架如下:
对应的统一对比损失函数如下:
实验
由于自步对比学习框架中可以同时训练源域和目标域的数据,所以训练是 one-stage 的,无需单独的源域预训练步骤。实验中,我们针对多个真实及虚拟合成数据集进行了实验,在行人重识别和车辆重识别任务上都测试了该方法的有效性。
领域自适应任务中,我们在无监督的目标域上均超越先前算法,在 PersonX->MSMT17 的任务上领先高达 5.0% 的 mAP,这是由于在“虚拟合成->真实”的迁移任务中,由于聚类噪声较大,产生的聚类离群值较多,所以我们所提出的充分挖掘所有样本的方案所带来的优势将更为突出。
除此之外,一项有趣的发现,VehicleID->VeRi-776 与 VehicleX->VeRi-776 在目标域上获得几乎相似的性能,这说明,在未来,随着领域自适应算法的不断升级,可能我们再也不需要人为标注的源域数据来作为辅助了,可以使用虚拟合成的数据予以代替。
总结
该文提出了一个简单有效的自步对比学习框架,核心思想是利用多种不同形式的类别原型提供混合监督,以实现对所有训练数据的充分挖掘。虽然本文只在目标重识别任务上进行了实验,但是提出的混合记忆模型及统一对比损失函数是即插即用的,有很大潜力在其他任务上取得较好的结果,欢迎大家尝试。
这次 NeurIPS 的评审过程相当刺激,从初审的 7663 到终审的 5553,reviewers 的降分起源对 DukeMTMC-reID 数据集的讨论,最终这份工作也经历了 NeurIPS 今年特有的 Ethics Review,起起落落,最终被 AC 捞起,感恩。可见,目前学术界对于数据集的隐私保护规范要求也越来越严格。
推荐大家在以后领域自适应重识别工作中考虑采用合成数据集,如 PersonX、VehicleX 等,不仅可以避免不必要的麻烦,并且由于合成数据和真实数据的域差异较大,算法上可以提 shua 升 fen 的空间也会较大。
分类任务及分割任务上的领域自适应往往采用合成数据作为源域,且这次 VisDA-2020 的比赛中,源域采用的也是合成数据集 PersonX,可见合成数据到真实数据的自适应任务备受关注。
我近期将会给一个 talk,总结我这一年半以来在在领域自适应及无监督重识别方向上所做的研究,届时欢迎大家关注。
更多阅读
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
📝 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
📬 投稿邮箱:
• 投稿邮箱:hr@paperweekly.site
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。