计算机视觉中的自监督学习

news2024/10/8 11:38:58

如何只使用少量标记示例来训练模型?

到目前为止,人工智能所提供的大部分价值都来自于在日益庞大的数据集上训练的监督模型。其中许多数据集都是由人类标记的,这是一项枯燥、耗时、容易出错,有时还很昂贵的工作。自监督学习(SSL)是一种不同的学习范式,允许机器从未标记的数据中学习。在本文中,我们将讨论SSL的工作原理以及如何将其应用于计算机视觉。我们将比较简单的方法和最先进的方法,并看到SSL在医学诊断中的应用,这个领域可以从中获益很多,但同时也需要深入了解这种方法,以能够正确地实施它。

8721d3efae92390ddee36715b4f75528.png

什么是自监督学习?

根据Meta首席AI科学家Yann LeCun的说法,自监督学习是“构建AI系统的背景知识和近似常识的最有前途的方法之一”。自监督学习的思想是在没有注释的数据上训练模型。

自监督学习是构建AI系统的背景知识和近似常识的最有前途的方法之一。

— Yann LeCun

考虑另外两种学习范式:监督学习和无监督学习。在监督学习中,我们向模型提供一些输入以及相应的标签,它的任务是找到它们之间的映射,以便推广到新数据。

另一方面,在无监督学习中,我们只有输入,没有标签,学习的目标是探索输入数据中的模式,以便对相似的示例进行聚类、减少数据维度或检测异常值,等等。

db2a4c39369e3f2e7ab88d1f20bd9b18.png

自监督学习在某种程度上位于这两者之间。它与无监督学习类似,因为它从未标记的数据中学习,但与此同时,它也是监督的,因为模型在训练过程中创建自己的伪标签以进行学习。

这个想法并不是全新的。自监督学习在过去已经被广泛使用,尤其是在NLP中,用于训练大型语言模型,如BERT或GPT。在这些模型中,可能会提供原始文本,任务是预测前面标记中的下一个标记。因此,对于每个训练示例,模型会设置它的伪标签为句子中的下一个单词。

然而,过去三年,自监督学习重新被发现,并在计算机视觉领域取得突破性的论文,来自Google、DeepMind和Meta等机构。然而,原理仍然是一样的:模型创建自己的伪标签,例如通过对图像的一部分进行蒙版,然后尝试预测它,或者通过旋转图像并尝试预测旋转角度。我们将在稍后讨论确切的技术。

现在,我们对自监督学习的基本概念有了一定了解,让我们看看它在医学应用中特别有用的原因。

医学数据中的稀缺注释

医疗领域产生了大量的图像。根据IBM的数据,高达90%的医疗数据以图像形式存在。这些数据是通过进行各种检查产生的,例如X光检查,根据世界卫生组织的数据,每年有36亿次。

这么庞大的数据量似乎为应用机器学习算法提供了很好的机会,因为机器学习算法需要数据。但存在一个问题。

传统的监督机器学习模型,为了从数据中学习,不仅需要训练示例,还需要注释或标签:当我们在训练期间向监督模型呈现X光图像时,我们需要告诉它要在其中识别哪些医疗病况。

不幸的是,在医学领域,注释是一种稀缺资源,而且获取它们是一项具有挑战性的任务。通常情况下,它们需要由昂贵的专家医生提供,而这些医生的时间昂贵,可以用来更好地照顾患者。这时自监督学习进场。

自监督学习解决了稀缺注释问题

在稀缺注释的情况下,例如识别X射线图像中的医疗病况,通常会出现如下图所示的情况:我们有大量的数据,但只有一小部分被注释了。

如果我们采用传统的监督方法,只能使用少量带标签的示例来训练模型。然而,通过自监督学习,我们可以从未标记的图像中学习。让我们看看如何做到这一点。

e52e0a64579ea26320a938554b42f1dc.png

自监督学习工作流程

