MoCo和SimCLR【CV双雄】

文章目录

    • 文章列表
    • 五、MoCo V1
      • 5.1 文章摘要
      • 5.2 实验结果
      • 5.3 文章图示
        • 图 1: Momentum Contrast (MoCo) 训练方法概述
        • 图 2: 三种对比损失机制的比较
    • 六、SimCLR V1
      • 6.1 文章摘要
      • 6.2 文章实验
      • 6.3 文章图示
        • 图 1: ImageNet Top-1 Accuracy of Linear Classifiers
        • 图 2: 对比学习框架
        • 图 3:全局和局部视图 相邻视图
        • 图 4: 数据增强的组合

文章列表

文章参考 对比学习论文综述【论文精读】 🌹 🚀

是否完成年份文章及其链接简介其他
2018InstDisc提出实例判别和memory bank做对比学习
2019InvaSpread一个编码器的端到端对比学习
2018CPC对比预测编码,图像语音文本强化学习全都能做
2019CMC多视角下的对比学习
2019MoCov1无监督训练效果也很好
2020SimCLRv1简单的对比学习 (数据增强 + MLP head + 大batch训练久)
2020MoCov2MoCov1 + improvements from SimCLRv1
2020SimCLRv2大的自监督预训练模型很适合做半监督学习
2020BYOL不需要负样本的对比学习
2020SWaV聚类对比学习
2020SimSiam化繁为简的孪生表征学习
2021MoCov3如何更稳定的自监督训练ViT
2021DINOtransformer加自监督在视觉也很香

前情提要:

第一阶段大概讲了这四篇论文,可以看到

  • 它们使用的代理任务是不一样的,有个体判别,有预测未来,还有多视角多模态
  • 它们使用的目标函数也不尽相同,有 NCE,有infoNCE,还有NCE的其它变体
  • 它们使用的模型也都不一样,比如说Invariant spread用了一个编码器;Inst Disc用一个编码器和memory bank;CPC有一个编码器,还有一个自回归模型;CMC可能有两个甚至多个编码器
  • 它们做的任务从图像到视频到音频到文字到强化学习,非常的丰富多彩

五、MoCo V1

《Momentum Contrast for Unsupervised Visual Representation Learning》, 文章提出了一种用于无监督,具体是自监督模型视觉表征学习的新技术,名为Momentum Contrast(MoCo)。

  • MoCo将对比学习方法归纳为字典查询问题,贡献在于引入队列和动量编码器构建大而一致的字典,优化对比学习。与Inst Disc相似,均使用ResNet-50,特征维度128维,L2归一化,但MoCo采用InfoNCE损失(温度0.07),借鉴数据增强、学习率0.03及训练200 epochs。MoCo的亮点在于:
  1. 简单有效的影响力:动量编码器技术被后续工作如SimCLR、BYOL等广泛采用,显著提升无监督预训练效果,甚至超越有监督预训练。
  2. 高超的写作风格:从cv与nlp差异及无监督学习困境入手,将对比学习统一为字典查询问题,提出MoCo框架,旨在通过大字典提升性能,拓宽论文视野与深度。方法部分自顶向下,从目标函数出发,逐步展开网络结构与实现细节,灵活定义输入与网络结构,展现高度概括性与灵活性。

MoCo跟Inst Disc是非常相似的

  • 它用队列取代了原来的memory bank作为一个额外的数据结构去存储负样本
  • 它用动量编码器去取代了原来loss里的约束项,从而能达到动量的更新编码器的目的,而不是动量的去更新特征,从而能得到更好的结果

5.1 文章摘要

摘要:

  • MoCo通过构建一个动态字典来实现无监督学习,该字典使用队列和移动平均编码器,从而在训练过程中实现大型且一致的字典构建
  • MoCo在ImageNet分类的常见线性协议上提供了有竞争力的结果,并且学习到的表征在多个下游任务中表现良好,甚至在某些情况下超过了有监督预训练模型。
  • 研究表明,MoCo在许多视觉任务中大大缩小了无监督和有监督表征学习之间的差距,并且可以在多种应用中替代ImageNet有监督预训练。

