图像文本对比模型实践——CLIP——2021
1.论文启发点详细内容(文+图)
clip 原理的极简版:
用图像编码器把图像编码成向量 a;
用文本编码器把文本编码成向量 b;
计算 a·b,
如果 a 和 b 来自一对儿配对的图和文字,则让 a·b 向 1 靠近;
如果 a 和 b 来自不配对儿的图和文字,则让 a·b 向 0 靠近;
1.1CLIP的用途,优势
1.2CLIP的工作流
开始OpenAI想做成“输入图片,直接生成文本”这种形式。但是苦于这种方式的训练成本实在太大了,收敛速度也非常非常慢,下面这张图说明了这一点:如果直接用图像预测自然语言的话(蓝色线,生成学习),模型训练的巨慢,对比学习的方式(绿线)就快多了。这里橙色线的意思是给定一个词袋让模型从词袋里选一个作为预测输出(有标签学习),它的自由度介于直接生成文字和对比学习之间。
所以就退而求其次,选择了对比学习的方法,也就是本篇CLIP文章所讲的方法。CLIP结构图如下:
图 1:我们的方法总结。标准图像模型联合训练图像特征提取器和线性分类器来预测某些标签,而 CLIP 联合训练图像编码器和文本编码器来预测一批(图像、文本)训练样本的正确配对。在测试时,学习的文本编码器通过嵌入目标数据集类的名称或描述来合成零样本线性分类器。
预训练:预训练方法也不难理解,模型由两个编码器组成,如上图左半部分,左上紫色的梯形是文本编码器,左下绿色的梯形是图像编码器。作者收集了大量匹配的图像和文本对,然后分别走各自的编码器得到各自的特征,再计算特征两两之间的cos相似度,让配对的特征相似度越近越好,不配对的相似度越远越好。这样就可以完成了CLIP的预训练。
图像分类任务:如上图右半部人,给一堆类别名,把类别名填到“A photo of a {object}.”里面然后编码。然后图像也做编码,编码完成后拿图像特征跟文本特征比cos相似度,跟哪个特征距离最近,我们就认为模型把这张图分到了哪个类别里,so easy~~~
再说一下数据:收集了400 million 的数据文本对,跟webText差不多,称为WIT,即WebImageText。
然后是两个编码器模型:作者尝试了ResNet、EfficientNet、Transformer、最大用了ViT。最小与最大模型参数量为1:100。
伪代码流程
1.3 微调的方法
即冻住模型主体,加个分类头做训练,就算是Few-Shot了。
第一,作者本来就是想看看对比学习能学多好的,如果全局finetune了,本身性能不好都给微调好了,就比不出实际的对比学习的效果了;
第二,finetune 这种方式需要调的参非常多,根据每个数据集的大小不同,学习率步长都得去调,如果不finetune只linear probe就可以大大简化调参过程;
1.4CLIP的局限性
听说大家都很爱看论文工作的局限这部分,可以引发思考。CLIP这篇也是列出了一些工作的局限性:
2)在细分类数据集上低于ResNet-50;图片异常方面的判断就不如ResNet-50,因为模型不知道什么叫异常。所以在很多很多很多领域里CLIP肯定跟瞎猜一样。
3)如果数据完全超出了训练集数据,也会表现很差,例如CLIP在MINST手写数字数据集上表现只有80%多。研究了一下发现训练集里真的没有类似这样的数据。
5)对数据的利用并不是很高效,如何高效呢?可能数据增强,也可以自监督或伪标签的方式。
6)实验过程中每次都在用所有数据集做测试,无形中已经用ImageNet作为验证集了。另外所用的27个数据集不一定具有代表性。如果有专门的数据集来测试Zero-Shot Transfor能力就好了。
7)数据都是网上爬的没有清洗,可能会学到有害的信息,隐藏着偏见。
8)zero-shot和小few-shot反而下降了,跟人的学习截然不同。怎么能让它zero-shot好,one-shot更好。
模型结构图
2.论文摘要
3.与启发点相关内容
https://zhuanlan.zhihu.com/p/646790176?utm_id=0
https://github.com/mlfoundations/open_clip?tab=readme-ov-file
https://github.com/openai/CLIP
https://arxiv.org/abs/2103.00020
标签:编码器,CLIP,模型,学习,2021,图像,文本 From: https://blog.csdn.net/m0_51516317/article/details/142900061