作为第一步,我们让自监督模型从未标记的数据中生成其伪标签,并在其上进行训练。这被称为自监督预训练,其中模型解决所谓的“前提任务”。这可以是预测蒙版图像片段或旋转角度,正如我们之前所说的那样;我们将在稍后讨论选择前提任务的细节。

上述步骤的结果是一个经过预训练的模型,该模型已经学习了未标记数据中存在的模式。这个模型对特定的医疗病况一无所知(因为这些信息只能在它没有看到的标签中获得),但它可能已经学到了某些X射线图像以一种一致的方式不同于其他图像。这就是LeCun所说的构建背景知识。

自监督学习工作流程包括两个步骤:在未标记数据上进行预训练以构建背景知识,然后在标记数据上进行有监督的微调以学习解决下游任务。

第二步是以常规的有监督方式在标记数据的一部分上对这个经过预训练的模型进行微调。这里的技巧是,现在模型对数据集中的模式有了一些背景知识,所以只需要提供少数带标签的示例给它,它就足够了解如何解决下游任务,我们的情况是在X射线图像中检测医疗病况。

  • 前提任务

现在,让我们讨论模型在预训练阶段解决的前提任务。文献中已经提出了许多前提任务,可能性是无限的。唯一的要求是我们必须能够从输入数据本身创建伪标签。让我们看看一些最受欢迎的传统方法。

  • 蒙版预测

蒙版预测简单地意味着对输入图像的某部分进行蒙版,然后让模型尝试从图像的其余部分来预测它。

bf1ee9e9a5790feda2859b3db90ebb76.png

  • 变换预测

存在一整套方法可以归为变换预测的广义名称。在这些任务中,我们对图像应用一些变换,比如旋转、颜色移动等。然后,模型的任务是预测变换的参数:角度或比例、颜色移动的量等等。

1e9f839c0435059a6628d6722c801951.png

  • 拼图游戏

另一种方法是让模型解决拼图游戏。我们将输入图像切割成多个片段,然后随机重新排列它们,并要求模型找出正确的原始排列。

0317ee81bcf53b522b48966df035012c.png

  • 实例区分

其他一些方法将前提任务集中在实例区分上。这需要多个相同对象的多个视图,例如,来自不同角度或不同位置的同一只猫的照片。这种方法的变种会自动生成视图,例如来自3D点云或使用生成模型。前提任务是识别两幅图像是否代表完全相同的对象。

我们所讨论的每个前提任务的目标都是迫使模型学习数据中的结构和模式。然而,最近的研究发现,在实现这一目标方面,略有不同的方法效果最好。获胜的方法基于对比学习。

  • 对比学习

对比学习的基础是将样本与样本进行对比,以了解哪些模式在样本之间是共同的,哪些使它们不同。

对比学习通过将样本相互对比来了解哪些模式在它们之间是共同的,哪些使它们不同。

  • 监督对比学习

这种方法不仅限于自监督学习。事实上,它起源于监督的、少样本问题的解决方案。想象一下,你负责办公楼的安全,想要安装一扇只对经过验证的员工开启的自动门。你只有每个员工的几张照片来训练你的模型。

在这里,一个解决方案可以是训练一个模型,以识别两张图像是否描绘出相同的人。然后,系统可以将每个新来的人的脸与员工照片的数据库进行比较,寻找匹配项。这样的模型通常是以对比的方式进行训练的。在训练过程中,它们被呈现给三张图像进行对比:两张相同人的照片和一张不同人的照片。目标是学习第一二张相似,与第三张不同。

  • 自监督对比学习

在这种方法中,我们还是向模型呈现三张图像。

  • 第一张是来自训练数据集的随机图像,被称为锚图像。

  • 第二张图像是相同的锚图像,但以某种方式进行了变换,例如通过旋转或颜色偏移,被称为正例。

  • 第三张图像是来自训练数据的另一张随机图像,与第一张不同,被称为负例。

9055dc0670d258bfd60cb3a95b409b45.png

