CLIP总结–Learning Transferable Visual Models From Natural Language Supervision

视频讲解:CLIP 论文精读
论文下载:https://openai.com/blog/clip/
代码地址:https://github.com/openai/CLIP
论文投稿:PMLR2021 Proceedings of Machine Learning Research 机器学习顶会

领域

计算机视觉领域,但融合了文字来促进视觉模型;

目的

通过NLP学习一个可迁移的视觉模型,并且发现语言和图像结合学习可以让模型学到更强的语义信息。

背景

  • 如今最好的机器视觉领域模型训练都是基于预设好的图像类别数,这种形式局限了模型泛化性和可用性,因为需要额外的标签数据来具体化视觉任务。

  • 而另一方面,在NLP领域,利用文本的监督信号涵盖的范围更加广泛(数据多样且足量),直接从文本图像对中学习是一个有前景的方向。

方法

首先从网上构建4亿文本对数据,利用预测文本对的匹配来从头训练一个简单的预训练任务模型,并且学到了最好的图像特征表示。

  • 得到预训练模型后,通过自然语言作为reference学习视觉信息实现下游的zero-shot迁移;

  • 通过图像和文本的配对,利用相似性/生成式的方法,摆脱固定类别的范式局限性;

就个人理解来说:

  • 提升数据规模:openai创建了一个超级大的样本库,涵盖了4亿文本图像对数据,之前的imagenet(10万),JFT(3亿)数据规模上有大幅度的提升。

  • 提升模型规模:具体是分别对图像,文本首先进行encoder,图像的encoder采用的是VIT和resnet,文本采用的时tranfomer的encoder。然后对encoder后的结果进行“对比学习”,类似协方差矩阵对各自进行匹配学习。

  • trick:

    • 在文本和图像的匹配时,文本这边使用的不是单词匹配,而是句子,这样可以解决单词多义性的问题,缩小解空间;
    • 同时提供一个提示模板(prompt template),这种简单粗暴的方式可以在imagenet上提升1.3%。
    • 使用句子来匹配后还可以使用集成的方法,官方提供80多个模板的句子做集成模型投票。这样得到的推理是多次推理的综合结果

伪码

# image_encoder - ResNet or Vision Transformer
# text_encoder - CBOW or Text Transformer
# I[n, h, w, c] - minibatch of aligned images
# T[n, l] - minibatch of aligned texts
# W_i[d_i, d_e] - learned proj of image to embed
# W_t[d_t, d_e] - learned proj of text to embed
# t - learned temperature parameter
# extract feature representations of each modality
I_f = image_encoder(I) #[n, d_i]  图片编码(使用resnet、VIT)
T_f = text_encoder(T) #[n, d_t]   文本编码 (CBOW、text tranformer、Bags of words)
# joint multimodal embedding [n, d_e]
I_e = l2_normalize(np.dot(I_f, W_i), axis=1)  #L2范数归一化+投射层操作
T_e = l2_normalize(np.dot(T_f, W_t), axis=1)
# scaled pairwise cosine similarities [n, n]
logits = np.dot(I_e, T_e.T) * np.exp(t) #求相似度矩阵
# symmetric loss function
labels = np.arange(n)
loss_i = cross_entropy_loss(logits, labels, axis=0) #求图片的匹配求交叉熵损失
loss_t = cross_entropy_loss(logits, labels, axis=1) #求文字的匹配求交叉熵损失
loss = (loss_i + loss_t)/2 #对两者的损失取平均

结果

  • 在30个不同的视觉数据集上验证模型的有效性,包括OCR,视频动作识别,地理定位,以及一些微调变形的物体分类。CLIP模型可以很容易的迁移到大多数任务,不需要特定数据集的微调,可以与全监督的baseline比肩。

  • 在ImageNet上,Zero-shot的情况下与resnet50的效果差不多。

缺点

  1. 模型的训练结果没有特别强,与现在的一些更先进的模型效果有差距,仅仅与resnet50比肩;
  2. 对细分类,更加抽象的任务效果不好,比如说像纹理分类,计数这种任务的Zero-shot迁移效果一般;
  3. 在自然图像上效果不错,但是如果与自然图像差异较大的图像,比如MNIST这种简单但是手工标制造的分类效果仅仅88%,这是不符合直觉的情况;
  4. CLIP的训练是给定的类别中对比,这限制了他的灵活性;
  5. CLIP依然存在数据效率不高的情况,希望在数据读取不增多的情况下使得数据训练样本增多,比如数据增强,自监督,伪标签;
  6. 在Zero-shot中带入了偏见,因为是在验证集上直接微调的;
  7. 数据未清洗,有一定的隐藏偏见;
  8. 有反直觉现象:在迁移任务中,few-shot中会出现不如zero-shot的情况,具体来说就是在下游任务中对每个类别提供1-2张样本训练时的效果,还不如不提供任何样本直接预测的效果。

