在计算机视觉(CV)领域,目前的方法主要依赖大量的标注样本来学习丰富的视觉表征,从而在各项CV任务中取得较好的表现。然而在许多情况下,大规模的人工标注并不容易获得。因此,我们希望可以利用无监督方法去学习那些不带标注的样本。那么问题来了,一个样本没有了标签,我们该设计怎样的目标任务,才能促使网络学习到好的特征表示呢?
首先,我们来听一个隔壁领域的小故事。
在自然语言处理(NLP)领域,上下文信息(context)常常作为特征学习的监督信号。举个栗子,我们学生时代的老朋友——“完形填空”:给定一个很大的语料库,我们要训练一个模型,能够将每个词映射为特征向量,然后根据上下文信息去预测某个被挖掉的词。在特征空间中哪个词和上下文词距离越近,那么要填这个词的可能性越大。这可以看作是把一个无监督问题(找到单词间的相似性度量)转化为了“自监督问题”:学习一个函数,能够表示挖掉的词与他旁边的词的关系。这里的“完形填空”就作为一个pretext task(直译借口任务,或称代理任务)促进模型学习词特征,进而在很多真实任务中起到很大帮助。
于是,这样的思路被带进了CV领域。CV中的自监督学习隆重登场。
下面正式地向大家介绍——“自监督学习”(Self-supervised Learning)
自监督学习,是无监督学习的一种,即无需额外的人工标签,仅利用数据自身的信息作为监督(自己监督自己)。利用来自数据自身的监督信息,设计一个pretext task,训练网络去完成该pretext task,从而促使网络学习到数据特征。
如何检验 pretext task 的有效性,或者说学习到的数据特征是否足够好?
通过迁移学习,将pretext task中学到的特征迁移到downstream task(直译下游任务,或称后续任务)中,包括图像分类、检测、分割等任务,类似于提供了预训练模型。如果能促进这些 downstream task 中取得很好的表现,则说明学习到的特征是好的。
说到这里,想必大家可以发现,自监督学习中最重要的一环,就是如何设计一个pretext task,让模型可以学到更好的数据特征。接下来,带大家看看各种脑洞大开的pretext task。
[1] 相对位置预测:预测一张图像中随机选择的两个图像块之间的相对位置。
[2] 图像修复:预测一张图像中被遮挡的部分。
[3] 拼图游戏:将图像中打乱的9个图像块复原。
[4] 旋转角度预测:预测图像中物体的旋转角度。
[5] 图像着色:Lab图像中利用L亮度通道,预测ab色彩通道。
[6] 跨通道预测:L通道和ab通道相互预测。
[7] 计数:预测鼻子、眼睛、爪子、头的数量。
[8] 实例区分:分类,一张图像和其增强的图像为一类,和其他图像为不同类。
[9] 对比预测编码:根据“过去的”信息,预测“未来的”信息。
欲知后事如何,且待明天继续更...