• CLIP(Contrastive Language-Image Pre-Training)简介


    CLIP(Contrastive Language-Image Pre-Training):

    利用文本的监督信号训练一个迁移能力强的视觉预训练模型

    通过对比学习,训练得到图片和文本的相似度,传闻使用4亿个配对的数据和文本来进行训练,不标注直接爬取的

    注意: 由于训练数据基本都是英文,对英文支持的比较好

    用途:

    CLIP主要是用来做图片分类(计算图片和文本的相似度(关联度)), 也可以辅助做GAN,检测,分割,检索等等

    以往我们训练一个猫狗分类模型,换一个线条猫,点云猫,油画猫,穿着奇装异服的猫,分类网络很难还认识,但是现在只要加上一个 CLIP,模型马上就被扩展了.

    CLIP是如何训练的:

    CLIP是如何进行推理的:

    可用模型介绍和说明:

    `clip.available_models()`可列出CLIP可用模型列表:

    1. 'RN50',
    2. 'RN101',
    3. 'RN50x4',
    4. 'RN50x16',
    5. 'RN50x64',
    6. 'ViT-B/32',
    7. 'ViT-B/16',
    8. 'ViT-L/14',
    9. 'ViT-L/14@336px'

    CLIP 是一组模型。有 9 个图像编码器: 5 个卷积编码器和 4 个 transformer 编码器。卷积编码器是 ResNet-50、ResNet-101 和类似 EfficientNet 的模型,称为 RN50x4、RN50x16、RN50x64(数字越大,模型越好)。transformer 编码器是视觉 Transformer(或称之为 ViT(Visual Transformer)):ViT-B/32、ViT-B/16、ViT-L/14 和 ViT-L/14@336。最后一个在分辨率为 336×336 像素的图像上进行微调,其他的则在 224×224 像素上进行训练。

    ViT-B/16中:

            + ViT: Visual Transformer

            + B: Base(Base(基础)/ Large(大的)/ Huge(极大的))

            + 16: Patch Size(块大小), 16×16

    三个模型(Base(基础)/ Large(大的)/ Huge(极大的))的参数,在源码中除了有Patch Size为16*16的外还有32*32的。

    Model

    Patch Size

    Layers

    Hidden Size D

    MLP Size

    Heads

    Params

    ViT-Base

    16×16

    12

    768

    3072

    12

    86M

    ViT-Large

    16×16

    24

    1024

    4096

    16

    307M

    ViT-Huge

    14×14

    32

    1280

    5120

    16

    632M

    Layers 就是Transformer Encoder中重复堆叠Encoder Block的次数L

    Hidden Size 就是对应通过Embedding层(Patch Embedding + Class Embedding + Position Embedding)后每个token的dim(向量的长度)不用那么复杂,其实就是Patch Embedding后向量的长度

    MLP Size 是Transformer Encoder中MLP Block第一个全连接的节点个数(是token长度的4倍) MLP中第一个全连接层升维数

    Heads 代表Transformer中Multi-Head Attention的heads数。

    Params 参数量

    Patch Size 为32 x 32,即一张图片可以被划分为224/32 x 224/32 = 7x 7 个patch,每个patch的shape为: [32, 32,3] ,共7x7= 49个,我们可以对每个patch进行线性映射得到所需要的token [32 x 32 x 3] = [3072] ,即

     即一张图片被切分为49个patch,对每个patch进行变换后得到shape为[3072]的token,即tokens的shape为 [49, 3072] 。

    基准测试:

    具体使用方法和代码:

    github仓库: GitHub - openai/CLIP: Contrastive Language-Image Pretraining

  • 相关阅读:
    POJ 1328 Radar Installation 贪心算法
    家政预约接单系统,家政保洁小程序开发;
    一篇文章让你搞懂__str__和__repr__的异同?
    Nacos从0到1(基础篇)
    React组件在什么情况下会重新渲染
    如何利用软文推广进行SEO优化(打造优质软文,提升网站排名)
    k8s集群的简单搭建
    centos下if配合tar和unzip命令实现网站目录更新
    【mysql学习笔记30】锁(非教程)
    DDD之模块(Module)
  • 原文地址:https://blog.csdn.net/huang007guo/article/details/127320524