学习的目标是教模型第一二张图像是相似的,我们希望它们的潜在表示接近(毕竟,旋转的黑白猫仍然是一只猫),而最后一张图像与前两张不同,它的潜在表示或嵌入应该远离。现在,让我们更详细地讨论一下一些自监督对比架构。

  • 三重损失

可能想象的最简单的方法是基于三重损失的模型。我们通过主干模型(例如ResNet或视觉变换器)传递了锚点、正例和负例图像,以获得它们的嵌入,然后将它们传递给三重损失函数,其目标是教模型将锚点和正例图像放在潜在空间中的接近位置,将锚点和负例图像放在远处。

3c2acfa2eb3846da3c3bca4ca5224153.png

SimCLR

简单的对比学习框架(Simple Framework for Contrastive Learning),或称为SimCLR,是Google Research于2020年提出的一篇论文。该模型接受两个输入图像:锚图像和它的变换版本,或正例,然后将它们分别通过ResNet编码器、多层感知和可学习的非线性层。噪声对比估计(NCE)损失旨在最大化两个嵌入之间的相似性,同时最小化与同一小批次中其他图像的嵌入的相似性。

c9e3c1dab95024398f4ab2301e64cfab.png

SimCLR在图像识别方面取得了很好的结果。不过,正如作者所展示的,它在批次大小很大(最好为4096)且训练时间很长的情况下表现最佳。这使它对于不愿意在云计算上花费大量美元的个人和公司来说,实际上是不可用的。

  • MoCo

Facebook AI Research团队的Momentum Contrast,或MoCo,缓解了SimCLR的一些缺点。他们成功地将批次大小减小到了256,这要归功于一个聪明的技巧。

MoCo有两个编码器网络,其参数分别由在线编码器和正例编码器进行优化。在线编码器通过常规梯度下降算法进行优化,而动量编码器则基于在线编码器权重的指数移动平均值进行更新。

最重要的是,MoCo保留了动量编码器嵌入的存储器库,并从中采样负例示例以计算NCE损失。这消除了大批量大小的需求。

2bb7af2a13c7850c8d80c0e0297b4f89.png

在其发布时,MoCo在许多不同的计算机视觉任务中超越了顶级的监督模型。

  • BYOL

自助式生成隐变量,或BYOL是DeepMind的一个项目。它构建在MoCo之上,也利用了两个网络,一个是根据另一个的权重进行移动平均值更新的网络。然而,与使用对比损失函数不同,BYOL学会将正例示例和标准化的锚定到嵌入空间中的相同位置。换句话说,在线网络被训练来预测其他网络的表示。这消除了对负例示例和存储库的需求。

e08a5abea1705c9563407e49c6836bcf.png

尽管BYOL并没有明确地将不同图像相互对比,但深入的研究发现,它实际上是以一种对比的方式学习的,尽管是间接的。

  • 其他架构

还有许多其他现代的自监督架构,每个月都会有更多的架构出现,超越它们的前辈的结果。目前的研究在很大程度上集中在模型对许多不同的下游任务的可迁移性上。其中大部分来自Meta研究员。一些值得注意的例子包括Barlow Twins、SwAV、SimSiam以及最新的Tico和VICRegL。

  • 选择变换

我们已经讨论了自监督学习的工作原理以及它如何解决医疗数据中稀缺标注的问题。我们还检查了各种前提任务和最先进的对比架构,这些架构将锚定图像与其变换版本进行对比。我们现在缺失的最后一块拼图是如何选择要应用于锚图像的变换,而这个选择事实证明对于成功将自监督学习应用于实际问题非常关键。

最新的文献,包括前面讨论的SimCLR和MoCo论文,声称已经确定了最佳的一组要使用的变换。它们建议使用随机裁剪、颜色抖动和模糊。作者已经证明这些在广泛的下游任务集上效果最好。不幸的是,事情并不那么简单。不同的变换会引入模型不同的不变性,这并不总是可取的。

  • 用于胸部X射线的变换

