图解自监督学习(CV)

图解自监督学习(CV)

译自:https://amitness.com/2020/02/illustrated-self-supervised-learning/

作者:Amit Chaudhary

注:译者在某些地方对原文的表述做了调整,使其适合汉语的阅读习惯,并在某几处有译者自己的理解。大家有能力的话可以看一下英文原文。

在 Yann Lecun 的一次演讲中,作者首次了解到了自监督学习,他在那里介绍了“蛋糕类比”来说明自监督学习的重要性。 在谈话中,他说:

“If intelligence is a cake, the bulk of the cake is self-supervised learning, the icing on the cake is supervised learning, and the cherry on the cake is reinforcement learning (RL).”

“如果人工智能是一块蛋糕,那么大部分蛋糕是自监督学习,监督学习是蛋糕上的冰激凌,而强化学习则是蛋糕上的樱桃。”

尽管这个类比存在争议,但我们已经看到了自监督学习在自然语言处理领域的影响,其中最近的(Word2Vec、Glove、ELMO、BERT)已经取得了SOTA的结果。

为了了解计算机视觉领域自监督学习的现状,作者通过 Jing 等人最近的一篇综述论文了解了现有的关于将自监督学习应用于计算机视觉的工作。

本文将解释什么是自监督学习,总结并通过图示的方式直观地展示自监督学习中的一些问题的建模方式。

自监督学习简介

为什么要自监督学习

要在深度神经网络中进行有监督学习,我们需要足够的标注数据。 但是人工标注数据是一个既耗时又昂贵的过程。 还有一些领域,例如医疗领域,获取足够的数据本身就很困难。 因此,当前有监督学习范式的一个主要瓶颈是如何获得大量的标注数据。

在这里插入图片描述

什么是自监督学习

自监督学习是通过下面这种方式,将无监督学习问题转化为有监督问题的方法:

我们能否以这样一种方式设计任务:即我们可以从现有图像中生成几乎无限的标签,并使用它来学习特征表示?
在这里插入图片描述

在自监督学习中,我们通过创造性地利用数据的某些属性来设置伪监督任务来替换人工注释的部分。 例如,这里不是将图像标记为猫/狗,而是将它们旋转 0/90/180/2700/90/180/2700/90/180/270 度并训练模型来预测旋转。不同于标注猫 / 狗,对图像进行旋转并记录旋转标签可以有机器自动完成,因此,我们可以从互联网上的数百万张图像中生成几乎无限的训练数据。下图展示了整个端到端自监督训练的工作流。
在这里插入图片描述

在我们从数以百万计的图像中学习好特征表示后,我们可以利用迁移学习在一些有监督的任务(如仅有少量样本的猫狗分类任务)上进行微调。

在这里插入图片描述

自监督学习方法综述

现在让我们了解一下研究人员提出的各种方法来,利用图像和视频特性并将自监督学习应用于表征学习。

至于自监督学习任务如何设计,Yann LeCun 在 AAAI 2020 上的演讲也提到过:

  1. 根据所有待预测部分之外的信息预测任意一部分信息。
  2. 根据过去预测未来。
  3. 根据过去最近的情况预测未来。
  4. 根据现在预测过去。
  5. 根据底层信息预测顶层信息。
  6. 根据可见的信息预测不可见的信息。
  7. 假设有一部分输入数据未知,并且对其进行预测。

对该演讲有兴趣的读者,可参考:https://www.bilibili.com/video/BV1V7411573v?from=search&seid=12729545036652967460

A 基于图像的自监督学习

Pattern 1 重构

1 图像着色

如果我们通过将灰度应用于数百万免费提供的图像来构建训练样本对对(灰度、彩色)图像会怎样?

在这里插入图片描述

我们可以使用基于全卷积神经网络的编码器-解码器架构(自编码器),来计算预测和实际彩色图像之间的 L2 损失。

在这里插入图片描述

为了完成着色任务,模型必须了解图像中存在的不同对象和相关部分,如此它才可以用相同的颜色绘制这些部分。 这样,学习到的表征对于下游任务会很有用。

在这里插入图片描述

可参考的相关工作:

  • Colorful Image Colorization
  • Real-Time User-Guided Image Colorization with Learned Deep Priors
  • Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification

2 图像超分辨

如果我们通过对数百万图像进行下采样来构造训练样本对(小图像放大)图像会怎样?

在这里插入图片描述

基于 GAN 的模型(例如 SRGAN)在此任务中很常见。 生成器使用全卷积网络获取低分辨率图像并输出高分辨率图像。 使用均方误差和内容损失来比较实际和生成的图像,以模仿人类的图像感知质量比较。 二分类鉴别器获取图像并对其进行分类,它是实际的高分辨率图像 (1) 还是假生成的超分辨率图像 (0)。 两个模型之间的这种相互对抗作用会使得生成器学习能够生成具有精细细节的图像。

