前言

2019 年 MoCo 的横空出世,掀起了视觉自监督学习的热潮。后面 SimCLR, MoCo, BYOL, SwAV 等主流自监督学习算法相继被提出,自监督学习领域呈现出百花齐放,百家争鸣空前繁荣的景象。2021 年末 MAE 更是将自监督学习带到了一个前所未有的新高度。但是繁荣的背后,自监督学习经历了漫长的迭代和发展过程。

自监督学习有一个非常强的动机:目前,大部分神经网络的训练仍然使用的是有监督范式,需要耗费大量的标注数据,标注这些数据是非常耗时费力的。而自监督的提出就是为了打破对人工标注的依赖,即使在没有标注数据的情况下,也可以高效地训练网络。众所周知,神经网络的训练需要任务来进行驱动,所以自监督学习的核心就是来合理构造有利于模型学习的任务。目前来说构造这些任务的方法大致可以划分为三个方面:

1) 基于 pretext task ( 代理任务 )

2) 基于 contrastive learning ( 对比学习 )

3) 基于 mask image modeling ( 掩码图像模型 )

这篇文章主要介绍 基于 pretext task 的自监督学习算法是如何构造任务驱动模型来进行高效学习的。以下我们将分析 4 篇主流文章,带大家一起感受基于 pretext task 的自监督学习算法。

Relative Location

论文链接: https://arxiv.org/abs/1505.05192

Context 信息蕴含着大量的监督信息, 目前自然语言处理大量使用这样的监督信息来完成大规模的自监督训练。无独有偶,视觉领域也可以利用图片的 context 信息来完成自监督训练。作者从一张图片中随机抽取两个 patches,然后让模型来预测一个 patch 相对于另外一个 patch 的位置。作者认为: 模型只有很好地理解到图片中的各种场景,物体,以及各部分之间的相互关系,模型才能够很好地完成这个相对位置预测任务。

具体做法如上图(左)所示,从红色框中随机选取一个,然后让模型预测其相对于蓝色方框的位置。具体网络结构如上图(右)所示:最开始让两个网络分别提取两个 patches 的特征,然后再在最后面进行融合。

预测两个 patches 的相对位置简单合理,但是如何去规避无效解是模型设计中需要考虑的重点。经过作者长期的探索,以下两种情况容易导致无效解:

1) low-level 特征,例如边界样式和纹理的连续性可以使得模型直接预测两个 patches 的相对位置,而不用去理解其内容。

2) 色差的影响。由于不同颜色的光的波长不一样,凸透镜会将不同颜色的光投影到不同的位置上。通常情况下,绿色的光相较于蓝色和红色的光更靠近中心一点。那么,模型可以学习到不同 patch 相较于凸透镜中心的位置关系。利用这样的信息,模型也可以学习到两个 patches 之间的相对位置关系,而不用去理解其内容。

针对上面两种情况作者分别提出了解决方案:

1) 采样 patch 的时候中间留有 gap(不进行连续采样),同时对这个 gap 具体数值选取也进一步引入了随机波动。

2) 针对色差问题,作者提出随机抛弃掉每个 patch RGB 三个通道中的两个通道,并用高斯噪声对丢弃掉的两个通道进行填充。

通过以上设计,模型取得了不错的效果。

Colorization

论文链接: https://arxiv.org/abs/1603.08511

作者主要通过构造一个图片着色任务来让模型学习图片的语义信息。因为作者认为: 只有很好地理解到了各种场景的独立的语义信息,以及他们之间的联系,模型才能够很好完成这项任务。

具体做法如上图所示,作者将图片转换到 CIE Lab 颜色空间,然后将 L 通道喂入模型,然后让模型去预测 a, b 通道的数值。但是,如何设计损失函数非常有考究。

如果直接通过回归的方式来完成 a, b 通道的预测,那么最终的着色效果是不太理想的,最终的图片偏灰度图。

因为图片中每个物体可能有多个可能的着色效果,所以作者将其转换成一个分类问题,并进一步提出 class rebalancing 来平衡不同像素点对模型训练的影响。

