Bryanyzhu对比学习串烧

Bryanyzhu对比学习串烧

对比学习在CV的发展


原视频 https://www.bilibili.com/video/BV19S4y1M7hm?spm_id_from=333.1007.top_right_bar_window_history.content.click


前言

18年到21年一个简单的对比学习总结性工作,串接了一些有联系的工作内容。
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

Phase 1. 百花齐放

示例:InstDisc,CPC,CMC
特点:方法模型,目标函数,代理任务都还没有统一

1.1. Inst Disc

在这里插入图片描述

受到有监督学习的启发,将豹子图片喂给分类器之后排名前几的都是豹子相关图片。因为他们照片长得相似,而与标签无关,进而提出了个体辨别的任务。
无监督方式是按照类别走的有监督信号走到了极致,将每个图片都看成一个类别。
在这里插入图片描述
通过卷积神经网络将图片编码成特征,这些特征在最后的特征空间中,可以被尽可能的分开。即每个图片都应该与其他图片尽量的分开。
训练:对比学习。正样本即图片本身,其余为负样本,将负样本存在memory bank中。
负样本随机抽一些,使用NCE loss,更新完后放回memory bank中。
缺点:内存占用大。

1.2. Inva Spread

在这里插入图片描述
对于相似的图片,特征应该保持不变性,不相似的物体特征应该尽量分散开
在这里插入图片描述
正样本:原图片和一个经过data augmentation的样本。
负样本:该mini-batch中除去正样本本身之外的其他样本
目标:可以通过一个编码器做端到端学习。
特点:只用一个编码器。不需要外部数据结构存储大量的负样本。
缺点:字典不够大,负样本较少,效果较差。

1.3. CPC

生成式代理任务。
在这里插入图片描述
将之前的输入扔进编码器,将输出的特征放入自回归模型,得到输出CT。可以用CT来预测未来的输入。
正样本:真实的未来时刻的输入
负样本:其他。
优点:具有普适性,可以运用在各个方面(图片,文字,语音等)。

1.4. CMC

通过多视角做对比学习。学习一个足够强大的特征,增大所有视角之间的互信息。
在这里插入图片描述
即使输入不同,但对应图片一样,输入之间互为正样本。
多模态处理输入时需要使用不同的编码器。后来可以用transformer来处理不同模态的输入。

Phase 2. CV双雄

示例:MoCo v1, SimCLR v1, MoCo v2, SimCLR v2, CPC, CMC的延伸工作 以及SWaV
特点:发展迅速,不足一月就会被刷榜。

2.1. MoCo v1

在这里插入图片描述

  1. 队列
  2. 动量编码器,绝大部分依靠自己上一时刻的状态(即使是队列更新,编码器之间区别很小)
    通过以上两点来改进Inst Disc,可以构造一个又大又一致的字典。

2.2. SimCLR

在这里插入图片描述
原图进行不同的数据增强,正样本为输出的图片,负样本为该batch中其他的图片以及其生成图。
特点:

  1. 使用更多的数据增强(颜色和裁剪效果影响最大)
  2. 加入projector head(训练时使用)。直接在特征后加入一个MLP(Linear,BN,ReLU,Linear,BN),得到10个点的提升。用经过MLP之后的特征进行对比。
  3. 使用更大batchsize
  4. 训练时间更久

2.3. MoCo v2

2.16 SimCLR发表。3.9号MoCo v2 发表。
借鉴了SimCLR的技术,介入了MLP(Linear,ReLU,Linear),数据增强,训练了更多的epoch。
Moco使用更小的内存和训练时长,也可以达到较好的效果。

2.4. SimCLR v2

在这里插入图片描述
在v1上进行了改进,使用更大的模型进行无监督训练;加入了projection head; 动量编码器。

2.5. SwAV

在这里插入图片描述
借助先验信息,和聚类中心比。
通过将特征(BD)与Prototype(DK)进行点乘,得到新维度的特征(BK),用新特征进行对比。
multi crop:使用多个小的size的crop 从2个224
224变为2个160160和4个9696
优点:不需要和很多的负样本进行对比,只需要和聚类中心进行对比。

4. CPC v2

  1. 使用更大的模型
  2. 使用更大的图像块
  3. 更多方向上的预测任务
  4. 使用layer norm代替了 batch norm
  5. 更多的data augmentation

5. Info Min

最小化互信息,即不多不少的互信息。选择合适的数据增强和视角。

Phase 3. 不用负样本

示例:BYOL及其改进,SimSiam 总结并精简。
特点:卷积神经网络做对比学习

3.1 BYOL

