深度学习(自监督:CPC v2)——Data-Efficient Image Recognition with Contrastive Predictive Coding

本文介绍了CPCv2(对比预测编码v2)在自监督学习上的改进,相较于CPCv1,CPCv2通过增大模型容量、替换BN层、增加预测方向和采用更强的数据增强,显著提升了在ImageNet上的性能,top-1准确率从48.7%提升至71.5%。实验表明,CPCv2预训练的模型在有限数据下能达到与从头训练模型相当的性能,展示出自监督学习的强大潜力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这篇文章发表在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的。可以看到,自监督的潜力很大。

### YOLOv8在小样本情况下的应用与优化技术 对于小样本数据集训练YOLOv8模型而言,挑战主要在于如何有效利用有限的数据来提升检测性能并防止过拟合。以下是几种可以应用于YOLOv8的小样本学习策略和技术: #### 数据增强 通过各种方式增加输入图像的数量和多样性有助于提高模型泛化能力。常用的方法有随机裁剪、翻转、颜色抖动以及MixUp和CutMix等混合样例的技术[^1]。 ```python import albumentations as A from albumentations.pytorch import ToTensorV2 transform = A.Compose([ A.RandomCrop(width=450, height=450), A.HorizontalFlip(p=0.5), A.RGBShift(r_shift_limit=20, g_shift_limit=20, b_shift_limit=20, p=0.5), A.HueSaturationValue(hue_shift_limit=0, sat_shift_limit=(30, 60), val_shift_limit=0, always_apply=False, p=0.5), A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)), ToTensorV2() ]) ``` #### 转移学习 采用预训练权重初始化网络参数能够显著减少所需标注实例数量,并加速收敛过程。EfficientNet提出的复合缩放法可作为参考,在保持计算成本不变的情况下调整宽度、深度等多个维度的比例因子以适应不同规模的任务需求。 #### 正则化手段 为了抑制过拟合现象的发生,可以在损失函数中加入L2正则项;或者尝试Dropout层,它会在每次迭代时随机丢弃部分神经元连接从而迫使剩余单元更加鲁棒地编码特征信息。 #### 半监督/自监督学习框架 当仅有少量标记图片可用时,可以从大量未标签素材里挖掘有价值的知识辅助目标识别任务的学习。例如对比预测编码(CPC),其核心思想是在无教师指导下构建有意义表示空间使得相似对象彼此靠近而相异者远离。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值