0%

Learning transferable visual models from natural language supervision

总结

  • 提出CLIP, for Contrastive Language-Image Pre-training
  • 在imagenet上,无监督训练打平Res50,堪比alexnet
  • 训练流程如下,使用已有图片、文本对的数据集进行pairwise训练。4亿条清洗过的数据

6862b5ea521a83ee846c2eb8a9714e7f.png

  • 这种方式训练是没有分类头的无法直接落地应用。作者引入prompt template机制,也是pair wise的去做分类。用句子效果比用直接裸的单词效果更好,因为训练的时候看到的都是划分好的句子么。这个template也是有一些讲究的,所以后面还提到了prompt engineering和prompt ensemble
  • 这种方式可以很好的拓展,不局限于训练中所使用的的类别,拜托了categorical label的限制
  • 迁移效果非常好,在OpenAI官网上列举了各个不同数据集的效果。但是这块有点存疑的是数据量级的差别4亿对100万

2d40348cd2792782c86a6f1798005067.png

  • clip后面的拓展工作
    • clip + styleGan,ICCV oral
    • ciipDraw
    • clip + 目标检测
    • clips 视频检索,通过文本去搜视频里的内容,case都很惊艳

摘要

  • 目前已有的方法是在固定类别的数据集上进行学习,作者想引入语义的信息当做建都信号进行学习
  • 所用数据集体量大约4亿,可以和有监督的Resnet在ImageNet上面打平
  • 开源了与训练模型和推理代码
  • 受到文本模态(GPT3)的启发,想在CV领域应用无监督
  • 和之前17年的工作有一些相似之处,但是17年并没有transformer,所以效果并不是特别好
  • transformer之后还有挺多的工作和clip比较像,但是在训练方式和数据集规模上都有一定的差距
  • 还有一些弱监督工作的探索,类目拓展了,但是还没有到可以摆脱类目限制的地步
  • 作者总结是主要是数据规模和模型规模上的差异
  • 因为要展示模型的迁移能力,作者在30个数据集上都取得了不错的效果

模型

  • 用文本建都信号去训练视觉模型非常有潜力
  • 造了一个很大的数据集,和训练GPT-2的那个数据集比较接近
  • 训练效率很重要,动辄需要训练很多十几个GPU年,训练由预测型任务(给一张图片输出预测词)改为对比学习,训练效率提升四倍
  • encoder出来的向量通过投射层投射到多模态空间,这个投射层是线性投射,怀疑之前在对比学习非线性投射层的涨点主要是针对图片单模态的涨点
  • 温度参数可训练
  • 图片模型是resnet或transformer,文本模态使用transformer
  • 用最小的resnet50去做超参搜索
  • batch size是3w+(SimCLR是8000+)
  • 混合精度

实验

  • 研究transfer 的动机:标签闭集训练的结果还是需要有标签的数据去做微调
  • prompt 工作:歧义性、训练推理一致性
    • 一个简单的模板直接提升了1.3%的准确率
    • 加类型限定、双引号标注
    • ensemble多种提示方式叠加
    • 最终使用的模板数量多达80个
  • 在多个数据集上验证,效果有好有坏,通常来说简单物体数据集效果好,抽象数据集效果差

f6b9ba44d7f4871727b953ef54c5de2c.png

  • 作者认为有些特定领域的问题做zero shot肯定是不合理的,所以又加了few shot的结果对比(把图片模态冻住,只训练文本)

88df0cd849f7052f938572cbb1eb7c2c.png

  • 表征学习有个悖论:如果你把网络全部放开无法证明与训练模型的好坏;如果冻住主干只训练分类头,那么就很不灵活,无法达到很好的效果
  • clip在数据分布变化比较大的数据集上有很好的表现

7c10602c7b7f3b5d42e9f61a175317b7.png

  • 和人类对比(5个人,一个数据集),很有意思的点
    • 人类oneshot和twoshot在准确率上没有差别
    • 对于clip和人来说各个类别难易度的趋势是一致的
  • 数据去重实验,验证clip本身效果就比较好

局限性

  • 和state of art的有监督训练模型比有差距
  • 有很多领域,比如一些抽象概念的领域,clip都不行
  • 数据分布如果差距特别大,泛化性也不行,比如MNIST
  • 会有few shot不如zero shot的情况