现在让我们看看选择变换对于X射线图像有多重要。想象一下,我们忽略了将图像分类为不同的医疗状况的下游任务,只是遵循Google和Meta的研究人员的建议,使用随机裁剪作为我们的变换。

831bc692313f0321f716d868d2b36826.png

橙色圆圈代表图像中指示特定状况的部分,即肺部的某种损伤。使用随机裁剪,我们可能会得到像上图中的正例一样:损伤区域被裁剪掉了。对比损失将教导模型,有损伤的肺部和没有损伤的肺部是相似的。这样的预训练可能会使模型难以微调以识别这种类型的肺部损伤。

其他两种被认为是最佳的变换也不适用于X射线数据。对于灰度图像,其中灰度值或局部模糊的存在可能指示特定的医疗状况,因此应用颜色抖动或模糊可能会适得其反。再次强调,变换必须始终根据特定数据集和下游任务而选择。

理论考虑到此为止,现在让我们看看在X射线分类中实际应用自监督对比学习。

利用自监督学习进行X射线分类

我们使用了CheXpert数据集,该数据集包含约220,000张胸部X射线图像,标有十个互斥的类别,表示不同的医学状况以及患者体内支持装置的存在。我们只使用了超过200,000张正面图像的子集。我们选择了大约200,000张图像的随机子集进行自监督预训练。经过一系列实验,我们决定将轻微的随机旋转、水平翻转和随机透视作为要应用于锚图像的变换。CheXpert的所有图像都带有标签,但我们在预训练数据中忽略了这些标签。

9dde71e053503c2c5ef140688b8011cc.jpeg

在预训练之后,我们以监督方式在不同大小的带标签数据集上对模型进行了微调:从250张到10,000张图像。研究的目标是研究性能如何随着带标签集的大小而变化。

最后,我们在一个包含300张手动标记图像的小测试集上测试了模型(精细调校数据的标签是由数据集的作者通过自动解析患者记录获得的,这可能会引入一些噪音到这些标签中;相比之下,测试标签是由医生手动标记的,质量很高)。

性能评估

我们比较了三种模型架构:

  1. 传统的迁移学习方法,使用ResNet18。它仅在带标签的微调集上以监督方式进行训练。这反映了我们不使用自监督学习的情况,因此被迫忽略未标记的数据。

  2. 使用ResNet18作为骨干结构的简单三元组损失模型,但使用三元组损失以对比的方式进行预训练,并使用我们选择的变换。

  3. Meta的MoCo,同样使用ResNet18骨干结构和我们的变换集。

每个模型都经过十次训练和测试,每次使用不同大小的带标签微调集。我们通过ROC曲线下面积(AUC)来进行比较。

结果

e0f210ac2e45a99394a169cdaef57c01.png

不言而喻,自监督模型明显优于监督基线。然而,从这些结果中还可以得出其他有趣的结论:

  • 在带标签集最小的情况下,自监督预训练提供了最大的增益:仅使用250个带标签的示例,它比监督基线高出10个百分点。

  • 即使标签数据集较大,自监督预训练仍然可以提高性能:对于10,000个标签示例,增益仍然约为6个百分点。

  • 特别是在标签数据集较小时,MoCo相对于基线提供的增益更大。

让我们还要更仔细地看看我们数据中的类别频率。下图的左侧面板显示了MoCo相对于基线的优势(按AUC差异度量)分别对每个类别。右侧面板显示了数据集中的类别频率。

e46c71cb96eb65ca412cc251c41a2e3e.png

尽管自监督对每个类别都有所帮助,但似乎对相对罕见的类别有最大的帮助。这与前面的情节结果一致,显示了在标签集较小的情况下改进最为显著。

结论

在过去的三年中,计算机视觉的自监督学习取得了巨大的进展。由大型AI研究实验室发布的对比架构,特别是由Meta领导的,不断提高了标准。这有两个重要的后果。

  • 首先,高效利用未标记数据集的能力将成为许多行业的游戏变革者,其中注释数据稀缺。

  • 其次,训练这些所谓的基础模型,它们从未标记数据中学习以获取可以传递到多个不同下游任务的背景知识,这是AI泛化的重要步骤。

