查看原文
其他

【源头活水】一行核心代码提升无监督/自监督模型特征表达



“问渠那得清如许,为有源头活水来”,通过前沿领域知识的学习,从其他研究领域得到启发,对研究问题的本质有更清晰的认识和理解,是自我提高的不竭源泉。为此,我们特别精选论文阅读笔记,开辟“源头活水”专栏,帮助你广泛而深入的阅读科研文献,敬请关注。

来源:知乎—沈志强

地址:https://zhuanlan.zhihu.com/p/353057838

一行核心代码提升无监督/自监督模型的特征表达能力,对下游任务比如目标检测特别有帮助

今天介绍我们一个挺有意思的工作,叫Un-Mix (Unsupervised image mixtures)[1]。该方法核心思想用一句话就能说明白:在un/self-supervised learning任务我们通常会使用更强的data augmentation的方法来迫使模型学到更强的特征表达,但是这类方法只会改变input space,即训练图片,而不会改变label space层面的东西。虽然这任务被称为无监督/自监督,但是我们依然会有人为定义的监督信息,比如positive或者negative pair,而我们这个工作希望融合input space的图片,同时分配对应的label给无监督/自监督的framework学习,这种可控的input/label spaces调整可以让模型学到更多的信息,我们还发现它对下游任务比如目标检测格外有效。
介绍完动机,我们需要解决的核心问题就很明确了:如何在无监督/自监督的框架里面根据input space的改变来重新分配label。我们在文章中讨论了以下几种情况:
1)两个分支都做mixture处理;
2)只有一个分支做mixture。
第一种情况比较简单,因为当两个分支用相同的mixture策略的话,它们之间的关系(距离)是不会有变化的,即原来positive的程度是多少现在还是多少。但是第二种情况就会复杂一些,这里我们提出self-mixtures的方法,它的意思是在一个mini-batch里面自己跟自己做mixtures,我们将一个mini-batch的图片顺序翻转了一下,这样就相当于有了两个batches,然后就可以对应weighted的融合了,这个做法主要也是为了后面label的分配和loss的计算更加简单直观。
直观来看,通过上述操作,两个branches里面样本的距离就变成了下面这个矩阵:
本质上,我们的核心算法只需要下面一行就可以了,其他都是辅助的代码:
下面是在一些小数据集上的实验结果(使用mixtures之后loss会变大且不稳定,但是精度有显著的提升):
MoCo V2作为base framework在ImageNet上的结果:
需要强调的是,因为我们自监督部分的参数完全是follow base framework默认设置,所以本质上这些提升都是我们方法的最小量,通过搜索一些对我们mixtures更合适、更友好的超参数,比如调整temperature等等,理论上还能有更大的提升。
下面是在下游检测任务PASCAL VOC和COCO上的结果:
可以看出来我们方法还是非常简单有效的,我发现它唯一的缺点就是由于mixtures之后的图片也需要forward一遍网络,所以训练时间会多一些,但是考虑到无监督/自监督本来就需要大量的计算资源,这点增加相对于性能的提升来说应该是可以接受的(对大厂来说肯定不是问题)。

参考

https://arxiv.org/pdf/2003.05438.pdf

本文目的在于学术交流,并不代表本公众号赞同其观点或对其内容真实性负责,版权归原作者所有,如有侵权请告知删除。


“源头活水”历史文章


更多源头活水专栏文章,

请点击文章底部“阅读原文”查看



分享、在看,给个三连击呗!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存