自监督学习(二十)Self-Supervised Learning of Pretext-Invariant Representations

Introduction

在对比学习方法中,决定其性能的关键因素是正负样本选取的合理性,如果样本选取不合理,会导致网络的训练出现震荡,甚至学不到任何的信息。因此,对比学习的方法很多都致力于研究如何获取高质量的正负样本。该文章提出了Pretext-Invariant Representation Learning (PIRL)的方法。 该方法假设图像经过变换后语义特征是不变的,这和对比学习的思路一致。作者在文中使用之前介绍的jigsaw方法产生増广样本,也就是一次把图像分成九份,然后送到孪生网络中提取特征,通过聚合和映射得到増广样本的表征。増广样本的表征需要和原始图像的表征相似,和负样本的相异。另外,作者还提出了memory bank的方法,保存原图像的表征,并通过滑动平均的方法进行更新,为预训练提供负样本。
本文收录在CVPR 2020,作者Ishan Misra发表过若干篇有影响力的自监督表示学习的文章。文章地址

PIRL: Pretext-Invariant Representation Learning

本部分给出PIRL方法的介绍,包括损失函数的设计,memory bank的设计和网络结构的细节等。

Overview of PIRL

总体说来,该方法还是对比学习的思路,目的是让原图及其变换后的图像特征相似,让不同图像之间的特征相异,但是在具体操作的过程中有一些改进,使预训练的效果得到了很大的提升。
首先我们定义 D D D为图像的集合, D = { I 1 , I 2 , . . . , I ∣ D ∣ } D=\{I_1,I_2,...,I_{|D|}\} D={I1,I2,...,ID} I ∈ R H × W × 3 I \in R^{H \times W \times 3} IRH×W×3表示单张图片, T T T表示数据变换的集合, I t I^t It指对数据 I I I做数据变换 t t t v I = θ ( I ) v_I=\theta(I) vI=θ(I)表示图像 I I I经过网络提取之后得到的特征。对于 v I v_I vI v I t v_{I^t} vIt,损失函数为:
h ( v I , v I t ) = exp ⁡ ( s ( v I , v I t ) / τ ) exp ⁡ ( s ( v I , v I t ) / τ ) + ∑ I ′ ∈ D N exp ⁡ ( s ( v I t , v I ′ ) ) / τ h(v_I,v_{I^t})=\frac{\exp(s(v_I,v_{I^t})/\tau)}{\exp(s(v_I,v_{I^t})/\tau)+\sum_{I^{'}\in D_N}\exp(s(v_{I^t},v_{I^{'}}))/\tau} h(vI,vIt)=exp(s(vI,vIt)/τ)+IDNexp(s(vIt,vI))/τexp(s(vI,vIt)/τ)
其中, I ′ I^{'} I为负样本。 s s s表示特征之间的相似度,一般使用余弦相似度。
在本文中,作者不是直接使用CNN提取得到的特征,而是将其又过了一个映射层(MLP之类的),原图像的映射函数表示为 f f f,变换图像的表示为 g g g,使用NCE loss作为损失函数:
L N C E ( I , I t ) = − log ⁡ ( h ( f ( v I ) , g ( v I t ) ) ) − ∑ I ′ ∈ D N log ⁡ ( 1 − h ( f ( v I t ) , g ( v I ′ ) ) ) L_{NCE}(I,I^t)=-\log(h(f(v_I),g(v_{I^t})))-\sum_{I^{'}\in D_N}\log (1-h(f(v_{I^t}),g(v_{I^{'}}))) LNCE(I,It)=log(h(f(vI),g(vIt)))IDNlog(1h(f(vIt),g(vI)))
使用以上损失函数可以保证正样本之间互相接近,负样本之间相互原理。不过这个也不是最终的损失函数,最终的损失函数在下面介绍。

Memory Bank

