对比学习MocoV1

2023-11-11

对比学习:希望模型能分辨哪些图片类似,哪些图片不类似,即类似的图片特征空间拉近,不类似的拉远。

可以设计不同的代理任务提供监督信号。

代理任务例子:个体判别

Xi经过两种Ti变成两张不一样的照片,为正样本。其他都是负样本。

损失:NCE loss

找到一种方式定义正负样本

视频:同一视频的任意两帧都是正样本,其他视频负样本。

NLP:SimCSE,同样句子forward,dropout不同,也是正样本。

物体的正面背面,深度图像等等。

MOCO v1

momentum contrast for unsupervised visual representation learning

momentum:Yt=m·Yt-1+(1-m)Xt加权移动平均

Abstract

把对比学习看成字典查询任务,构造了动态的字典(两个部分:队列(样本不用做梯度回传),移动平均编码器(字典里特征尽量保持一致,训练过程中发现很大一致的字典对无监督对比学习有好处))

linear protocol:骨干网络预训练好了,用到其他数据集时backbone freeze,只学FC层,间接证明特征提取的好不好

全面的在视觉领域比有监督好。

Introduction

NLP:信号空间是离散的(单词,词根词缀等等),很容易构建Tokenize(词对应成特征)的字典

CV:原始信号连续,高维

构造一个动态的字典

X1->X11(anchor)->Encoder11->f11

X1->X21(Positive)->Encoder12->f12

Negative:X2,X3,X4,…Xn

Encoder11和Encoder12可以是不同模型

负样本用Encoder12编码器,获得f2,f3,f4,…,fn

x11:xq

x12:xk

f2,f3,f4,…,fn:k1,…

f12:k0

对比学习转化为字典查询问题:

query:f11

key: f12(特征尽量相似),f2,f3,f4,…,fn(特征空间尽量远离f11)

最小化对比学习目标函数

好的结果猜想:1.字典大2.字典再训练过程中保持一致性

  1. 字典越大,key越多,表示视觉信息越多越丰富,q泛化好,小的字典模型可能学shortcut,泛化不好
  2. k0,k1,…,kn相同或相似编码器得到,和q对比时保持一致,否则q找到使用相似编码器的k,学到shortcut

之前对比学习方法受限于上述两个问题。

MoCo:给无监督对比学习构造一个大又一致的字典

img

queue:表示字典,受限于显卡内存,字典大小和前向batchsize大小分开

当前的mini-batch入队,最早的mini-batch出队,字典大小可以很大,其中元素更新不频繁

当前的batch是由当前编码器得到的,不同时刻的encoder不同,特征不同:

momentum encoder:Θk=m·Θk+(1-m)Θq

Θq:现在的编码器

Θk:momentum encoder

尽最大可能保持字典k的一致性

代理任务:instance discrimination

q和k是同一个图片的不同视角(同一个图片不同的随机裁剪),qk能配上对。

直接迁移到7个下游任务上(检测,分割)都能超越有监督

Related Work

自监督是无监督学习的一种。

1.代理任务pretext:没有实际应用场景,用来学习好的特征

2.Loss functions:最常见的是衡量输出和固定目标的差别,L1,L2,生成式(mae),判别式(eight position,一张图分9块,给出5,随机给一块预测在那个位置)

对比学习目标函数:衡量相似性,相似特征拉近,不同特征拉远

对比学习目标函数和生成式,判别式区别:前面两个是固定目标,对比学习目标是不断改变的(目标是encoder抽出的特征,在变,上文的k)

对抗性目标函数:衡量的是两个概率分布之间的差异,做无监督数据生成,后来做特征学习

Pretext tasks

  1. denoising auto-encoders:重建整张图
  2. context auto-encoders:重建某个patch
  3. colorization:图片上色当自监督信号

生成伪标签:

examplar image:同一张图做数据增广

patch oderings,tracking,聚类

**对比学习和不同代理任务关系:**代理任务可以配对某种目标函数使用。contrastive predictive coding (CPC)做预测性对比学习(context auto-encoding),contrastive multiview coding (CMC)用物体不同视角做对比和(图片上色很像,黑白和彩色)

对比有监督学习:

X->Y 和GT算loss

X->Y 代理任务充当GT,算loss

Method

Contrastive Learning as Dictionary Look-up

encoded query q

set of encoded samples{k0,k1,…},假设字典里只有一个k和q配对(理论上可以用多个)