在这里插入图片描述

学习到语义特征的生成器和鉴别器都可以用于下游任务阶段。

可参考的相关工作:

  • Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network

3 图像修复

如果我们通过随机删除部分图像来构建训练样本对(损坏的、固定的)图像会怎样?

在这里插入图片描述

与超分辨率类似,我们可以利用基于 GAN 的架构,其中生成器可以学习如何重构图像,而鉴别器学习将真实图像和生成的图像分开。

在这里插入图片描述

对于其在下游任务的表现,Pathak 等人。 已经表明,这样的生成器学习的语义特征在 PASCAL VOC 2012 语义分割比赛上比随机初始化的模型提高了 10.2%,同时对分类和对象检测有< 4% 的提升。

可参考的相关工作:

  • Context encoders: Feature learning by inpainting

4 Cross-Channel 预测

如果我们从图像的一个通道预测另一个通道并将它们组合起来重构原始图像会怎样?

Zhang 等人在他们名为 Split-Brain Autoencoder 的工作中应用了这个想法。 为了理解论文的idea,让我们以番茄的彩色图像为例。

在这里插入图片描述

对于这张彩色图像,我们可以将其拆分为灰度和颜色通道。 然后,对于灰度通道,我们预测颜色通道,对于颜色通道部分,我们预测灰度通道。 将两个预测通道 X1X_1X1X2X_2X2 组合起来以完成对原始图像的重构。 我们可以将此重构与原始彩色图像进行比较,以计算损失并更新模型。

同样的想法也可以应用于具有深度的图像,我们使用来自 RGB-HHA 图像的颜色通道和深度通道来相互预测并比较输出图像和原始图像。

在这里插入图片描述

可参考的相关工作:

  • Split-Brain Autoencoders: Unsupervised Learning by Cross-Channel Prediction

Pattern 2 常识任务

1 拼图任务

如果我们通过随机打乱图像块来构建训练样本对(打乱、有序)拼图会怎样?

在这里插入图片描述

即使只有 9 个图像块,也可以有 362880 个可能的 puzzles。 为了解决这个问题,仅使用所有可能排列的一个小子集,例如具有最高汉明距离的 64 个排列。

在这里插入图片描述

假设我们使用一个排列来打乱图像,如下所示。 让我们使用总共 64 个可用排列中的排列数 64。

在这里插入图片描述

现在,为了复原出原始图像块关系,Noroozi 等人 提出了一种称为上下文无关网络(CFN)的神经网络,如下所示。 在这里,单个图像块通过具有共享权重的相同孪生卷积层。 然后,将这些特征组合,并送入一个全连接层中。 在输出中,模型必须从 64 个可能的类中预测使用了哪种排列。

在这里插入图片描述

为了完成拼图任务,模型需要学习识别物体中组件的组装方式、物体不同部分的相对位置以及物体的形状。 因此,这些表示对于分类和检测中的下游任务很有用。

可参考的相关工作:

  • Unsupervised learning of visual representations by solving jigsaw puzzles

2 上下文预测

如果我们通过从大型未标记的图像集合中随机获取一个图像块及其周围的一个相邻块来构建训练样本对(图像块,相邻图像块)会怎样?

在这里插入图片描述

为了完成这个辅助任务,Doersch 等人 使用了类似于拼图任务的结构。图像块通过两个孪生卷积网络来提取特征,拼接特征并在 8 个类别上进行分类,表示 8 个可能的邻块位置。

在这里插入图片描述

可参考的相关工作:

Unsupervised Visual Representation Learning by Context Prediction

3 几何变换识别

如果我们通过从大型未标记图像集合中随机旋转图像(0、90、180、270)来构建训练样本对(旋转图像、旋转角度)会怎样?

在这里插入图片描述

为了解决这个前置任务,Gidaris 等人 提出一种架构,其中旋转图像通过卷积网络,网络需要将输入图像分类为 4 类(0/90/270/3600/90/270/3600/90/270/360 度)。

在这里插入图片描述

虽然看起来是一个非常简单的任务,但该模型必须了解图像中对象的位置、类型和姿势才能完成此任务,因此,学习到的表示对于下游任务会很有用。

可参考的相关工作:

Unsupervised Representation Learning by Predicting Image Rotations

Pattern 3 自动生成标签

1 图像聚类

如果我们通过对大型未标记图像集合执行聚类来构建训练样本对(图像,簇数)会怎样?

在这里插入图片描述

为了解决这个前置任务,Caron 等人 提出一种称为深度聚类的架构。 在这里,首先对图像进行聚类,并将聚类用作类。 模型的任务是预测输入图像的集群标签。

在这里插入图片描述

可参考的相关工作:

  • Deep clustering for unsupervised learning of visual features
  • Self-labelling via simultaneous clustering and representation learning
  • CliqueCNN: Deep Unsupervised Exemplar Learning