·  END  ·

HAPPY LIFE

e339a8da29b2dd1cdabd55a4e5a4e087.png

本文仅供学习交流使用,如有侵权请联系作者删除

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

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

相关文章

JVM基础面试题

JDK、JRE、JVM的关系 JVM Java虚拟机,它只识别.class类型文件,它能将class文件中的字节码指令进行识别并调用操作系统向上的API完成动作。 JRE Java运行时环境。它主要包含两部分:Jvm的标准实现和Java的一些基本类库。相对于JVM来说,JRE多出来…

【狂神】SpringMVC笔记(一)之详细版

1.Restful 风格 概念: 实现方式: 使用PathVariable 在url相同的情况下,会根据请求方式的不同来执行不同的方法。 使用RestFull风格的好处:简洁、高效、安全 2、接受请求参数及数据回显 2.1、请求参数 方式一:这里…

无涯教程-JavaScript - TIME函数

描述 TIME函数返回特定时间的十进制数。如果在输入功能之前单元格格式为"常规",则输出格式为日期。 TIME返回的十进制数是一个介于0(零)到0.99988426之间的值,代表从0:00:00(12:00:00 AM)到23:59:59(11:59:59 P.M.)的时间。 语法 TIME (hour, minute, second)争论…

Android studio 调整jar包顺序

