无监督对比学习之假装自己有监督的SwAV

前面讲到的MOCOSimCLR把优化的方向主要放在增加负例上,费时费力,SwAV来了个返璞归真。。
在这里插入图片描述

简要步骤

  1. 每个batch输入数据为 x ∈ R N ∗ C ∗ H ∗ W x\in R^{N*C*H*W} xRNCHW, 分别经过不同的Aug, 得到 x 1 , x 2 x_1, x_2 x1,x2
  2. x 1 , x 2 x_1, x_2 x1,x2输入网络中,得到输出 z 1 , z 2 ∈ R N ∗ d z_1, z_2 \in R^{N*d} z1,z2RNd
  3. 已知K个聚类中心,表示为 C ∈ R K ∗ d C\in R^{K*d} CRKd,将输出与聚类中心计算相似度,得到相似度矩阵 Q ∈ R K ∗ N Q \in R^{K*N} QRKN,理想情况下,样本与自己的类簇中心相似度为1,与其他的为0,其实就类似于有监督任务中的one-hot label,不过作者发现soft label效果会好一些。这样每个样本又获得了一个新的表示(Codes)。
  4. 计算损失,有了 z 和 q 之后,理论上同一张图片不同view所产生的 z 和 q 也可以相互预测,作者便定义了新的loss: L ( z t , z s ) = l ( z t , q s ) + l ( z s , q t ) L(z_{t},z_{s})=l(z_{t},q_{s})+l(z_{s},q_{t}) L(zt,zs)=l(zt,qs)+l(zs,qt)
    其中 l ( z t , q s ) = − ∑ k q s ( k ) log ⁡ g p t ( k ) l(z_{t},q_{s})=- \sum _{k}q_{s}^{(k)}\log gp_{t}^{(k)} l(zt,qs)=kqs(k)loggpt(k)
    p t = e x p ( z t T c k / τ ) ∑ k ′ e x p ( z t T c k / / τ ) p_{t}= \frac{exp(z_{t}^{T}c_{k}/ \tau)}{\sum _{k^{\prime}}exp(z_{t}^{T}c_{k}// \tau)} pt=kexp(ztTck//τ)exp(ztTck/τ)
    所以题目说SwAV像是在假装自己是有监督的。。

同时SwAV也提出了一种新的数据增强方法,将不同分辨率的view进行mix。
Multi-crop策略包括了:
(1)两个标准的RandomResizedCrop;
(2)V个额外的小views。
例如对于ImageNet数据集,如下的代码中:

  1. nmb_crops = [2, 6]表示两个标准随机裁剪和六个小views;
  2. size_crops = [224, 96]表示标准RandomResizedCrop后得到的尺寸为 224 ∗ 224 224*224 224224,小views经过RandomResizedCrop后得到的尺寸为 96 ∗ 96 96*96 9696
  3. min_scale_crops = [0.14, 0.05], max_scale_crops = [1.00, 0.14]表示小views在RandomResizedCrop时的尺度为(0.05, 0.14), 标准RandomResizedCrop时的尺度为(0.14, 1.00)。
color_transform = [get_color_distortion(), RandomGaussianBlur()]
if pil_blur:
    color_transform = [get_color_distortion(), PILRandomGaussianBlur()]
mean = [0.485, 0.456, 0.406]
std = [0.228, 0.224, 0.225]
trans = []
for i in range(len(size_crops)):
    randomresizedcrop = transforms.RandomResizedCrop(
        size_crops[i],
        scale=(min_scale_crops[i], max_scale_crops[i]),
    )
    trans.extend([transforms.Compose([
        randomresizedcrop,
        transforms.RandomHorizontalFlip(p=0.5),
        transforms.Compose(color_transform),
        transforms.ToTensor(),
        transforms.Normalize(mean=mean, std=std)])
    ] * nmb_crops[i])
self.trans = trans

SwAV进一步拉近了自监督学习方法和有监督学习的距离,离有监督学习的准确率只差1.2%。这里的SwAV在大的batch(4096)上训练了800个epochs。最终两种方法的结合带来了4.2个点的提升:
在这里插入图片描述
比较不同自监督学习方法在batch_size = 256时的表现,SwAV仍然是效果最SOTA的。
在这里插入图片描述
Multi-crop的作用
如下图所示,对于自监督学习方法来说,2160+496的Multi-crop策略总是比2*224的增广效果好。
在这里插入图片描述

  • 9
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
监督对比学习是一种用于训练深度神经网络的自监督学习方法,它在没有标签的大规模未标记数据上进行训练。该方法通过使模型学习将相似样本聚集在一起,将不相似样本分开来,从而学习到有用的特征表示。 以下是几种常见的无监督对比学习方法: 1. MoCo(Momentum Contrast):MoCo是一种基于对比学习的方法,它使用了动量更新策略来增强对比学习的性能。它通过构建一个动态的字典来扩展正样本的数量,并使用动量更新策略来提高特征的一致性。 2. SimCLR(Simple Contrastive Learning):SimCLR是一种简单而有效的对比学习方法,它通过最大化正样本间的相似性并最小化负样本间的相似性来进行训练。SimCLR使用了数据增强和大批量训练等技术来提高性能。 3. SwAV(Swapping Assignments between Views):SwAV是一种基于视图交换的对比学习方法,它通过交换不同视图下的样本分配来增强对比学习过程。SwAV还使用了聚类损失来进一步优化特征表示。 4. BYOL(Bootstrap Your Own Latent):BYOL是一种基于自举的对比学习方法,它通过预测一个网络的自我编码器输出来进行训练。BYOL使用了移动平均权重和在线网络更新等技术来提高性能。 5. SimSiam(Simplified Siamese):SimSiam是一种简化的孪生网络对比学习方法,它通过最大化网络预测的一致性来进行训练。相比于传统的对比学习方法,SimSiam省略了负样本的构造过程,简化了训练过程。 这些无监督对比学习方法在图像和自然语言处理等领域都取得了很好的效果,并且被广泛应用于预训练模型的训练中。每种方法都有其独特的特点和优势,可以根据具体任务和数据集选择适合的方法进行使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值