Context Encoders

论文链接: https://arxiv.org/abs/1604.07379

与上面讲到的 Colorization 类似,Context Encoders 也是通过设计重建原图来使模型学习到图片的语义信息。但是与 Colorization 不同,Context Encoders 是从空间维度对图片进行重建,而 Colorization 是从图片的通道维度进行重建。作者认为:模型只有很好地理解到整张图片的语义信息,才能够很好地完成这个重建任务。

具体做法,如上图所示: 作者 mask 掉一部分图片信息,再将 mask 过的图片喂入网络,然后让 mask 掉的部分对预测的部分进行监督,并使用 L2 loss 驱动模型学习。到此为止,通过对图片进行重建来进行自监督学习的整个流水线已经搭建完成。但是作者发现,仅仅使用 L2 loss 容易使得模型的重建结果非常模糊,而没有很好地重建出图片的高频信号。这是因为,回归平均值对 L2 loss 来说更易于优化。

为了解决上述问题,作者进而提出添加了一个对抗损失函数,这个函数的引入使得重建的图片更加 sharp,进而提高了模型对图片语义的理解能力。

最后,作者探索了如何来 mask 图片,最终发现采用 Central region 的模型的泛化能力不是特别好,而采用 Random block 和 Random region 的模型取得不错且相似的结果。

Rotation Prediction

论文链接: https://arxiv.org/abs/1803.07728

作者希望通过让模型去识别图片的旋转角度,让模型具有理解图片语义信息的能力。为了完成这个任务,作者认为:模型只有很好地识别并提取图片中的主要物体,并理解其和图片中其他景物的语义信息,才能够完成这个旋转角度识别任务。其具体操作如下:

首先定义多种旋转操作,将旋转后的图片喂入网络,然后对模型进行分类任务训练,让模型输出当前图片被施加了何种旋转操作。通过这样一个简单的任务,作者发现,模型具备了提取图片中主要物体,并理解图片语义信息的能力。除此之外,作者继续分析了该方法成功的原因:

1)相较于其他操作,旋转操作没有遗留任何明显的 low-level 线索让模型轻易完成这个旋转识别任务。所以,模型必须得去理解图片的语义信息。

2)识别旋转角度是一个定义非常完善的任务。因为,大多数情况下图片中的物体总是呈现直立的状态,所以理想情况下,模型可以清楚地识别图片被旋转了多大的角度。除非,物体是类似于圆形的形状。

通过上面四个例子,我们可以发现,基于 pretext task 的自监督学习算法都具有以下两个特点:

1)一个定义良好的任务,例如识别旋转角度和相对位置。

2)合理的限制条件,例如引入何种条件才能够避免模型得到无效解。

这就是本期关于基于 pretext task 的自监督学习算法的全部内容,我们希望通过这四个经典例子让读者对该类型的自监督学习算法有个简单的了解。MMSelfSup 目前涵盖了大部分主流自监督学习算法,欢迎大家使用和 PR。

