首页 > 其他分享 >图像文本对比模型实践——CLIP——2021

图像文本对比模型实践——CLIP——2021

时间:2024-10-13 16:17:56浏览次数:8  
标签:编码器 CLIP 模型 学习 2021 图像 文本

图像文本对比模型实践——CLIP——2021

1.论文启发点详细内容(文+图)

clip 原理的极简版:

用图像编码器把图像编码成向量 a;
用文本编码器把文本编码成向量 b;
计算 a
·b,
如果 a 和 b 来自一对儿配对的图和文字,则让 a·b 向 1 靠近;
如果 a 和 b 来自不配对儿的图和文字,则让 a·b 向 0 靠近;
 

1.1CLIP的用途,优势

根源用途:
    把图片和文字编码到同一空间,计算图像和文本的语义相似度;
扩展用途:
    1)图文搜索(根据图像搜索对应文本、或根据文本搜索对应图像);
    2)协助完成相关的多模态任务(例如在 Stable Diffusion 里作为文本编码器);
    3)作为评测工具(例如文生图任务中,计算生成图像与文本之间的相似度)。

 

CLIP zero-shot 这种方式的好处在于:1)不用再标注了,数据规模很容易上去,输入输出不仅限于那N个类别,自由度大了很多。2)多模态比单模态更容易迁移,融合了文本信号后再做视觉任务潜力非常大更容易迁移。

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。
伪代码流程

# extract feature representations of each modality
I_f = image_encoder(I) #[n,d_il  可以是ResNet or Vision Transformer
T_f = text_encoder(T) #[n,d_t]  可以是 CBOW(Continuous Bag-Of-Words) or Text Transformer

# joint multimodal embedding [n, d_e]
I_e = L2_normalize(np.dot(I_f, W_i),axis=1)  # normal里面是投射,学习如何从单模态到多模态。
T_e = L2_normalize(np.dot(T_f, w_t),axis=1)  # 这里用了线性投射层
# 别的论文里说用非线性投射层比线性的要多10个点的性能提升,但这里非线性和线性差别不大。
# 作者猜测非线性投射层主要用来适配纯单模态学习。
# 也没用数据增强,只是随机裁剪了
# 对比学习中的temperature,以往任务中调一调会有很大提升,这里设计成了可学习的参数。
# temperature 是计算cos相似度公式里的一个参数

# 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(losits,iatels,axis=1)
loss = (loss_i + loss_t) / 2

 

1.3 微调的方法

 即冻住模型主体,加个分类头做训练,就算是Few-Shot了。

CLIP这里只选了1没选2,为啥呢?两个原因:

第一,作者本来就是想看看对比学习能学多好的,如果全局finetune了,本身性能不好都给微调好了,就比不出实际的对比学习的效果了;

第二,finetune 这种方式需要调的参非常多,根据每个数据集的大小不同,学习率步长都得去调,如果不finetune只linear probe就可以大大简化调参过程;

1.4CLIP的局限性

听说大家都很爱看论文工作的局限这部分,可以引发思考。CLIP这篇也是列出了一些工作的局限性:

1)文中对比的ResNet-50不是ImageNet最强的模型,最强的已经能做到90%了而CLIP只能做到76.2%。如果进一步提高数据和模型的规模,还会长点,但如果想做到90%估计得再加1000倍得数据量。

2)在细分类数据集上低于ResNet-50;图片异常方面的判断就不如ResNet-50,因为模型不知道什么叫异常。所以在很多很多很多领域里CLIP肯定跟瞎猜一样。

3)如果数据完全超出了训练集数据,也会表现很差,例如CLIP在MINST手写数字数据集上表现只有80%多。研究了一下发现训练集里真的没有类似这样的数据。

4)CLIP做分类依然需要用文本给出固定的类别,然后模型告诉你图片跟这些类别哪个最接近,类别数量依旧有限。理想状态是模型直接给出类别的文字标题。所以未来可能会把对比学习和生成学习的loss结合起来,既有对比学习的高效性又有生成学习的灵活性。

5)对数据的利用并不是很高效,如何高效呢?可能数据增强,也可以自监督或伪标签的方式。

6)实验过程中每次都在用所有数据集做测试,无形中已经用ImageNet作为验证集了。另外所用的27个数据集不一定具有代表性。如果有专门的数据集来测试Zero-Shot Transfor能力就好了。

7)数据都是网上爬的没有清洗,可能会学到有害的信息,隐藏着偏见。

8)zero-shot和小few-shot反而下降了,跟人的学习截然不同。怎么能让它zero-shot好,one-shot更好。

模型结构图

2.论文摘要

最先进的计算机视觉系统经过训练,可以预测一组固定的预定对象类别。这种受限制的监督形式限制了它们的通用性和可用性,因为需要额外的标记数据来指定任何其他视觉概念。直接从原始文本中学习有关图像是一种很有前途的替代方案,它利用了更广泛的监督来源。我们证明,预测哪个标题与哪个图像搭配的简单预训练任务是一种有效且可扩展的方法,可以在从互联网收集的 4 亿对(图像、文本)数据集上从头开始学习 SOTA 图像表示。预训练后,自然语言用于引用学习到的视觉概念(或描述新概念),从而实现模型到下游任务的零样本传输。我们通过对 30 多个不同的现有计算机视觉数据集进行基准测试来研究这种方法的性能,这些数据集涵盖 OCR、视频中的动作识别、地理定位和多种类型的细粒度对象分类等任务。该模型可以不平凡地转移到大多数任务中,并且通常与完全监督的基线竞争,而无需任何特定于数据集的训练。例如,我们在 ImageNet 零样本上匹配了原始 ResNet-50 的精度,而无需使用训练它的 128 万个训练样本中的任何一个。我们在此 https URL 上发布代码和预训练模型权重。

