clip-summary
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的效果差不多。
缺点
- 模型的训练结果没有特别强,与现在的一些更先进的模型效果有差距,仅仅与resnet50比肩;
- 对细分类,更加抽象的任务效果不好,比如说像纹理分类,计数这种任务的Zero-shot迁移效果一般;
- 在自然图像上效果不错,但是如果与自然图像差异较大的图像,比如MNIST这种简单但是手工标制造的分类效果仅仅88%,这是不符合直觉的情况;
- CLIP的训练是给定的类别中对比,这限制了他的灵活性;
- CLIP依然存在数据效率不高的情况,希望在数据读取不增多的情况下使得数据训练样本增多,比如数据增强,自监督,伪标签;
- 在Zero-shot中带入了偏见,因为是在验证集上直接微调的;
- 数据未清洗,有一定的隐藏偏见;
- 有反直觉现象:在迁移任务中,few-shot中会出现不如zero-shot的情况,具体来说就是在下游任务中对每个类别提供1-2张样本训练时的效果,还不如不提供任何样本直接预测的效果。
展望
- 根据上面的第4点,可以使用image caption来预测文本,增强模型灵活性;
- 可以将对比学习(计算相似度矩阵)的方式改进为与生成学习目标函数相结合的方式;
- 利用数据增强,自监督,伪标签提升数据的利用效率;
相关论文
现在CLIP论文在下游论文有大量的后续工作了,比如目标检测,分割,视频动作识别,检索,多模态,图像生成。
clip-summary相关推荐
- 有时候会跳过clip没有执行 somtimes Timeline Clip will be skipped
帧率过低,或增大了Time.timeScale,会导致一次Update之后,经过了较长的时间片,PlayableDirector的当前时间time跳过了某些Timeline Clip,因此不会执行Cl ...
- unity小技巧收集总结--自用(一)
目录 一.asset序列化: 二.打包AB包: 三.编辑器查找和进度显示: 四.代码设置AB包名: 五.代码清除Ab包名: 六.简易单例 七.移动端判断是否点在UGUI组件上 八.默认unity 脚本 ...
- Unity3D HoloLens2 中文文字转语音即语音合成(语音提示)功能
文字转语音 UNITY_WSA平台 处理过程和实现原理 中文需要设置声音 上代码 使用方法 一.部署好Unity3d HoloLens项目工程 二.新建节点 三.添加TTS组件并配置 四.调用TTS功 ...
- Unity动作表情工具(编辑器模式下一边播动作一边播表情)
一直忙于学习技术和工作好久没写博客 这次分享一下我写的一个动作表情工具 先说一下需求:美术把一帧帧表情图导出来,一张张排好序号,然后放到编辑器里面打开一个工具界面可以选动作,同时切换对应的表情,在编辑 ...
- OneAlive--游戏音效管理器
/* 游戏音效管理器* 功能:管理游戏中音效的播放和声音的调节* audioSourceBG是背景(2D)音乐,挂在相机上即可* gamesound是游戏音效(3D)挂在人物角色身上*/using S ...
- 小聊聊NGUI中Panel的Clip功能(之一)
NGUI中的Panel具有裁剪的功能,操作上便是设置一个Panel类型即可~ 原理上,该裁剪功能是基于Shader来实现的,简单列一下相关的着色器代码: v2f vert (appdata_t v) ...
- Clip Studio Paint 高级着色学习教程
剪辑工作室颜料着色专业指南! A Pro's Guide to Coloring With Clip Studio Paint! MP4 |视频:h264,1280×720 |音频:AAC,44.1 ...
- tensorflow在训练和验证时监视不同的summary的操作
如果想在训练和验证时监视不同的summary,将train summary ops和val summary ops放进不同的集合中即可. train_writer = tf.summary.FileW ...
- LeetCode 228: Summary Ranges
Given a sorted integer array without duplicates, return the summary of its ranges. For example, give ...
- 零样本风格迁移:多模态CLIP文本驱动图像生成
点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:GitHub ,新智元 [导读]零样本的风格迁移听说过没有?英 ...
最新文章
- 《React Native移动开发实战》一一3.4 完善商品列表——ListView组件
- ubuntu修改登陆用户名称_修改ubuntu的用户名(注意用户名和主机名的区别)
- OpenCV C++ 01 - Load Image from File and Display
- PyTorch | Tensor、Numpy、Variable之间的转换
- There are NAN in the matrix, however, you did not set missing=NAN
- linux nuttx 环境搭建,ubuntu14.04 nuttx开发环境的搭建
- SpringBoot 使用AOP功能
- 问答Goodfellow:没有样例能不能训练机器学习算法?
- indesign教程,如何转换图形和框架?
- Mac多功能文件搜索软件:HoudahSpot
- 应用程序平台应用之星:在线手机应用开发平台 不用搭建环境
- angular2 --使用DecimalPipe格式化数字
- Android做一个WiFi信号测试,Android开发——WiFi信号检测
- flask form表单
- clang diagnostic的简单介绍
- 华为锁屏后微信无法连接服务器,华为手机锁屏时无法接收微信消息怎么办?
- 【Asesprite】快速自制Tileset瓦片地图集(俯视角)
- 盘点2015年英特尔旧金山IDF峰会上的黑科技
- python微信小程序 java电子书阅读器系统uniapp
- Java8 默认垃圾回收器(GC)
热门文章
- Jenkins使用时,报No valid crumb was included in the request的解决方法
- Knowledge Graph Embedding: A Survey of Approaches and Applications【翻译】
- 宏基aspire拆机触摸_Acer宏碁(Acer宏碁)Acer S5-371-76GS超极本拆解图评测-ZOL中关村在线...
- [ML-03] Matplotlib-3
- 深圳赏给我的耳光:说到底,生活就是一场接着一场的较量
- 互联网支付系统整体架构
- 传奇开群服/公益服用什么服务器最好?
- COPC酞菁钴,cAS号:3317-67-7磺化酞菁钴 催化剂 深蓝色粉末 磺化酞菁钴
- 视频号怎么赚钱?视频号有什么功能?
- STM32学习笔记---OLED页寻址方式