本文提出了使用memory bank来保存图像的特征,并在训练中起到提供负样本。memory bank可以理解为一个字典,其中原始图像 I I I和特征 m I m_I mI有一个映射的关系,每一个循环之后, m I m_I mI会议滑动平均的方式更新。在训练过程中, m I m_I mI有两个作用,一个是提供足量的负样本,避免batchsize过大的问题,另一个是为原始图像 I I I和变化图像 I t I^t It之间提供一个中间的基准,帮助训练。经过memory bank之后的损失函数如下:
L ( I , I t ) = λ L N C E ( m I , g ( v I t ) ) + ( 1 − λ ) L N C E ( f ( v I ) ) L(I,I^t)=\lambda L_{NCE}(m_I,g(v_{I^t}))+(1- \lambda)L_{NCE}(f(v_I)) L(I,It)=λLNCE(mI,g(vIt))+(1λ)LNCE(f(vI))
也就是说经过上述的损失函数的约束,网络在学习过程中,会使 I I I I t I^t It的特征趋向于 m I m_I mI。同时还会从memory bank中随机去除任意多的 m I ′ m_{I^{'}} mI
总的流程如图所示:
在这里插入图片描述

Networks Architecture

作者使用ResNet50作为backbone, v I v_I vI为globalpool之后的输出,对于原始图像,映射函数 f f f为一个 2048 × 128 2048\times 128 2048×128的线性运算层。对于变换图像 g g g,首先将图像切分为九块,每一个patch记为 I p 0 . . . . I p 8 I_{p0}....I_{p8} Ip0....Ip8,然后打乱之后依次送入backbone,得到特征 v I p 1 . . . . . v_{I_{p1}}..... vIp1.....。之后将这九个特征concate到一起,通过 g g g得到最后的特征。

Experimental results

实验部分,主要看该方法在目标检测和线性分类任务上的性能

Object Detection

对于目标检测任务,作者主要评估其在VOC07+12上的检测效果。同种实验条件下,本文的方法可以取得最好的成绩,同时作者也列出了一些其他的方法,这些方法加了一些其他的trick,会超过本方法。
在这里插入图片描述

Image Classification with Linear Models

固定特征提取层,只训练线性分类层,得到的结果如下:
在这里插入图片描述
在ImageNet,VOC07,Places205和iNat数据集上的效果表明,该方法可以取得最好的效果,不过仍然比ImageNet的方法有差距。

Conclusion

本文介绍的方法可以有效解决batchsize过大的问题,很有启发效果。但是该方法需要一个memory bank保存所有图像的特征,这非常耗费内存,而且更新也非常缓慢。后面我们会介绍MoCo方法,他提出了一种非常有效的方案,在很多的任务上取得了SOTA的效果。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
自我监督学习是一种机器学习方法,通过对数据进行合理的预测任务,从中获得有用的表示。与传统的监督学习不同,自我监督学习不需要人工标注的标签来指导训练,而是利用数据自身的信息进行训练。 自我监督学习的基本思想是从未标记的数据中构造有意义的标签,然后将这些标签用作训练数据,以学习有用的特征表示。通过对输入数据进行某种形式的变换或遮挡,可以生成一对相关的样本。其中一个样本称为正样本,另一个则被视为负样本。例如,在图像领域中,可以通过将图像进行旋转、裁剪或遮挡等变换来生成正负样本对。模型的目标是通过学习从一个样本到另一个样本的映射,从而使得正样本对之间的相似度更高,负样本对之间的相似度更低。 自我监督学习在许多任务中都取得了很好的效果。例如,在自然语言处理任务中,可以通过遮挡句子中的某些单词或短语来生成正负样本对,然后通过学习从一个句子到另一个句子的映射来进行训练。在计算机视觉任务中,可以通过图像的旋转、裁剪、遮挡或色彩变换等方式来生成正负样本对。 自我监督学习的优点是不需要人工标注的标签,可以利用大量的未标记数据来进行训练,从而扩大训练数据的规模。此外,自我监督学习还可以通过学习到的特征表示来提高其他任务的性能,如分类、目标检测和语义分割等。 总之,自我监督学习是一种有效的无监督学习方法,通过构造有意义的预测任务,从未标记的数据中学习有用的特征表示。它在各种任务中都有广泛的应用,并具有很高的潜力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值