对比学习目标函数要求:q和k0相似,loss低,q和其他所有k都不相似,loss也低(训练好了,不更新了)

为什么不能用cross entropy loss:k太大了算的多

NCE loss(noise contrastive estimation):之前类别太多不好算softmax不能算目标函数,简化为二分类,数据类别,噪声类别,做对比,计算复杂度还是很高,就选一些负样本取近似,选的样本少就不那么近似,选的多效果好。

InfoNCE:一个变体,噪声类别可能也有很多类。tao是温度超参数,类似知识蒸馏。K指的是负样本数量,sum是一个正样本和K个负样本上做的。就是cross entropy loss,做K+1分类。

img

代理任务不同时fq和fk可以完全相等、参数部分共享也可以不一样

Momentum Contrast

写作:第一段承上启下

如何把字典看成队列:队列里放key,每个minibatch新的入队,老的出队。可以用标准的minibatch size,字典可以很大。早的算的是过时的key,新的一致。

Momentum Update

key编码器没办法通过反向传播更新参数(梯度本来要更新队列中所有的k)。直接复制q的encoder的参数效果不好,更新太快参不一致。

提出动量更新:Θk=m·Θk+(1-m)Θq,虽然编码器不同,但区别不打,实验里m=0.999,更新非常缓慢,m=0.9效果比0.999效果不好

解释之前方法为何受限:

  1. 端到端:好处是encoder都可以通过梯度回传更新,字典一致性高,encoder可以不同以前工作用的都是同一个,实验都用res50,受限于字典大小(显存不够大),simCLR

    img

  2. memory bank:把数据集特征存到一起,高效,但是特征一致性不好,是在bank里随机抽样的,回传梯度更新encoder后在对应k的位置生成新的k,替换memory bank里旧的。这些特征都缺乏一致性,q和k计算时一个bank里的k是上一轮epoch更新的,非常不一致。

    img

    3.MoCo:

img

shuffle bn:多卡训练之前打乱样本再送

实验:

1.lr=30,有监督和无监督学到的分布是很不一样的

2.针对贡献的消融实验

3.下游任务数据集足够大可以直接随机初始化训练

Discussion and Conclusion

预训练数据集imagenet(100万)换到in-1m上,提升比较小,有没有可能和MAE结合起来用

he等人希望moco对其他contrastive learning的pretext任务有帮助,提供一个稳定自监督信号

MOCO v2

img

使用预测头

将 MoCo 网络结构中经过卷积层后的一层线性MLP扩展为两层非线性的MLP,使用ReLU激活函数。该方法在 SimCLR 中使用

数据增强策略

增加使用 Blur augmentation 来进行数据增光。但 color distortion 并未取得很好的效果

MOCO v3

还没看完,总的是使用transformer架构,backbone换成transformer encoder

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对比学习MocoV1 的相关文章

