当前位置:网站首页>深度学习(自监督:CPC v2)——Data-Efficient Image Recognition with Contrastive Predictive Coding
深度学习(自监督:CPC v2)——Data-Efficient Image Recognition with Contrastive Predictive Coding
2022-07-28 05:22:00 【菜到怀疑人生】
前言
这篇文章发表在ICML 2020上。
这篇文章对CPC v1进行了改进,在ImageNet上的top-1准确率从 48.7%提升至71.5%。
本文将简单介绍CPC v2,实验部分在此不总结。
论文的Figure 1给出了一个很有意思的图,如下图:
蓝线为利用CPC v1 pretrain一个ResNet,将其在ImageNet上finetune后的性能,红线为ResNet直接在ImageNet上training from scratch,横轴为finetune/train用到的训练数据,可以看到,随着训练数据的减少,training from scratch的模型性能下降尤为明显,并且当使用全部数据训练模型时,finetune的模型性能也比traning from scratch的效果好。这表明相比于training from scratch的模型,使用自监督pretrain的模型,利用更少的训练数据,就可以达到相似的性能,即将自监督训练好的模型,应用到下游任务时,可能只需要少量数据就可以达到不错的性能。
CPC v1介绍

上图是CPC v2的模型结构,为了方便说明,我把它放在了CPC v1一节中。
- 输入图像会被分成若干个overlapping的patch, X i , j X_{i,j} Xi,j表示第 i i i行,第 j j j列的patch
- 所有的patch都会经过一个特征提取器提取特征(对应蓝色的模型),得到一系列的特征向量 Z i , j Z_{i,j} Zi,j
- 将位于第 i i i行第 j j j列的特征向量 Z i , j Z_{i,j} Zi,j,以及位于第 i i i行第 j j j列上方的特征向量 Z u , j Z_{u,j} Zu,j( u < i u<i u<i) concat在一起,经过一个Context network G ϕ G_{\phi} Gϕ(对应红色的模型)处理,得到一个context vector C i , j C_{i,j} Ci,j
- 对 C i , j C_{i,j} Ci,j施加一个线性变化,线性变化矩阵为 W k W_k Wk,即 Z ^ i + k , j = W k C i , j \hat Z_{i+k,j}=W_k C_{i,j} Z^i+k,j=WkCi,j,利用 Z ^ i + k , j \hat Z_{i+k,j} Z^i+k,j与 Z i + k , j Z_{i+k,j} Zi+k,j进行对比学习,可以简单理解为利用一张图像上半部分的特征,预测图像下半部分的特征
对比学习的损失函数为InfoNCE,如下:
负例 Z l Z_l Zl来自于其他batch的图像块,或是同一张图像的其他图像块。
个人观点:CPC v1的操作不难理解,以人为例,如果我们理解一只狗长什么样,那我们看到一张图像中狗的上半部分,自然能联想到图像下半部分狗的形状。想让InfoNCE损失函数下降,就必须建立图像中狗的上半部分与下半部分的联系,这些联系可能可以让模型理解狗长什么样,即狗具有什么特征。
CPC v2介绍
对于自监督而言,trick对性能的影响非常大,这点和之前研究的continual learning很不一样。
相比于CPC v1,CPC v2引入了更多trick,具体而言
- 使用更大的模型,CPC v1只使用了ResNet-101中的前三个residual stack,CPC v2将模型加深为ResNet-161(ImageNet top-1准确率提升5%),同时提高了输入图像块的分辨率(从60x60变为80x80,ImageNet top-1准确率提升2%)。
- 由于CPC v1的预测只和若干个patch有关,而BN会引入其他patch的信息,类似于图像生成,BN算法会损害CPC v1的性能,作者利用层归一化替换BN,ImageNet top-1准确率提升2%。
- 由于大模型更容易过拟合,作者提升了自监督任务的难度,预测一个patch,CPC v2用到了上下左右四个方向的feature vector,而CPC v1只用到了上方的feature vector。由于CPC v2接触的语义信息更多,提取出与下方patch相关的语义信息的难度也会增大。ImageNet top-1准确率提升2.5%。
- 使用更好的数据增强,首先随机取出rgb三通道中的两个通道,ImageNet top-1准确率提升3%,接着施加一些几何、颜色、弹性变形等数据增强,ImageNet top-1准确率提升4.5%,可见数据增强对自监督影响很大。
上述trick对CPC v1的影响如下图
实验
实验部分不做过多总结,这里给出比较有趣的部分。
ResNet200用有监督pretrain模型,接着接入线性分类器finetune,ResNet33用CPC v2 pretrain模型,接着接入线性分类器finetune(此时特征提取器也会finetune,而不是冻结)。
从上表可以看到,使用CPC v2 pretrain好的ResNet33,在数据量较少时,性能比ResNet200要好,即使使用全部训练数据,效果依然更好,而且注意到ResNet33模型容量是不如ResNet200的。可以看到,自监督的潜力很大。
边栏推荐
猜你喜欢

Mars number * word * Tibet * product * Pingtai defender plan details announced

使用pyhon封装一个定时发送邮件的工具类

On July 7, the national wind 24 solar terms "Xiaoshu" came!! Attachment.. cooperation.. completion.. advance.. report

Kotlin语言现在怎么不火了?你怎么看?

DataX installation and use

transformer的理解

【5】 Redis master-slave synchronization and redis sentinel (sentinel)

面试官:让你设计一套图片加载框架,你会怎么设计?

Spark中的Structured Streaming

知识点21-泛型
随机推荐
【四】redis持久化(RDB与AOF)
Flume installation and use
Xshell suddenly failed to connect to the virtual machine
更新包与已安装应用签名不一致
Distributed cluster architecture scenario optimization solution: distributed ID solution
区分实时数据、离线数据、流式数据以及批量数据的区别
小程序开发要多少钱?两种开发方法分析!
Assembly打包
NLP中常用的utils
小程序商城制作一个需要多少钱?一般包括哪些费用?
word2vec和bert的基本使用方法
Sorting and paging, multi table query after class exercise
微信小程序开发制作注意这几个重点方面
【七】redis缓存与数据库数据一致性
svn incoming内容无法更新下来,且提交报错:svn: E155015: Aborting commit: XXX remains in conflict
分布式集群架构场景优化解决方案:Session共享问题
【五】redis主从同步与Redis Sentinel(哨兵)
Automatic scheduled backup of remote MySQL scripts
Interface anti duplicate submission
Wechat applet development and production should pay attention to these key aspects