重点:

  1. 引言:介绍了无监督表示学习在自然语言处理中的成功,以及在计算机视觉中的挑战。
  2. 相关工作:讨论了无监督/自监督学习方法,包括不同的预文本任务和损失函数。
  3. 方法
    • 对比学习作为字典查找:将对比学习视为训练编码器进行字典查找任务。
    • MoCo通过维护一个队列来构建动态字典,并使用动量更新来保持编码器的一致性
    • 预文本任务:使用简单的实例区分任务,其中查询和键是同一图像的不同视图。
  4. 实验
    • 在ImageNet和Instagram数据集上进行了无监督预训练,并在PASCAL VOC、COCO等数据集上进行了下游任务的评估。
    • MoCo在多个下游任务中的表现超过了有监督预训练模型。
  5. 讨论和结论:MoCo在多个视觉任务中的表现表明,无监督学习可以与有监督学习相媲美。

5.2 实验结果

实验结果

  • MoCo在ImageNet线性分类协议上取得了60.6%的准确率,并且在使用不同的模型变体时表现更好。
  • 在PASCAL VOC和COCO数据集上,MoCo在多个检测和分割任务中超过了有监督预训练模型。

5.3 文章图示

图 1: Momentum Contrast (MoCo) 训练方法概述

在这里插入图片描述

  • 目的:展示MoCo方法如何通过对比学习训练视觉表征编码器。
  • 内容
    • 图中展示了一个编码器网络,用于将输入数据(如图像)编码成特征向量。
    • 使用对比损失函数来训练编码器,使得编码后的查询向量(q)与字典中的键向量(k)匹配
    • 字典键是通过维护一个队列来构建的,其中包含历史小批量数据的编码表示。
    • 键向量由一个动量编码器编码,该编码器是查询编码器的缓慢进展版本。
  • 结论:MoCo方法能够构建一个大型且一致的字典,有助于无监督学习视觉表征。
图 2: 三种对比损失机制的比较

这三种机制的不同之处在于密钥的维护方式和密钥编码器的更新方式。(a):用于计算查询和键表示的编码器通过反向传播被端到端地更新(这两个编码器可以是不同的)。(b)从存储器组[61]中对密钥表示进行采样。( c)MoCo通过动量更新编码器对新密钥进行动态编码,并维护密钥队列(此图中未示出)。

在这里插入图片描述

  • 目的:比较不同的对比损失机制,包括端到端更新、记忆库方法和MoCo。
  • 内容
    • 端到端更新:查询和键的编码器通过反向传播更新。
    • 记忆库方法:从记忆库中随机抽取字典键,不涉及反向传播。
    • MoCo:使用动量更新的编码器实时编码新键,并维护一个键的队列。
  • 结论:MoCo方法在保持字典键的一致性方面具有优势,同时支持更大的字典大小。

六、SimCLR V1

《A Simple Framework for Contrastive Learning of Visual Representations》, 文章提出了一个名为SimCLR的简单框架,用于无监督视觉表征的对比学习

6.1 文章摘要

摘要:

  • SimCLR通过对比学习来学习视觉表征,它简化了最近提出的对比自监督学习算法,无需专门的架构或内存库。
  • 通过系统地研究框架的主要组成部分,文章展示了数据增强的组合、在表征和对比损失之间引入可学习的非线性转换以及对比学习从更大的批次大小和更多的训练步骤中受益。
  • SimCLR在ImageNet上实现了最先进的自监督和半监督学习性能。在仅有1%标签的情况下进行微调,SimCLR达到了85.8%的top-5准确率,超过了使用100倍标签的AlexNet。

重点:

  1. 引言:介绍了无监督学习在计算机视觉中的重要性和挑战。
  2. 相关工作:讨论了无监督表示学习的相关研究,包括生成和判别方法。
  3. 方法
    • 对比学习框架:通过最大化来自同一数据样本的不同增强视图之间的一致性来学习表示。
    • 数据增强:数据增强的组合对于定义有效的预测任务至关重要。
    • 非线性投影头:在表征和对比损失之间引入非线性投影头可以显著提高学习表征的质量。
    • 对比损失:使用NT-Xent损失函数,优化了正负样本的权重。

6.2 文章实验

  1. 实验
    • 在ImageNet、CIFAR-10和CIFAR-100等数据集上进行了广泛的实验。
    • 在不同的下游任务中评估了学习到的表征,包括分类、目标检测和分割。
  2. 结论:SimCLR通过简单的框架和训练策略实现了优异的性能,证明了无监督学习在视觉任务中的潜力。

实验结果

  • SimCLR在ImageNet线性分类协议上达到了76.5%的top-1准确率,与监督预训练的ResNet-50相匹配。
  • 在使用极少标签(1%)进行微调时,SimCLR的性能超过了使用全部标签的AlexNet。