随机推荐

  • 积分规划:构建全面会员积分管理系统

    在当今竞争激烈的市场环境中 企业要想保持用户的忠诚度和活跃度 建立一个全面的会员积分管理系统是至关重要的 积分制度不仅可以激励用户参与 还可以增加用户的消费频次和购买金额 本文将深入探讨如何构建全面的会员积分管理系统 以实现更好的私域营销效
  • 消息队列(MQ)

    一 为什么要用消息队列 消息队列的应用场景 应用解耦 异步任务 流量削峰 问题背景 学生向老师请教问题 如果学生A正在向老师请教问题 那么后面的学生依次排队等候 直到轮到自己请教问题 这样的模式会使整个系统的效率较低 学生排队等待时间太久
  • pygame学习笔记

    pygame学习笔记 1 基础知识 参考 1 基础知识 1 设置死循环 持续显示窗口 import pygame import sys pygame init 初始化pygame size 320 240 设置窗口大小 w h screen
  • 数字逻辑触发器(一)

    触发器 一 定义 是一种具有记忆功能的逻辑部件 具有两个稳定的输出状态 用这两个稳定的状态来表示二值信号的0和1 在外界输入信号的激励下 触发器的输出状态会发生改变 二 触发器的种类举例 基本RS触发器 主从触发器 维持阻塞触发器 D触发器
  • 【appium报错】Original error:Could not proxy command to remote server. Original error:socket hang up

    博客链接1 系统自带的应用kill掉appium相关的进程 博客链接2 卸载并重装appium相关安装包 如果上面的方法仍不能解决问题 暴力解决 卸载设备上的appium setting 等appium安装的app 卸载自动化启动的app
  • UncaughtExceptionHandler 获取线程运行时异常

    我们知道线程执行体的方法接口定义为 public void run 因此线程在执行单元中是不允许抛出checked异常的 且线程之间是相对独立的 他们运行在自己的上下文当中 派生它的线程无法直接感知到它在运行时出现的异常信息 为了解决这个问
  • P2084 进制转换

    题目背景 无 题目描述 今天小明学会了进制转换 比如 10101 2 那么它的十进制表示的式子就是 1 2 4 0 2 3 1 2 2 0 2 1 1 2 0 那么请你编程实现 将一个M进制的数N转换成十进制表示的式子 注意 当系数为0时
  • vector 删除元素的几种方法

    vector 删除元素的几种方法 1 利用成员函数pop back 可以删除最后一个元素 2 利用成员函数erase 可以删除由一个iterator指出的元素 3 通过STL中的算法库函数remove 删除指定的元素 与list容器自带的成
  • 鱼眼相机标定

    分享一个最近在复习的一个鱼眼相机标定 这个大佬的链接 因为课题相关 先视觉2D检测再通过标定形成视锥然后再点云目标检测 所以先埋一个坑 刚好2D检测这块做的差不多 不过是Python版本哈 后续肯定要用C 先上一个大佬的鱼眼内参去畸变的链接
  • MavenFor this reason, future Maven versions might no longer support building such malformed projects

    使用IDEA MAVEN clean时提示如下错误 Maven For this reason future Maven versions might no longer support building such malformed pr
  • 查字典(c++)

    思路 判断insert和find insert放入string set find就用count 过程 1 判断insert和find 2 放入set中 3 判断结果 代码 include
  • 清除浮动之双伪元素清除浮动

  • 结构体指针

    结构体指针 当一个指针变量用来指向一个结构体变量时 1 结构体指针变量的值是所指向的结构体变量的起始地址 2 通过结构体指针可以访问结构体变量 定义形式 结构体名 结构体指针变量 也可在定义结构体时 同时定义这个结构体变量 注 1 结构体指
  • 实现从一个类中的实体对象获取所有属性值注入到另一个不同类的实体对象的对应属性中

    背景 由于dao层的可视化对象 bean 跟service层以及controller层的bean对象是分开的 也就是同一业务流水线中 在controller层是跟界面或者接口的交互bean 而到了操作数据库层则用的匹配数据库表的实体bean
  • python wechatsougou_使用Python的requests库模拟登陆微信搜狗,爬取100X10篇微信文章并保存到MySQL...

    自学的python和爬虫技术 使用到Redis MySQL数据库 request请求模块 re Xpath解析模块 dumps loads序列化和反序列化 还可以配合代理池使用 爬取的是https weixin sogou com 网站只能
  • RPM打包原理、示例、详解

    RPM Redhat Package Manager 是用于Redhat CentOS Fedora等Linux 分发版 distribution 的常见的软件包管理器 因为它允许分发已编译的软件 所以用户只用一个命令就可以安装软件 看到这
  • BI数据系统的设计流程

    BI大数据产品 数据管理平台可以通过报表或者BI模块来搭建 在专栏 帆软数据应用研究院 里有关于企业数据管理和BI报表平台建设的案例 站在项目实施的角度 可以从技术和业务两个层面来考虑 前期进行需求调研 罗列了一张建设思路图 技术上需要考虑
  • 量化投资学习-30:股性与人性,从傅里叶变换谈谈股市大V的操作风格的观察

    1 名家的操作风格的差异 2 方波的傅里叶变换 徐小明 1次基频率 冯矿伟 3次谐波 东风红 5 7次谐波
  • 把多层次的 XML 文档解析为 TreeView 显示

    XML 文档是一个有多层树形节点的文档 因为节点数不确定 所以要跟踪每个节点 需要用到递归 肉眼阅读 XML 比较累 需要去对付一堆的尖括号 用 Delphi 程序把它显示为一个 TreeView 的树结构 比较容易用眼睛去看 以下是我的代
  • 对比学习MocoV1

    对比学习 希望模型能分辨哪些图片类似 哪些图片不类似 即类似的图片特征空间拉近 不类似的拉远 可以设计不同的代理任务提供监督信号 代理任务例子 个体判别 Xi经过两种Ti变成两张不一样的照片 为正样本 其他都是负样本 损失 NCE loss