不用负样本可以正常训练模型?Yes!
正样本自己跟自己学,左脚踩右脚 ↑。.
在这里插入图片描述
又加了一层MLP(prediction head)(Linear,BN,ReLU,Linear),将匹配问题变为预测问题。
上面相当于query 编码器,下面是key编码器。key编码器都是query编码器的动量更新,但是代理任务不同。相当于用自己一个视角的特征去预测另一个视角的特征,通过预测型的任务来完成模型训练。
目标函数loss为MSE。

3.1.1 BYOL blog

通过测试怀疑是batch norm提供一种隐式的负样本,导致模型不会坍塌。

3.1.2 BYOL v2

作者做了很多实验证明batch norm没有提供隐式的负样本。Batch Norm主要提高模型的稳健性。
提出使用group norm 和weight standardization,不计算batch中其他样本。
证明BYOL就是可以自己和自己学。

3.2 SimSiam

化繁为简,提出孪生网络
在这里插入图片描述
没有使用动量编码器。
输入两个视角过编码器得到两个特征,接着得到两个特征的预测。两个预测都可以做 loss。
Stop gradient 保证模型不会坍塌。相当于在解决两个子问题。可以理解为一个k-means问题,先分配在更新。

3.3 对比

在这里插入图片描述

  1. SimCLR 端到端学习,两个方向都有梯度回传。
  2. SwAV 和聚类中心对比。
  3. BYOL predictor使得对比任务变为预测任务,增加了动量编码器
  4. SimSiam 去掉了动量编码器。
    在这里插入图片描述
    动量编码器还是很好用的!
    在这里插入图片描述
    MoCo v2 迁移任务效果好一些。

Phase 4. Transformer

示例:MoCo v3, DINO
特点:使用vision transformer

4.1. MoCo v3

将vit替换resnet在这里插入图片描述自监督vit问题------模型训练不稳定,在batch size变大时,曲线会突然降低。
trick:将第一层冻住。

4.2. DINO


用student来预测teacher的输出
加入了centering,减去均值。
加入stop gradient。
在这里插入图片描述


总结

近年来对比学习研究成果的联系与不同
在这里插入图片描述

Phase 1

  1. InstDisc 提出个体判别的任务,使用memory bank外部数据结构存储负样本,获得又大又一致的的字典。
  2. Inva Spread (端到端的学习)只用一个编码器。缺点:受限于batchsize大小的限制,性能不够好。
  3. CPCv1 提出infoNCE loss。 它为预测型的代理任务,可以做图像,音频,视频文字和加强学习等。
  4. CMC 将两个视角的任务拓展到多视角,铺垫了多模态我的对比学习。
  5. DeepCluster 基于聚类学习

Phase 2

  1. MoCo v1 延伸于InstDisc。将memory bank变为队列,加入了动量更新编码器。一个比有监督预训练模型变现更好的无监督预训练模型。
  2. SimCLR v1:延伸于Inva Spread。改进:加大batchsize,使用更多数据增强,加入projection head,增加训练时间。
  3. CPC v2 :借鉴前者的技术,性能提升30多个点
  4. CMC 分析近期技术,提出info Min原则(两个样本或者两个视角之间的互信息,要不多不少才是最好的)
  5. Moco v2. 将SimCLR v1技术用在 moco v1上,提出Moco v3。
  6. SimCLR v2 主要做半监督学习。
  7. SwAV 结合聚类和对比学习。 使用了multi crop技术。

Phase 3

  1. BYOL:不要负样本,自己学自己,左脚踩右脚。使用mse loss。
    有博客BN Blog质疑BYOL可以工作是因为batch norm提供一种隐式的负样本,导致模型不会坍塌。
    新论文BYOL v2,通过消融实验证明BYOL不需要batch norm也可以正常训练。
  2. SimSiam:化繁为简,总结最近技术,提出简单的孪生网络学习方法,不需要大batch size,也不需要动量编码器和负样本。
    加入了Stop gradient 操作,使得SimSiam可以被看做EM算法,通过逐步更新的方法,避免模型坍塌。
  3. barlow twins改变了目标函数,使用两个矩阵比较相似性。

Phase 4

  1. MocoV3:将backbone网络从ResNet改为Vision Transformer,将patch projection layer冻住。
  2. DINO:同上,方法为把teacher 网络输出做归一化。目的都是使得模型可以稳定训练,防止模型坍塌。

Notes

几个改进模型的方法:
增加batch size;增加训练时长; 加入动量编码器;使用data augmentation;
对比学习还有可能会和其他方法进行结合。
未来NLP和CV大一统的时代就要到来。
transformer简单又好用,扩展性也好,可参考方向:tokenization和目标函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值