代码:文章提供了SimCLR的代码链接。

文章的实验结果表明,通过仔细选择数据增强、损失函数和训练策略,无监督学习方法能够在多种视觉任务中与有监督学习方法相媲美。

6.3 文章图示

《A Simple Framework for Contrastive Learning of Visual Representations》中提到的图表展示了SimCLR方法的性能和对比学习的相关分析。以下是对文章中提到的图表的详细解释:

图 1: ImageNet Top-1 Accuracy of Linear Classifiers

在这里插入图片描述

  • 目的:比较不同自监督学习方法在ImageNet数据集上的性能。
  • 内容
    • 展示了使用不同自监督方法预训练的模型在ImageNet上的top-1线性分类准确率。
    • 包括了SimCLR与多种其他方法的比较,如InstDisc、MoCo、PIRL等。
    • 灰色的十字表示有监督的ResNet-50作为基准。
  • 结论:SimCLR在自监督学习领域取得了显著的性能,与有监督学习的性能相当。
图 2: 对比学习框架

在这里插入图片描述

  • 目的:展示SimCLR框架的工作原理。
  • 内容
    • 描述了如何通过随机数据增强生成两个视图(正样本对),并通过对比损失函数最大化它们的一致性。
    • 展示了基础编码器和投影头的作用,以及如何使用对比损失。
  • 结论:通过简单的框架和有效的数据增强策略,SimCLR能够有效地学习视觉表征。

数据扩充算子是从同一个扩充族(t ˇ T和t ˇ
T)中抽取的,并应用于每个数据示例,以获得两个相关视图。训练基本编码器网络f(·)和投影头g(·)以使用对比损失最大化一致性。训练完成后,我们扔掉投影头g(·),使用编码器f(·)和表示h进行后续任务

图二里说,如果有一个mini-batch的图片,假如说是x,对这个mini-batch里的所有图片做不同的数据增强就会得到x i和xj

在图二所描述的对比学习(Contrastive Learning)框架中,提到的关于数据增强和正负样本的构造过程,可以通过以下方式详细解释:

首先,假设我们有一个mini-batch的图片集合,我们称之为 X X X,其中包含了 n n n张图片(即batch size为 n n n)。对于这 n n n张图片中的每一张图片 x i x_i xi(其中 i i i从1到 n n n),我们执行两种不同的数据增强操作(例如,裁剪、旋转、颜色失真等),从而得到两个增强的图片版本: x i ′ x_i' xi x i ′ ′ x_i'' xi′′。这里的关键是,对于同一张原图 x i x_i xi,通过不同的数据增强操作生成的两个版本 x i ′ x_i' xi x i ′ ′ x_i'' xi′′被视为正样本对