第一步:编译jar包,放入lib路径下:如: 第二步:app 目录下build.gradle 中添加 compileOnly files(libs/classes.jar) 第三步:project目录下build.gradle 中添加 allprojects {gradle.projectsEvaluated {t…

十四、MySQL(DCL)如何实现用户的简单管理?配置用户?

1、DCL语句: 要学习DCL语言,就要清楚DCL语言是用来干什么的,首先DCL语言英文全称是Data Control Language,是数据控制语言,主要用来管理数据库用户、控制数据库的访问权限/ 2、DCL的基础语法: (…

SpringBoot项目启动时预加载

SpringBoot项目启动时预加载 Spring Boot是一种流行的Java开发框架,它提供了许多方便的功能来简化应用程序的开发和部署。其中一个常见的需求是在Spring Boot应用程序启动时预加载一些数据或执行一些初始化操作。 1. CommandLineRunner 和 ApplicationRunner Spri…

垃圾回收 - 标记压缩算法

压缩算法是将标记清除算法与复制算法相结合的产物。 1、什么是标记压缩算法 标记压缩算法是由标记阶段和压缩阶段构成。 首先,这里的标记阶段和标记清除算法时提到的标记阶段完全一样。 接下来我们要搜索数次堆来进行压缩。压缩阶段通过数次搜索堆来重新填充活动对…

mtbatisplus

title: mybatis_plus date: 2023-09-03 21:06:27 tags: mybatis_plusreviews 约定大于配置 默认 当我们要使用mybatisplus的时候 我们需要去集成mp提供的BaseMapper public interface UserMapper extends BaseMapper 关于mybatisplus常用注解 注解到类上 TableName(“表…

【c++】只出现一次的数字I II III(三个版本:三道题)

注&#xff1a;看这篇文章之前你需要了解& | ^ << >> 这五个运算符&#xff0c;此外&#xff0c;代码均经过测试运行通过 目录 1、只出现一次的数字I&#xff08;难度&#xff1a;简单&#xff09; 2、只出现一次的数字II&#xff08;难度&#xff1a;中等&a…

Ubuntu之apt-get系列--apt-get安装软件的方法/教程

原文网址&#xff1a;Ubuntu之apt-get系列--apt-get安装软件的方法/教程_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Ubuntu使用apt-get安装软件的方法。 安装软件 先更新列表 sudo apt-get update 安装软件 sudo apt-get install <package name>[<version>]…

importlib的使用、9个视图子类、视图集、drf之路由、drf之请求响应回顾、GenericViewSet相关流程图

一 drf之请求响应回顾 # 1 drf请求-请求对象&#xff1a;data&#xff0c;query_params&#xff0c;其他跟之前一样&#xff0c;FILES-默认&#xff1a;支持三种编码-局部配置&#xff1a;视图类中-from rest_framework.parsers import JSONParser, FormParser, MultiPartPars…

MySQL的故事——MySQL架构与历史

MySQL架构与历史 文章目录 MySQL架构与历史一、MySQL逻辑架构二、并发控制三、事务四、多版本并发控制(MVCC) 一、MySQL逻辑架构 第一层&#xff1a;连接处理、授权认证、安全等等 第二层&#xff1a;查询解析、分析、优化、缓存以及所有的内置函数。包含跨存储引擎的功能&…

【数据结构与算法】十大经典排序算法

文章目录 前言一、常见十大排序算法总结1、名词解释2、时间复杂度 二、排序算法与C语言实现1、冒泡排序2、选择排序3、插入排序4、希尔排序5、归并排序6、快速排序7、堆排序8、计数排序9、桶排序10、基数排序 总结 前言 排序算法是《数据结构与算法》中最基本的算法之一。 排序…

java:操作cookie

背景 cookie 是一种客户端会话技术&#xff0c;将数据保存到客户端。主要流程就是&#xff1a; 1、服务器把数据设置到cookie并返回给浏览器 2、浏览器自动保存 3、浏览器下一次发送请求自动携带cookie给服务器 我们主要来看一下 java 是怎么操作 cookie 的。 cookie介绍 特…

区块链技术与应用 - 学习笔记2【密码学基础】

大家好&#xff0c;我是比特桃。本系列笔记只专注于探讨研究区块链技术原理&#xff0c;不做其他违反相关规定的讨论。 区块链技术已被纳入国家十四五规划&#xff0c;在“加快数字发展 建设数字中国”篇章中&#xff0c;区块链被列为“十四五”七大数字经济重点产业之一&#…

Node.js安装使用

目录 一、安装 Node.js二、环境变量配置三、npm常用命令 Node.js 是一个强大的运行时环境&#xff0c;它使您能够在服务器端运行 JavaScript 代码。它非常流行&#xff0c;用于构建 Web 应用程序、API 和各种后端服务。 一、安装 Node.js 1、访问 Node.js 官方网站。 在主页上…

算法训练day34|贪心算法 part03(LeetCode 1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果(处理一边再处理一边))

文章目录 1005.K次取反后最大化的数组和思路分析代码实现 134. 加油站暴力方法贪心方法 135. 分发糖果(处理一边再处理一边)思路分析代码实现思考总结 1005.K次取反后最大化的数组和 题目链接&#x1f525; 给定一个整数数组 A&#xff0c;我们只能用以下方法修改该数组&#…

使用redis实现队列功能

使用redis实现队列功能 操作方法描述LPUSHLong lPush(String key, String… values)将一个或多个值 value 插入到列表 key 的表头&#xff0c;返回插入后列表中value的数量&#xff0c;若key不存在&#xff0c;会创建一个新的列表并执行 LPUSH 操作RPOPLPUSHString rPopLPush(S…

hive安装步骤

centos7安装hive&#xff0c;hive版本3.1.2 一、环境准备 JDK版本&#xff1a;jdk-8u381 Hadoop版本&#xff1a;hadoop-3.1.3 MySQL版本&#xff1a;8.0.34 二、hive安装步骤 1.解压 将压缩包复制到/opt/software目录下&#xff0c;并解压至/opt/module/目录 tar -zxf…

bootstrap 导航栏下拉菜单,居右下拉菜单

<!DOCTYPE html> <html lang"en"> <head><!-- 新 Bootstrap5 核心 CSS 文件 --> <link rel"stylesheet" href"bootstrap-5.0.0-beta1-dist/css/bootstrap.min.css"><!-- 最新的 Bootstrap5 核心 JavaScript 文…