CLIP
本文最后更新于92 天前,其中的信息可能已经过时,如有错误请发送邮件到3046699620@qq.com

CLIP是一个神经网络,它使用自然语言来监督视觉训练,可以将它运用到任何视觉分类任务,具体的就是将类别的名字用自然语言进行描述,然后和图片一起进行混合编码,可以0样本学习(zero-shot learning)。值得注意的是,该神经网络并没有使用到标签,是自监督学习。

背景

SimCLR

自监督学习会涉及到对比学习的概念,SimCLR [1](A Simple Framework for Contrastive Learning of Visual Representations)是一种对比学习网络,可以对含有少量标签的数据集进行训练推理,它包含无监督学习和有监督学习两个部分。

在第一阶段先进行无监督学习,对输入图像进行两次随机图像增强,即由一幅图像得到两个随机处理过后的图像,依次放入网络进行训练,计算损失并更新梯度。如图所示,将小狗进行了两次随机图像变换,再经过残差网络,进行图片编码,使用一个MLP(多层感知机)做预测或者投影到另外一个空间,进行横向比较,从同一个图像生成的结果相近,与猫对比,则相差较远,损失函数目的就是使得两个正样本距离更近(\( z_{ \theta } \),\( z_{\theta}^{0} \)),与负样本之间的距离更远(\( z_{ \theta } {1} \))。第二阶段,加载第一阶段的特征提取层训练参数,用少量带标签样本进行有监督学习(只训练全连接层)。这一阶段损失函数为交叉熵损失函数CrossEntropyLoss[2]

BYOL

再进一步发展,提出了一种新的自监督学习方法,BYOL(Bootstrap Your Own Latent)[3][4],和以往需要大量负样本的对比学习方法不同(SimCLR),BYOL不依赖于负样本对。

BYOL使用online和target两个神经网络来学习,online网络由一组权重定义并由三个阶段组成:encoder 、projector(投影到同一个空间) 、predictor 。target与online架构相同,但使用不同的参数。target提供了用于训练online的回归目标,其参数是online参数的指数移动平均值。学习loss的梯度只会反向传播给online网络,不会反向传播给target网络,类似于MoCo[5],target网络使用动量更新,相当于target模拟给online提供了一个负样本。(补充:为什么使用指数移动平均值,整体网络的不确定性很大,target和online同时学习,很快就会收敛,收敛到online和target结果一致,也就是模式崩塌,loss为0,然而并不希望出现这样的结果,通过降低学习的效率来避免这样的情况,也就是target不进行学习,target通过历史online进行慢慢的更新,online预测结果和target进行对比,计算损失,更新迭代)

CLIP

CLIP模型由图像编码器和文本编码器两个部分组成,图像编码器负责将图像转换为特征向量,可以是卷积神经网络或Transformer模型(ViT)[7],文本编码器负责将文本转换为特征向量,通常是一个transformer模型,通过共享一个向量空间来实现跨模态的信息交互。

模型的输入是一个图片和文字的配对,图片输入到图片编码器,得到一个特征向量,文本会通过一个文本编码器,从而得到对应文本的特征向量。CLIP会在这些特征上做对比学习,配对的图片文本对就是正样本,在矩阵中对角线上的即正样本,有N个正样本,\(N^{2}-N\)个负样本。

clip中没有分类头,进行预测的话,这里做了一个处理,就是将数据集中的类别描述成一个句子,以 ImageNet 为例,CLIP 先把 ImageNet 这1000个类(如图中”plane”, “car”, “dog”, …, “brid”)变成一个句子,也就是将这些类别去替代 “A photo of a {object}” 中的 “{object}” ,以 “plane” 类为例,它就变成”A photo of a plane”,那么 ImageNet 里的1000个类别就都在这里生成了1000个句子,然后通过先前预训练好的 Text Encoder 就会得到1000个文本的特征。

在推理时,只要把这张图片扔给 Image Encoder,得到图像特征后,就拿这个图片特征去跟所有的文本特征去做 cosine similarity(余弦相似度)计算相似度,看这张图片与哪个文本最相似,就把这个文本特征所对应的句子挑出来,从而完成分类任务。

参考

[1]SimCLR图像分类——pytorch复现_simclr pytorch-CSDN博客

[2]Pytorch CrossEntropyLoss() 原理和用法详解-CSDN博客

[3]BYOL(NeurIPS 2020)原理解读-CSDN博客

[4]深度学习(自监督:BYOL)——Bootstrap Your Own Latent A New Approach to Self-Supervised Learning_byol, bootstrap your own latent-CSDN博客

[5]深度学习(自监督:MoCo)——Momentum Contrast for Unsupervised Visual Representation Learning-CSDN博客

[6]CLIP 论文逐段精读【论文精读】_哔哩哔哩_bilibili

[7]深入浅出一文图解Vision in Transformer(ViT)

[8]https://blog.csdn.net/h661975/article/details/135116957

评论

  1. shichen
    Android Chrome
    山西省朔州市 联通
    5 月前
    2024-8-11 12:22:57

    好赏心悦目的笔记条理分明

    • lumos
      博主
      shichen
      Windows Edge
      浙江省温州市 联通
      5 月前
      2024-8-11 12:31:09

      感谢姐姐夸奖!!!!!😍😍😍

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(*^▽^*)
 ̄﹃ ̄
(╯‵□′)╯︵┴─┴
(~ ̄▽ ̄)~
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
( ͡° ͜ʖ ͡°)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
つ﹏⊂
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
(´▽`ʃ♡ƪ)
w(゚Д゚)w
(๑•̀ㅂ•́)و✧
(#`O′)
凸(艹皿艹 )
o(≧口≦)o
≡ω≡
(*/ω\*)
○| ̄|_
(⊙ˍ⊙)
Σ(っ °Д °;)っ
o( ̄ヘ ̄o#)
<( ̄︶ ̄)>
(。・∀・)ノ゙
(o゜▽゜)o☆
╥﹏╥
ヾ(´・ω・`)ノ
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
😶
😒
🙂‍↔️
🙂‍↕️
🤤
😪
🌚
🌝
🙉
🙈
🙊
😵‍💫
😶
🥳
😮
🥹
😣
😀
😄
😝
😦
😅
🤣
🫣
🤔
🥰
😍
🤩
😭
😢
😓
😺
😸
😻
💢
💦
💤
👌
🤏
✌️
🙏
💪
🧠
👀
🙅
颜文字
Emoji
小恐龙
Heo
其它
上一篇
下一篇