接下来,关于负样本的构造:

  • 对于每个正样本对(例如, x i ′ x_i' xi x i ′ ′ x_i'' xi′′),剩下的 n − 1 n-1 n1张原图(即 x 1 , . . . , x i − 1 , x i + 1 , . . . , x n x_1, ..., x_{i-1}, x_{i+1}, ..., x_n x1,...,xi1,xi+1,...,xn)以及它们各自通过数据增强得到的图片版本,均被视为当前正样本对的负样本
  • 值得注意的是,由于每个 x j x_j xj j ≠ i j \neq i j=i)都会生成两个增强的版本(例如, x j ′ x_j' xj x j ′ ′ x_j'' xj′′),所以负样本的总数实际上是原图数量的两倍( 2 ( n − 1 ) 2(n-1) 2(n1)),但是需要注意的是,我们实际上是在计算损失时不会重复计算同一张图的不同增强版本作为负样本对正样本的影响,而是会考虑整个batch中所有不同图片(包括它们的增强版本)对某个正样本对的贡献。

因此,总结来说,在batch size为 n n n的情况下:

  • 正样本的个数确实是 n n n,因为每张原图都会生成一个正样本对。
  • 负样本的个数并不是简单的两倍的 n − 1 n-1 n1(即 2 ( n − 1 ) 2(n-1) 2(n1)),因为我们在计算损失时不会重复考虑同一张图的增强版本。但从概念上讲,我们可以认为batch中除了当前正样本对所对应的原图及其增强版本外,所有的其他图片(及其增强版本)都作为潜在的负样本参与损失的计算。

这样的设计有助于模型学习到对于不同变换(数据增强)下仍然保持一致的特征表示,同时能够区分不同图片之间的差异,从而学习到更加鲁棒和泛化的视觉表示。

图 3:全局和局部视图 相邻视图
  • 实心矩形是图像,虚线矩形是随机裁剪。通过随机裁剪图像,我们对包括全局到局部视图(B → A)或相邻视图(D → C)预测的对比预测任务进行采样。

在这里插入图片描述

图 4: 数据增强的组合

在这里插入图片描述

  • 目的:分析数据增强的组合对学习有效表示的影响。
  • 内容
    • 展示了不同数据增强操作的组合对性能的影响。
    • 包括了随机裁剪、颜色失真和高斯模糊等增强操作。
  • 结论随机裁剪和颜色失真是学习有效表示的关键数据增强操作。

和MoCo比起来确实很简单,这里只有一个编码器,既不需要memory bank,也不需要队列和动量编码器;正负样本全都是从同一个mini-batch里来的;整个前向过程非常的直接,就是图片进入编码器编码然后projector降维,最后算个对比学习的loss,非常符合大家对深度学习工作的期待

  • 前面说invariant spread可以看作是SimCLR的前身,为什么这么说呢?本文其实整体的这个思路和结构跟SimCLR是基本一致的,SimCLR跟Inva Spread的区别其实都写在SimCLR的贡献列表里了

  • 首先第一个就是它用了更多的数据增强,它发现对比学习真的是需要很强的数据增强的技术

  • 第二就是它加了一个g函数(一个可以学习的分线性的变换,就是一个 mlp层)

  • 第三就是它们用了更大的batch size ,而且训练的时间更久,它发现这两个策略都能让网络学到的特征变得更好

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

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

相关文章

MySQL日志binlog和redo log区别

MySQL binlog简介 MySQL中有两类日志:binlog和redo log,分别有不同的作用和解决问题。binlog是归档日志,在MySQL server层的日志,适用于所有存储引擎,redo log是innodb特有日志用于crash-safe时恢复数据。 binlog和r…

【C++】—— list 模拟实现

【C】—— list 模拟实现 1 list 基础结构2 默认构造3 迭代器3.1 整体框架3.2 成员函数3.3 begin() 与 end() 的实现3.4 operator-> 的实现3.5 const 迭代器3.5.1 const 迭代器为什么命名 const_iterator3.5.2 const 迭代器的实现3.5.3 合并两个迭代器 4 源码 1 list 基础结…

【C++前后缀分解】1653. 使字符串平衡的最少删除次数|1793

前后缀分解 C前后缀分解 LeetCode1653. 使字符串平衡的最少删除次数 给你一个字符串 s &#xff0c;它仅包含字符 ‘a’ 和 b’​​​​ 。 你可以删除 s 中任意数目的字符&#xff0c;使得 s 平衡 。当不存在下标对 (i,j) 满足 i < j &#xff0c;且 s[i] ‘b’ 的同时…

软考中项(第三版):项目质量管理总结

前言 系统集成项目管理工程师考试&#xff08;简称软考中项&#xff09;&#xff0c;其中案例分析也是很大一部分考试内容&#xff0c;目前正在学习中&#xff0c;现总结一些可能会考到的知识点供大家参考。 1.1、项目质量管理总线索 1、质量管理的发展史 &#xff08;1&…

创建一个Java项目并在项目中新建文件,最后实现程序简单的输出

目录 前言 一、建立项目及新建Java类 二、输入简单代码实现输出 前言 1.本文所讲的是java程序设计语言&#xff0c;其内容是如何在id中新建一个项目&#xff0c;并新建一个Java文件&#xff0c;在其内输入相关代码并对其输出&#xff1b; 2.Java文件的编写以收入到我的专栏…

JDBC实现对单表数据增、删、改、查

文章目录 API介绍获取 Statement 对象Statement的API介绍使用步骤案例代码 JDBC实现对单表数据查询ResultSet的原理ResultSet获取数据的API使用JDBC查询数据库中的数据的步骤案例代码 API介绍 获取 Statement 对象 在java.sql.Connection接口中有如下方法获取到Statement对象…

IM系统完结了,那简历该怎么写?(含简历项目描述)

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

开放式耳机排行榜前十名?分享四款高性价比的开放式蓝牙耳机

开放式耳机并不一定要选价格贵的才好&#xff0c;而是应该按照个人需求来选择合适的开放式耳机产品&#xff0c;适合自己的才是最好。而且开放式耳机的价格区间也很广&#xff0c;从几十元到上千元不等&#xff0c;在每个价位区间里都有属于每个价位区间的高性价比耳机。选择耳…

RusTitW:大规模语言视觉文本识别数据集(猫脸码客 第190期)

RusTitW: Russian Language Visual Text Recognition 一、引言 在信息爆炸的现代社会&#xff0c;文本作为信息传递的重要载体&#xff0c;扮演着不可或缺的角色。随着计算机视觉与模式识别技术的飞速发展&#xff0c;自动化文本识别&#xff08;OCR, Optical Character Reco…

【LabVIEW学习篇 - 25】:JKI状态机

文章目录 JKI状态机JKI状态机安装JKI状态机的基本了解状态机的运行原理示例 JKI状态机 JKI状态机的核心就是队列消息状态机用户事件处理器模式&#xff0c;JKI状态机采用指定格式的字符串来描述状态。 JKI状态机并没有采用队列而是采用指定的字符串进行存储&#xff0c;它封装…

用EA和SysML一步步建模(07)蒸馏器系统上下文图01

用EA和SysML一步步建模的操作指南&#xff08;01&#xff09; 用EA和SysML一步步建模&#xff08;02&#xff09;导入ISO-80000 用EA和SysML一步步建模&#xff08;03&#xff09;创建包图和包的关系 用EA和SysML一步步建模&#xff08;04&#xff09;创建“需求组织”包图 …

【ACM出版】第三届人工智能与智能信息处理国际学术会议(AIIIP 2024,10月25-27)

第三届人工智能与智能信息处理国际学术会议&#xff08;AIIIP 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence and Intelligent Information Processing 中国-天津 | 2024年10月25-27日 | 会议官网&#xff1a;www.aiiip.net 官方信息 会议…

flask项目初始化

1、初始环境 python3.8 2、flask文档地址&#xff1a;https://flask.palletsprojects.com/en/latest/installation/#install-flask 3、初始化项目 $ mkdir myproject $ cd myproject $ python3 -m venv .venv $ . .venv/bin/activate $ pip install Flask4、打开项目mypr…

如何关闭前端Chrome的debugger反调试

1、禁用浏览器断点 2. 把控制台独立一个窗口

Java数据结构(十一)——归并排序、计数排序

文章目录 归并排序算法介绍代码实现非递归实现复杂度和稳定性 计数排序算法介绍代码实现复杂度和稳定性 归并排序 算法介绍 归并排序是一种分而治之的排序算法。基本思想是&#xff1a; 将一个数组分成两半&#xff0c;对每半部分递归地应用归并排序先进行分解&#xff0c;然…

Linux基础---11优化系统

一.优化SSH连接速度 1&#xff09;修改配置文件 cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak#备份vi /etc/ssh/sshd_config将79行和115行的yes修改为no,最后:wq保存退出&#xff08;79gg和115gg可直接跳至本行&#xff09; 79 行&#xff1a;GSSAPIAuthentication no…

fiddler抓包02_安装

① 访问官网&#xff1a;https://www.telerik.com/fiddler ② 点击“try for free”&#xff0c;选择经典版。 ③ 选择任意用途&#xff0c;输入邮箱&#xff0c;选择地区china&#xff0c;确定下载。 ④ 双击安装包进行安装。 安装后为英文界面&#xff1a;

iOS 18 新功能:控制中心大變身!控制項目自由選配

蘋果於 Apple iOS 18 中為控制中心帶來大改變&#xff0c;變得更具有擴充性&#xff0c;而且將支援第三方應用的控制按鈕&#xff0c;中心內的組件大小也可調節。如今 iOS 18 正式上線&#xff0c;我們就可以試試控制中心不同項目自由選配帶來的效果。 組件可在三尺寸之間調整 …

分页 101012

地址拆分&#xff1a; 10-10-12 假设虚拟地址&#xff1a;0x12345678 0001 0010 0011 0100 0101 0110 0111 10000001 0010 00 -> 0x48 (PDE) 11 0100 0101 -> 0x345 (PTE) 0110 0111 1000 -> 0x678 (物理页偏移)

文字loading加载

效果 1. 导入库 import sys from PyQt5.QtCore import QTimer, Qt, QThread, pyqtSignal from PyQt5.QtGui import QPainter, QFont, QColor, QBrush from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton, QProgressBar, QLabel 代码首先导入了P…