3.与启发点相关内容

知乎解读:

https://zhuanlan.zhihu.com/p/646790176?utm_id=0

CLIP开源模型github地址

https://github.com/mlfoundations/open_clip?tab=readme-ov-file

CLIP代码github地址

https://github.com/openai/CLIP

论文地址:

https://arxiv.org/abs/2103.00020

标签:编码器,CLIP,模型,学习,2021,图像,文本
From: https://blog.csdn.net/m0_51516317/article/details/142900061

相关文章

  • mysql+navicat+eclipse+jsp
    mysqlserver5.5安装微信公众号搜软件智库,然后找到mysql5.5百度网盘下载对应自己电脑版本的mysql百度网盘:http://pan.baidu.com/s/1jI5oB6A提取密码:7act解压解压密码:rjzkgzh(软件智库公众号)readygo解压后,双击开始安装点击next 点击我接受,然后next......
  • Qt开发技巧(十六):文本框的光标处理,数据库的int在视图中展示问题,工程文件中区分系统及硬
    继续讲一些Qt开发中的技巧操作:1.文本框的光标处理正常情况下我们在文本框中输入,光标会一直伴随着我们的输入指向最后,有点像链表的next指针,但有时候文本框中的内容过长,而我们想要主动设置下将光标移到最前面的时候,可以用下面方法。//下面三种方法都可以//1.样式表方式设......
  • 论文阅读4——RegionCLIP:基于区域的语言图像预训练
    论文原文地址:CVPR2022OpenAccessRepository开源代码:https://github.com/microsoft/RegionCLIP论文翻译摘要:使用图像-文本对的对比语言-图像预训练(CLIP)在zero-shot和迁移学习设置下的图像分类上都取得了令人印象深刻的结果。然而,我们表明,由于主要的领域转移,直接应用这......
  • Web前端开发入门学习笔记之CSS 39-40 --新手超级友好版- 文本颜色字体篇
       Foreword写在前面的话: 大家好,我是一名刚开始学习HTML的新手。这篇文章是我在学习html过程中的一些笔记和心得,希望能和同样在学习HTML的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能......
  • IDEA如何设置成Eclipse的快捷键
    前言对于Java开发人员来说,IDEA可以说是比较好的开发神器了,不过对于一些老程序员来说,可能一开始使用的是Eclipse,对于Eclipse的快捷键用得比较熟练,但对于IDEA的快捷键却不那么熟悉。其实,针对这个问题,IDEA已经有相关的设置可以进行修改。那么,我们呢怎么操作呢?如何设置首先,我......
  • 2021年华为杯数学建模竞赛C题论文和代码
    基于神经元Hodgkin-Huxley模型的脑深部电刺激治疗帕金森病的建模研究帕金森病作为一种全球常见的精神退行性疾病,日趋成为中老年人正常生活的一大威胁。目前缓解帕金森病症状的治疗方法主要有三种:药物治疗、手术治疗和脑深度刺激。脑深度刺激作为一种副作用小、安全性高的新方......
  • 2021年华为杯数学建模竞赛D题论文和代码
    抗乳腺癌候选药物的优化建模在研发治疗乳腺癌药物的过程中,能拮抗ERα活性的化合物是治疗乳腺癌的重要候选药物,同时也要考虑到化合物在人体内具备良好的药代动力学性质和安全性(ADMET性质),如果吸收性能、代谢速度、毒副作用等性质不佳,依然很难成为药物。本文对给定的1974个化......
  • 2006-2023年上市公司社会责任报告、ESG报告文本(TXT)
    2006-2023年上市公司社会责任报告、ESG报告文本(TXT)1、时间:2006-2023年2、范围:A股上市公司3、样本量:14279份4、说明:上市公司社会责任报告是企业对外公布的一份关于其社会责任实践和成果的详细文件,涵盖环境保护、社会贡献和公司治理等方面的表现。通常包含公司在减少环境影响......
  • 行人重识别——基于文本描述的行人检索与查找查询对象
    介绍人的重新识别,即搜索人的图像,在许多方面都有需求,如从安全摄像机中寻找嫌疑人或丢失的儿童。其中,基于文本的人的重新识别,即不搜索显示与输入图像相同的人的图像,而是从文本中搜索显示与之匹配的人的图像,已经引起了很多人的注意。在基于文本的人的再识别任务中,主要的方法......
  • InternVid:用于多模态视频理解与生成的大规模视频-文本数据集 | ICLR Spotlight
    InternVid 是一个开源的大规模视频-文本数据集,旨在促进视频理解和生成任务的发展,由上海人工智能实验室与南京大学、中国科学院等单位联合发布,相关的工作已经被ICLR2024接收。它包含超过700万个视频,总时长近76万小时,并附带详细的文本描述。InternVid的发布将推动文本-视频......