2 影像合成

如果我们通过使用游戏引擎生成合成图像并使其适应真实图像来构建训练样本对(图像、属性)会怎样?

为了解决这个辅助任务,Ren 等人 提出了一种架构,其中权重共享的卷积网络在合成图像和真实图像上进行训练,然后将合成图像和真实图像送入鉴别器,鉴别器学习分类输入是合成图像还是真实图像。 由于对抗性作用,真实图像和合成图像之间的共享表征将会变得更好。

在这里插入图片描述

B 基于视频的自监督学习

如果我们通过从运动物体的视频中混洗帧来构建训练样本对(视频帧,正确/不正确的顺序)会怎样?

在这里插入图片描述

为了完成这个辅助任务,Misra 等人 提出了一种架构,其中视频帧通过权重共享的卷积网络,模型必须确定帧的顺序是否正确。 这样做时,模型不仅需要学习空间特征,还需要考虑时间特征。

在这里插入图片描述

可参考的相关工作:

  • Shuffle and Learn: Unsupervised Learning using Temporal Order Verification
  • Self-Supervised Video Representation Learning With Odd-One-Out Networks

Citation Info (BibTex)

如果读者觉得本文对你的研究工作有帮助的话,可以引用原作者的博客:

@misc{chaudhary2020selfsupervised,title   = {The Illustrated Self-Supervised Learning},author  = {Amit Chaudhary},year    = 2020,note    = {\url{https://amitness.com/2020/02/illustrated-self-supervised-learning}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习中的归纳偏置

机器学习中的归纳偏置 带着偏见看世界&#xff0c;否则你根本没有看待世界的方式。 本文主要参考整理自知乎问题&#xff1a;如何理解Inductive bias&#xff1f; No-Free-Lunch&#xff08;NLF&#xff09;定理指出学习是不可能的&#xff0c;除非有先验知识。通常情况下&…

【c语言数据结构笔记】1.2 数据结构

1.2数据结构 数据元素并独立 结构实体关系 形式定义&#xff08;D&#xff0c;S&#xff09; 其中D是数据元素的有限集&#xff0c;S是D上关系的有限集 eg&#xff1a;12位数&#xff1a;132423451233 分成三组四位数 次序关系<a1,a2><a2,a3> 遵守次序关系 eg&…

使用Apex进行混合精度训练

使用Apex进行混合精度训练 转自&#xff1a;https://fyubang.com/2019/08/26/fp16/ 你想获得双倍训练速度的快感吗&#xff1f; 你想让你的显存空间瞬间翻倍吗&#xff1f; 如果我告诉你只需要三行代码即可实现&#xff0c;你信不&#xff1f; 在这篇博客里&#xff0c;瓦砾…

【数据结构1.3笔记】研究内容

1.3研究内容 数据结构&#xff08;D&#xff0c;S&#xff09; {逻辑结构&#xff1a; {物理结构&#xff08;存储结构&#xff09; {数据的运算 1.逻辑结构 1 集合&#xff1a;集合&#xff0c;没有逻辑关系 2 线性结构 “一对一” 3树形结构 层次关系 4图形结构 练习&…

2019年蓝桥杯第一题

第一题 标题&#xff1a;组队&#xff08;本题总分&#xff1a;5 分&#xff09; 作为篮球队教练&#xff0c;你需要从以下名单中选出 1 号位至 5 号位各一名球员&#xff0c; 组成球队的首发阵容。 每位球员担任 1 号位至 5 号位时的评分如下表所示。请你计算首发阵容 1 号位…

深度学习编译:MLIR初步

深度学习编译MLIR初步 深度模型的推理引擎 目前深度模型的推理引擎按照实现方式大体分为两类&#xff1a;解释型推理引擎和编译型推理引擎。 解释型推理引擎 一般包含模型解析器&#xff0c;模型解释器&#xff0c;模型优化器。 模型解析器负责读取和解析模型文件&#xff…

深入浅出LLVM

深入浅出LLVM 转自&#xff1a;https://www.jianshu.com/p/1367dad95445 什么是LLVM&#xff1f; LLVM项目是模块化、可重用的编译器以及工具链技术的集合。 美国计算机协会 (ACM) 将其2012 年软件系统奖项颁给了LLVM&#xff0c;之前曾经获得此奖项的软件和技术包括:Java、A…

一分钟系列:什么是虚拟内存?

一分钟系列&#xff1a;什么是虚拟内存&#xff1f; 转自&#xff1a;https://mp.weixin.qq.com/s/opMgZrXV-lfgOWrNUMKweg 注&#xff1a;一分钟系列的篇幅都不长&#xff0c;适合吃饭蹲坑、地铁公交上食用&#xff5e; 内存对于用户来说就是一个字节数组&#xff0c;我们可…

11-Kafka

1 Kafka Kafka是一个分布式流式数据平台&#xff0c;它具有三个关键特性 Message System: Pub-Sub消息系统Availability & Reliability&#xff1a;以容错及持久化的方式存储数据记录流Scalable & Real time 1.1 Kafka架构体系 Kafka系统中存在5个关键组件 Producer…

虚拟内存精粹

虚拟内存精粹 标题&#xff1a;虚拟内存精粹 作者&#xff1a;潘建锋 原文&#xff1a;HTTPS://strikefreedom.top/memory-management–virtual-memory 导言 虚拟内存是当今计算机系统中最重要的抽象概念之一&#xff0c;它的提出是为了更加有效地管理内存并且降低内存出错的概…

深度学习自动编译和优化技术调研

深度学习自动编译和优化技术调研 转自&#xff1a;https://moqi.com.cn/blog/deeplearning/ 作者&#xff1a;墨奇科技全栈开发 在墨奇科技&#xff0c;我们需要将一些包含深度神经网络&#xff08;DNN&#xff09;的 AI 算法移植到边缘端的设备&#xff0c; 这些设备往往使用 …

Copy-On-Write COW机制

Copy-On-Write COW机制 转自&#xff1a;https://zhuanlan.zhihu.com/p/48147304 作者&#xff1a;Java3y 前言 只有光头才能变强 在读《Redis设计与实现》关于哈希表扩容的时候&#xff0c;发现这么一段话&#xff1a; 执行BGSAVE命令或者BGREWRITEAOF命令的过程中&#xff0c…

第2章线性表的基本使用及其cpp示例(第二章汇总,线性表都在这里)

2.1线性表的定义和特点 【类型定义&#xff1a; *是n个元素的有限序列 *除了第一个元素没有直接前驱和最后一个没有直接后驱之外&#xff0c;其余的每个元素只有一个直接前驱和直接后驱&#xff1b; &#xff08;a1,a2…an&#xff09; 【特征&#xff1a; *有穷性&#xff1…

2.3单链表的基本使用及其cpp示例

2.3线性表的链式表现与实现 2.3.1.1单链表 【特点&#xff1a; *用一组任意的存储单元存储线性表的数据元素 *利用指针实现用不同相邻的存储单元存放逻辑上相邻的元素 *每个元素ai&#xff0c;除存储本身信息外&#xff0c;还存储其直接后继的元素&#xff08;后一个元素的地址…

TVM:简介

TVM&#xff1a;简介概述 Apache TVM 是一个用于 CPU、GPU 和机器学习加速器的开源机器学习编译器框架。它旨在使机器学习工程师能够在任何硬件后端上高效地优化和运行计算。本教程的目的是通过定义和演示关键概念&#xff0c;引导您了解 TVM 的所有主要功能。新用户应该能够从…

2.3.3单链表的双向链表

2.3.3双向链表 插入、删除 指在前驱和后驱方向都能游历&#xff08;遍历&#xff09;的线性链表 双向链表的每个结点有两个指针域 【结构】&#xff1a;prior data next 双链表通常采用带头结点的循环链表形式 可理解为首位相接的数据“圈”&#xff0c;每个结点都可以向前…

nvidia-smi 命令详解

nvidia-smi 命令详解 简介 nvidia-smi - NVIDIA System Management Interface program nvidia smi&#xff08;也称为NVSMI&#xff09;为来自 Fermi 和更高体系结构系列的 nvidia Tesla、Quadro、GRID 和 GeForce 设备提供监控和管理功能。GeForce Titan系列设备支持大多数…

2.4一元多项式的表示及相加,含cpp算法

2.4一元多项式的表示及相加 n阶多项式的表示&#xff1a; n阶多项式有n1项 指数按升幂排序 【 优点&#xff1a; 多项式的项数可以动态增长&#xff0c;不存在存储溢出的问题插入&#xff0c;删除方便&#xff0c;不移动元素 【表示&#xff1a; 有两个数据域&#xff0c;一…

TVM:使用Tensor Expression (TE)来处理算子

TVM&#xff1a;使用Tensor Expression (TE)来处理算子 在本教程中&#xff0c;我们将聚焦于在 TVM 中使用张量表达式&#xff08;TE&#xff09;来定义张量计算和实现循环优化。TE用纯函数语言描述张量计算&#xff08;即每个表达式都没有副作用&#xff09;。当在 TVM 的整体…

4-数据结构-串的学习

4.1串类型的定义 1.串&#xff1a;&#xff08;或字符串&#xff09; 串是由多个字符组成的有限序列&#xff0c;记作&#xff1a;S‘c1c2c3…cn’ (n>0) 其中S是串的名字&#xff0c;‘c1c2c3…cn’ 是串值 ci是串中字符 n是串的长度&#xff0c;表示字符的数目 空串&a…