自监督学习系列(一):基于 Pretext Task相关推荐

  1. 自监督学习系列(二):基于 Contrastive Learning

    对⽐学习属于⾃监督学习,所以对⽐学习是没有标签的.对⽐学习是通过构造正负样例来学习特征,如何构造正负样例对对⽐学习来说很重要. 对于⼀个输⼊样本x来说,存在与之相似的样本x+以及与之不相似的样本x-, ...

  2. 深度学习网络backbone?head、neck、bottleneck、GAP、Embedding、pretext task、downstream task、temperature parameter

    一些术语: backbone这个单词原意指的是人的脊梁骨,后来引申为支柱,核心的意思.在神经网络中,尤其是CV领域,一般先对图像进行特征提取(常见的有vggnet,resnet,谷歌的inceptio ...

  3. 【知识图谱系列】基于互信息最大化的图谱预训练模型DGI InfoGraph

    作者:CHEONG 公众号:AI机器学习与知识图谱 研究方向:自然语言处理与知识图谱 本文介绍两篇基于互信息最大化的图谱预训练模型DGI(ICLR 2019)和InfoGraph(ICLR 2020) ...

  4. 论文笔记|AAAI2023:ESPT: A Self-Supervised Episodic Spatial Pretext Task for Improving Few-Shot Learning

    这篇论文的题目是 ESPT: A Self-Supervised Episodic Spatial Pretext Task for Improving Few-Shot Learning,提出了用于 ...

  5. 2Python全栈之路系列之基于socket实现聊天机器人

    Python全栈之路系列之基于socket实现聊天机器人 通过socket实现局域网内的聊天工具. service.py文件如下: #!/usr/bin/env python # _*_ coding ...

  6. Docker系列06—基于容器制作镜像并上传到Docker Registry

    Docker系列06-基于容器制作镜像并上传到Docker Registry 1.制作镜像 1.1 镜像的生成途径 基于容器制作 dockerfile,docker build 本篇主要详细讲解基于容 ...

  7. 【oracle灾备方案系列】基于DDS的Oracle复制容灾方案(三)

    <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> [oracle ...

  8. 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包

    MSBuild 的 Task 为我们扩展项目的编译过程提供了强大的扩展性,它使得我们可以用 C# 语言编写扩展:利用这种扩展性,我们可以为我们的项目定制一部分的编译细节.NuGet 为我们提供了一种自 ...

  9. SpringSecurity系列之基于数据库认证

    SpringSecurity系列之基于数据库认证 本文中所使用的技术栈如下: SpringBoot 2.6.2 MyBatis Plus 3.5.0 SpringSecurity 5.6.1 一.创建 ...

  10. 华为#S系列交换机和E系列交换机基于IP网段配置限速

    S系列交换机(S1700除外)和E系列交换机基于IP网段配置限速 是通过ACL和MQC实现的,关键配置如下: 基于源地址 system-view //进入系统视图 [HUAWEI] acl 3000 ...

最新文章

  1. exfat 分配单元大小_知到金融理论与实务第一单元章节测试答案
  2. 设计包含min函数的栈
  3. TF版本升级问题集合:成功解决由于不同的TensorFlow版本之间某些函数的用法引起的错误
  4. 快速搭建基于 Serverless 的 .NET Core 数据库应用
  5. vivo升级android10系统,官方确认vivo NEX旗舰版会直接升级到Android10
  6. 使用BurpSuite抓取HTTPS网站
  7. Tornado/Python 学习笔记(一)
  8. int64 java_为什么json 不能使用 int64类型
  9. django虚拟环境搭建
  10. 富人有面子,穷人没面子的真相
  11. MAX422与422转USB及485以及232接线方法
  12. 7Zip下载-适用 Windows 解压软件
  13. 技嘉z77主板msata速度_z77-d3h_技嘉z77d3h说明书_技嘉z77 d3h msata
  14. 无法确认设备和计算机之间的连接,如何解决“爱思助手”无法识别设备或连接超时等故障?...
  15. 中山大学3D游戏设计读书笔记 unity3D Note9
  16. EPOCH、INTERATION、BATCH_SIZE的区别
  17. Hive自定义函数报错10014 :No matching method for class
  18. G.1用python进行精细中文分句(基于正则表达式),HarvestText:文本挖掘和预处理工具
  19. python实现在excel文件中写入和追加内容
  20. 有道云笔记markdown教程

热门文章

  1. 用three.js渲染上海外滩模型
  2. 深入了解C/C++开发就业前景如何?
  3. oracle+ebs+fsg报表,EBS 11i FSG报表用XML publish输出问题!!!!
  4. window.open在苹果手机上失效的问题
  5. 互联网+O2O 的商业模式
  6. 两组的数据平均值合并_数据平均值合并计算 合并计算求平均值
  7. 怎样让健康码截图合并一张图片_健康码拼图
  8. 绑定变量窥视 oracle,Oracle bind peeking(绑定变量窥视)
  9. 封装获取非行内样式函数
  10. cf 467 B. Sleepy Game