• 【多模态论文】CLIP(Contrastive Language-Image Pre-training)


    论文:Learning Transferable Visual Models From Natural Language Supervision
    链接:https://arxiv.org/abs/2103.00020

    摘要

    • 问题:

      • 对预定的类别进行预测,这种有监督的训练形式受限于额外标记数据 。如何利用图像的原始文本来获取广泛的监督数据?
      • 预训练的优势:Task-agnostic objectives使得在计算、模型容量和数据方面可以扩大几个数量级,能力有大幅提高。LP中的大规模无监督训练数据训练,而CV全部都是人工标注数据集,使用自然语言监督的方法进行图像表示学习很少见。
      • CV模型只能预测已知的图像类别,本文利用图像对应的文本数据,可能可以分辨未见类别的图像。
        在CV中加入自然语言数据实际结果不够好的原因归结于数据规模不够大
    • 方法:
      通过在4e (image, text) pairs数据集进行预训练,预测caption和图像是否match。并且可以zero-shot transfer到下游任务。

    • 优点:

      • 可以从大量自然语言数据中学习,无需标注进行监督学习
      • 灵活的零样本迁移

    方法详解

    1. 数据集创建
    • 三个现存图像数据集:MS-COCO和Visual Genome质量高,但各10w图像,数据量少;YFCC100M 1e图像,但质量参差,metadata少,过滤后剩1500w接近ImageNet。
    • 解决方案:从互联网收集各种公开可用的资源,通过query查询的方式获取图像文本对,构建WIT( WebImageText)。
    1. 训练方法
    • 遇到问题
      (1)训练效率问题:开始训练实验VirTex类似结构,同时训练CNN和Transformer预测生成图像caption,但实验表明慢了三倍速度。
      (2)图像描述、评论和相关文本种类繁多,任务过于困难
      也有之前的方法表明,对比目标比预测目标可以更好的学习表征以及相同性能下生成比对比需要更多计算量
    • 解决方案:不需要预测文本的单词,只需要把文本当成一个整体判断文本和图像是否匹配,这样速度能提高4倍。
      在这里插入图片描述
    1. 训练任务:给定N个图像文本对,CLIP同时训练图像编码器和文本编码器,通过最大化N个real pairs的余弦相似度并且最小化N^2-N个负样本相似度的方法学习一个多模态Space。两个编码器参数均随机初始化,不使用任何热启模型。损失函数使用symmetric cross entropy loss。
    2. 模型
      图像端:
    • ResNet-50,将 global average pooling替换为 attention pooling mechanism,q为global average-pooled 表示。

    • Vision Transformer,在patch和pos embedding结合前加了layer normalization
      文本端:Transformer,63M-parameter 12-layer 512-wide model with 8 attention heads,BPE+49,152词表,max-seq-len=76,[SOS]text [EOS],使用[EOS]作为文本表示。保留了mask loss。
      在这里插入图片描述

    • 训练目标:最小化N^2-N个负样本的相似度,最大化正样本间相似度。
      在这里插入图片描述

    下图为CLIP实现的伪代码:
    在这里插入图片描述
    只缩放文本编码器的宽度与ResNet的宽度成正比,发现CLIP对文本编码器的容量并不敏感。
    5. 训练

    • 图像编码器:5个Resnet系列,包括ResNet-50, a ResNet-101,RN50x4, RN50x16, and RN50x64(后面三个为ResNet50的缩放)。3个ViT,ViT-B/32, ViT-B/16, ViT-L/14。
    • 32 epochs,温度系数0.07(防止训练不稳定必须),bs=32768
    • 为了加速训练和节省显存,使用了:Mixed-precision,gradient checkpointing, half-precision Adam statistics,half-precision stochastically rounded text encoder weights

    实验

    1. zero-shot transfer:作者建议将零样本迁移能力作为衡量模型学习能力的一种方式。
      用于图像分类
      在这里插入图片描述

    2. 如何zero-shot?
      之前分类方式的弊端:多义性的label,缺乏上下文,无法判断。并且训练数据文本大多为完整句子,而非一个单词。
      zero-shot方式:使用prompt template “A photo of a {label}.”
      使用prompt方式,在ImageNet提高了1.3%的准确率
      在这里插入图片描述
      针对不同的分类任务,详尽地指出是哪一种类别,会提高zero-shot的效果。例如Oxford-IIIT Pets数据集, “A photo of a {label}, a type of pet.”。还有Food101数据集a type of food ,FGVC Aircraft使用a type of aircraft。又或者指定图像形式,比如卫星图像-a satellite photo of a {label}。

    除此之外,ensembling over multiple zeroshot classifiers来提升效果,such as 'A photo of a big {label}" and “A photo of a small {label}”。在Embedding层面计算一个averaged text embeddings。
    在这里插入图片描述
    3. Zero shot在各分类数据集效果
    在卫星图像分类(EuroSAT和RESISC45)、淋巴结肿瘤检测(PatchCamelyon)、合成场景(CLEVRCounts)、自动驾驶相关任务(如德国交通标志识别(GTSRB)、识别到最近汽车的距离(KITTI距离)等几个专业、复杂或抽象任务上,Zero shot CLIP非常弱。作者认为:测量零样本迁移,而不是少样本迁移,对于学习者没有先前经验的困难任务(例如几乎所有人的淋巴结肿瘤分类)是一项有意义的评估。
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    如何查看Docker中cuda的版本?
    项目日历是什么?如何规划?
    QNX在车机系统的应用
    使用tkinter开发GUI程序3 -- tkinter常见控件的特征属性(第一部分)
    RT-Thread中常用的指令
    Python Basics with Numpy(吴恩达课程)
    性能压力测试的优势与重要性
    CFdiv2-Intersection and Union-(线段树+转化求贡献)
    Keithley2420吉时利2420数字源表
    Java连接MySQL数据库
  • 原文地址:https://blog.csdn.net/weixin_42018581/article/details/138278861