展望

  • 根据上面的第4点,可以使用image caption来预测文本,增强模型灵活性;
  • 可以将对比学习(计算相似度矩阵)的方式改进为与生成学习目标函数相结合的方式;
  • 利用数据增强,自监督,伪标签提升数据的利用效率;

相关论文

现在CLIP论文在下游论文有大量的后续工作了,比如目标检测,分割,视频动作识别,检索,多模态,图像生成。

clip-summary相关推荐

  1. 有时候会跳过clip没有执行 somtimes Timeline Clip will be skipped

    帧率过低,或增大了Time.timeScale,会导致一次Update之后,经过了较长的时间片,PlayableDirector的当前时间time跳过了某些Timeline Clip,因此不会执行Cl ...

  2. unity小技巧收集总结--自用(一)

    目录 一.asset序列化: 二.打包AB包: 三.编辑器查找和进度显示: 四.代码设置AB包名: 五.代码清除Ab包名: 六.简易单例 七.移动端判断是否点在UGUI组件上 八.默认unity 脚本 ...

  3. Unity3D HoloLens2 中文文字转语音即语音合成(语音提示)功能

    文字转语音 UNITY_WSA平台 处理过程和实现原理 中文需要设置声音 上代码 使用方法 一.部署好Unity3d HoloLens项目工程 二.新建节点 三.添加TTS组件并配置 四.调用TTS功 ...

  4. Unity动作表情工具(编辑器模式下一边播动作一边播表情)

    一直忙于学习技术和工作好久没写博客 这次分享一下我写的一个动作表情工具 先说一下需求:美术把一帧帧表情图导出来,一张张排好序号,然后放到编辑器里面打开一个工具界面可以选动作,同时切换对应的表情,在编辑 ...

  5. OneAlive--游戏音效管理器

    /* 游戏音效管理器* 功能:管理游戏中音效的播放和声音的调节* audioSourceBG是背景(2D)音乐,挂在相机上即可* gamesound是游戏音效(3D)挂在人物角色身上*/using S ...

  6. 小聊聊NGUI中Panel的Clip功能(之一)

    NGUI中的Panel具有裁剪的功能,操作上便是设置一个Panel类型即可~ 原理上,该裁剪功能是基于Shader来实现的,简单列一下相关的着色器代码: v2f vert (appdata_t v) ...

  7. Clip Studio Paint 高级着色学习教程

    剪辑工作室颜料着色专业指南! A Pro's Guide to Coloring With Clip Studio Paint! MP4 |视频:h264,1280×720 |音频:AAC,44.1 ...

  8. tensorflow在训练和验证时监视不同的summary的操作

    如果想在训练和验证时监视不同的summary,将train summary ops和val summary ops放进不同的集合中即可. train_writer = tf.summary.FileW ...

  9. LeetCode 228: Summary Ranges

    Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...

  10. 零样本风格迁移:多模态CLIP文本驱动图像生成

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:GitHub ,新智元 [导读]零样本的风格迁移听说过没有?英 ...

最新文章

  1. 《React Native移动开发实战》一一3.4 完善商品列表——ListView组件
  2. ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)
  3. OpenCV C++ 01 - Load Image from File and Display
  4. PyTorch | Tensor、Numpy、Variable之间的转换
  5. There are NAN in the matrix, however, you did not set missing=NAN
  6. linux nuttx 环境搭建,ubuntu14.04 nuttx开发环境的搭建
  7. SpringBoot 使用AOP功能
  8. 问答Goodfellow:没有样例能不能训练机器学习算法?
  9. indesign教程,如何转换图形和框架?
  10. Mac多功能文件搜索软件:HoudahSpot
  11. 应用程序平台应用之星:在线手机应用开发平台 不用搭建环境
  12. angular2 --使用DecimalPipe格式化数字
  13. Android做一个WiFi信号测试,Android开发——WiFi信号检测
  14. flask form表单
  15. clang diagnostic的简单介绍
  16. 华为锁屏后微信无法连接服务器,华为手机锁屏时无法接收微信消息怎么办?
  17. 【Asesprite】快速自制Tileset瓦片地图集(俯视角)
  18. 盘点2015年英特尔旧金山IDF峰会上的黑科技
  19. python微信小程序 java电子书阅读器系统uniapp
  20. Java8 默认垃圾回收器(GC)

热门文章

  1. Jenkins使用时,报No valid crumb was included in the request的解决方法
  2. Knowledge Graph Embedding: A Survey of Approaches and Applications【翻译】
  3. 宏基aspire拆机触摸_Acer宏碁(Acer宏碁)Acer S5-371-76GS超极本拆解图评测-ZOL中关村在线...
  4. [ML-03] Matplotlib-3
  5. 深圳赏给我的耳光:说到底,生活就是一场接着一场的较量
  6. 互联网支付系统整体架构
  7. 传奇开群服/公益服用什么服务器最好?
  8. COPC酞菁钴,cAS号:3317-67-7磺化酞菁钴 催化剂 深蓝色粉末 磺化酞菁钴
  9. 视频号怎么赚钱?视频号有什么功能?
  10. STM32学习笔记---OLED页寻址方式