视觉语言大模型模型介绍-CLIP学习

news2024/9/20 1:01:36

多模态学习领域通过结合图像和文本信息,为各种视觉语言任务提供了强大的支持。图像和文本的结合在人工智能领域具有重要的意义,它使得机器能够更全面地理解人类的交流方式。通过这种结合,模型能够处理包括图像描述、视觉问答、特征提取和图像-文本匹配在内的多种任务。这些任务不仅推动了计算机视觉和自然语言处理的边界,也为实际应用如自动内容标注、增强现实和智能助手提供了技术基础。随着技术的进步,这些多模态模型正变得越来越精准和高效,极大地丰富了人机交互的体验。

一、首先介绍一下几个任务吧

Image Captioning、VQA、Feature Extraction 、 Image-Text Matchin

这里用的是BLIP的demo

1、Image Captioning

图像描述目标是让计算机自动为图像生成描述性的文本。这个任务不仅需要识别图像中的显著对象,理解它们之间的相互作用,还需要用自然语言来表达这些信息。

例子:上传一张图片,模型需要识别图片中的主体、场景以及动作等,然后将这些信息整合成一句自然语言描述。

2、VQA (Visual Question Answering)

视觉问答,它要求模型能够理解图像内容并回答有关图像的问题。VQA任务的挑战在于需要模型具备理解视觉场景和语言问题的能力,并能够将两者结合起来生成准确答案。

例子:

3、Feature Extraction

特征提取涉及从原始数据中提取出有用的特征,以便用于后续的数据分析或模型训练。在深度学习中,特征提取通常指的是从经过训练的模型中获取学习到的表示,这些表示可以捕捉到数据的关键属性。

例子: 如验证两张图片是否包含相同的物体,或者根据提示在图像检索系统中寻找目标图片。

4、Image-Text Matching

图像-文本匹配要求模型能够衡量图像和文本之间的语义相似度。

例子: 模型需要理解图片的视觉内容和文本的语义信息,并判断它们是否语义一致。

二、发展

1、 最经典的就是2021年的CLLP,用了大规模的数据集,用4亿文本对使 zero-shot 性能得到里程碑式的提升,

2、 2022年的BL1P, 之前的CLIP是一个图像理解模型,不能对图像进行一个文本描述生成,它是一个集图像生成和文本描述为一体的模型,并且,它考虑到从网络上采集(爬取)的数据存在大量噪声,(这个噪声指图片对应的标签、文本 错误、不匹配),BLIP模型采用了一种称为CapFilt ( Captioning and Filtering) 的方法来去除噪声数据。这种方法包含两个主要步骤:

Captioner:基于图像的文本解码器,用于生成图像的文本描述。通过这个步骤, 模型可以为图像创建额外的文本描述, 从而增加训练数据。

Filter(过滤器):它的作用是评估生成的字幕与图像的匹配度, 并过滤掉与图像不匹配的噪声文本。这样可以从原始网络文本和合成文本中删除嘈杂的字幕, 留下更准确的数据。

3、BLIP-2的一个显著特点是它使用了预先训练好的图像和文字处理模型, 并且在训练过程中保持这些模型不变。通过一个叫做Q- Former的轻量级组件, 将图像信息和文字信息连接起来。它有两个主要的训练阶段:第一阶段让视觉-语言表示学习, 通过对比学习的方式, 学习对齐图像表示和文本表示;第二阶段, 将Q- Former的输出连接到冻结的LLM中, 以获取LLM的生成语言能力, 实现图像到文本的生成。

4、 LLaVA(Large Language and Vision Assistant)LLaVA模型使用视觉编码器CLIP ViT-L/14和语言解码器LLaMA构成多模态大模型,然后使用生成的数据进行指令微调。LLaVA模型的特点是它能够处理多模态指令,即同时包含视觉和语言元素的指令。它通过端到端训练的方式,使得模型能够根据视觉输入和文本指令来生成相应的文本输出。

5、MobileVLM: A Fast, Strong and Open Vision Language Assistant for Mobile Devices,一种针对移动设备运行的多模态视觉语言模型(MMVLM)。它是多种移动导向架构设计和技术的融合,包括一组规模为1.4B和2.7B参数的从零开始训练的语言模型,一个预先在CLIP风格上进行多模态视觉模型训练的模型,通过一个高效的投影器进行跨模态交互。在几个典型的VLM基准测试上评估MobileVLM。MobileVLM与一些更大模型相比具有相同的表现。更重要的是,在高通骁龙888 CPU和英伟达Jetson Orin GPU上测量推理速度,分别获得21.5个 Token 和65.3个 Token 每秒的state-of-the-art性能。

三、CLIP模型

CLIP: Contrastive Language–Image Pre-training

[ Learning Transferable Visual Models From Natural Language Supervision]

1、迁移学习与零样本学习

  • 迁移学习在计算机实际中广泛使用,在使用大规模数据集预训练后,针对特定任务仍然需要收集样本对模型进行微调,迁移学习可以加快学习速度,并提高模型的性能。

  • 零样本学习(Zero-Shot Learning)希望模型在没有直接针对特定类别的训练数据的情况下识别和分类对象。例如,尽管模型之前没有直接学习过关于“斑马”的数据,但它可以通过关联“条纹”、“黑马”和“白底”等描述性特征来识别斑马。这种方法依赖于将每个类别与一系列描述性属性相关联,使得模型能够通过属性匹配而非直接的图像样本来识别新对象。

    之前的工作受限于模型的发展和数据的规模没有取得很好的效果,而CLIP采用了先进的Transfomer结构,并且从互联网爬取了包含4亿图像-文本对的数据集WIT。

CLIP在使用时,标签其实是可以改的,不仅是ImageNet的1000个类,你可以换成任何单词,图片也可以是任何图片,然后你依旧可以通过计算相似度的方式判断出这张图片里到底有哪些物体,并且泛化性还特别好。

这个性质才是CLIP的强大之处,也是CLIP模型最吸引人的地方,因为它彻底摆脱了固定类别标签的限制,无论是在训练还是在推理时,都不需要提前定义好的标签列表,任意给一张照片,都可以通过给模型提供不同的文本句子来知道这张图片里到底有没有感兴趣的物体。CLIP不仅能识别新物体,由于它将视觉语义和文字语义联系在一起,学到的特征语义性非常强,迁移效果也非常好。

2、对比学习

在CLIP模型的训练过程中,每个批次包含n个图像-文本对,这意味着有n张图片和n个相应的句子。通过图像编码器和文本编码器,我们得到n个图像特征和n个文本特征。CLIP利用这些特征进行对比学习,这是一种灵活的方法,只需要定义好正样本和负样本。在这个场景中,配对的图像和文本对是正样本,因为它们描述的是相同的内容,这些正样本位于特征矩阵的对角线上。而矩阵中所有非对角线上的元素则被视为负样本,因为它们代表不匹配的图像-文本对。这样,我们有n个正样本和n^2 - n个负样本。一旦定义了正负样本,模型就可以通过对比学习进行训练,无需任何手动标注,CLIP通过这种方式学习图像和文本之间的对齐关系。

具体的操作流程其实也不复杂,

  1. 在图像编码和文本编码后,使用L2范数进行特征归一化,将向量的模长缩放到相同的大小

  2. 计算相似度使用矩阵乘法(@ 操作符)计算归一化后的图像特征向量和文本特征向量之间的点积,得到相似度分数。

  3. 损失计算:预测的相似度分布与目标相似度分布之间的交叉熵损失。

3、实验结果

在27个数据集上将CLIP零样本性能与预训练+微调的有监督resnet对比。绿色是CLIP比Resnet50效果好的,在差的中比如DTD这是一个纹理分类的数据集,clever是一个计数的数据集,

为什么CLIP在DTD这些数据集上效果差?

这些任务可能更需要模型对图像的细节和上下文信息。但CLIP可能没有专门针对这些复杂任务进行优化。

传统的CNN通常在图像的浅层特征上表现较好,但对于一些需要深层次语义理解的任务,它们可能无法有效地抽象出足够的特征。例如,纹理分类可能需要模型能够捕捉到图像的细微纹理差异,而物体计数则需要理解图像中的物体间关系和数量。后面就是通过深度网络和更强的特征提取、 注意力机制、 多尺度处理、 细粒度特征提取等

4、CLIP中ResNet50做Image Encoder时容易被忽略的细节

CLIP-ResNet50模型有一个型号采用了ResNet50作为其图像编码器, ResNet50的结构相对较小(几十M),但整体CLIP模型的参数量仍然很大,为什么?

CLIP的训练目标是将图像和文本映射到同一个潜在空间中,以实现跨模态对比学习。模型需要一个高维的联合嵌入空间,来表示图像和文本的语义相关性,多模态--文本编码器(Transformer)GPT2-1.5B,对比学习目标,这两部分参数非常大。

ResNet50的扩展

虽然CLIP使用的是ResNet50,但OpenAI对这个ResNet结构做了适当的调整,以适应与文本编码器的联合训练。CLIP中的ResNet50通常经过预处理和调整。

首先想要进行 CLIP 这样的对比学习,进行特征比较的过程需要的向量,仅仅是特征向量长度而不是序列,所以没有序列维度,而ResNet这样的网络去掉池化和全连接出来的特征如果输入的是标准大小的图片的话是一个(7*7)的特征向量。所以这个向量含有位置信息,而不能对齐局部信息。

最主要的是:最后的 池化层 采用了QKV 注意力机制,而不是平均池化。

原来的ResNet(avgpool): AdaptiveAvgPool2d(output_size=(1, 1)) (fc): Linear(in_features=2048, out_features=1000, bias=True)
CLIP中的  ModifiedResNet(attnpool): AttentionPool2d(    (k_proj): Linear(in_features=2048, out_features=2048, bias=True)    (q_proj): Linear(in_features=2048, out_features=2048, bias=True)    (v_proj): Linear(in_features=2048, out_features=2048, bias=True)    (c_proj): Linear(in_features=2048, out_features=512, bias=True)  ))

AttentionPool2d 结构分析

import torchclass AttentionPool2d(nn.Module):    def __init__(self, spacial_dim: int, embed_dim: int, num_heads: int, output_dim: int = None):        super().__init__()        self.positional_embedding = nn.Parameter(torch.randn(spacial_dim ** 2 + 1, embed_dim) / embed_dim ** 0.5)#(位置嵌入)        '''引入了一个位置嵌入,用于帮助模型捕捉空间信息。在常规的卷积网络中,池化操作是通过均匀降采样来实现的,而这里引入了一个注意力池化层,通过注意力机制选择更加有信息量的特征。'''        self.k_proj = nn.Linear(embed_dim, embed_dim)        self.q_proj = nn.Linear(embed_dim, embed_dim)        self.v_proj = nn.Linear(embed_dim, embed_dim)        self.c_proj = nn.Linear(embed_dim, output_dim or embed_dim)        self.num_heads = num_heads    def forward(self, x):        x = x.flatten(start_dim=2).permute(2, 0, 1)  # NCHW -> (HW)NC        x = torch.cat([x.mean(dim=0, keepdim=True), x], dim=0)  # (HW+1)NC        x = x + self.positional_embedding[:, None, :].to(x.dtype)  # (HW+1)NC        x, attn_weights = F.multi_head_attention_forward(            query=x[:1], key=x, value=x,  # 这里是池化的原因,只对全局进行了注意力的查询            embed_dim_to_check=x.shape[-1],            num_heads=self.num_heads,            q_proj_weight=self.q_proj.weight,            k_proj_weight=self.k_proj.weight,            v_proj_weight=self.v_proj.weight,            in_proj_weight=None,            in_proj_bias=torch.cat([self.q_proj.bias, self.k_proj.bias, self.v_proj.bias]),            bias_k=None,            bias_v=None,            add_zero_attn=False,            dropout_p=0,            out_proj_weight=self.c_proj.weight,            out_proj_bias=self.c_proj.bias,            use_separate_proj_weight=True,            training=self.training,            need_weights=True        )        self.attn_weights = attn_weights        return x.squeeze(0)

CLIP模型的最大贡献在于它打破了传统的固定类别标签的范式,使得在收集数据集和训练模型时不再受限于预定义的类别数量,如ImageNet的1000类或COCO的80类。CLIP通过无监督学习,利用图像和文本的配对,可以预测它们的相似性或生成相关内容,从而在推理时更加灵活,甚至能够进行零样本分类任务。这种创新使得CLIP在物体检测、分割、视频动作识别、检索、多模态学习和图像生成等多个领域都有广泛的应用,展现了其巨大的影响力。从创新度、有效性和问题大小三个维度来看,CLIP都达到了极高的标准,其灵活性和高效性让我们看到了人工智能发展的新希望。

四、大模型的参数为什么大?

大模型使用了大规模的数据集进行训练,参数量肯定是会增加的,这可以显著提升模型的学习能力和性能。例如,GPT-3模型拥有1750亿个参数,而Meta开源的Llama模型参数量在80亿到700亿之间。 

但是大模型的参数体现在哪?

​其实这与传统的卷积神经网络类似,主要是加大模型的宽度和深度。

1. 模型规模(层数和宽度)

•最初的Transformer:原始的Transformer由6层编码器和6层解码器组成。每层的维度为512,前馈网络的隐藏层维度为2048。

•现代大模型:这些模型的层数大幅增加(GPT-3  96层),并且每层的维度也扩大了(GPT-3的隐藏层维度为12288,)。

2. 自注意力机制(Self-Attention)

•*最初的Transformer:自注意力的参数量为3 * d_model* d_head,即512 * 64 * 3,这对每一层来说相对较小。

•现代大模型:GPT-3有96个注意力头,每个头的维度为128。3×128^2×96

参考

  1. lLearning Transferable Visual Models From Natural Language Supervision. OpenAI 2021.

  2. lBLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation. Arxiv 2022.

  3. lAlign before Fuse: Vision and Language Representation Learning with Momentum Distillation. NIPS 2021

  4. lBLIP-2: Bootstrapping Language-Image Pre-training with Frozen Image Encoders and Large Language Models. ICML 2023.

  5. lVisual Instruction Tuning. NIPS 2023.

  6. lImproved Baselines with Visual Instruction Tuning. Arxiv 2023.

  7. [多模态大模型之clip,blip,blip–2,llava]

    https://www.bilibili.com/video/BV1vr421b7dP/?share_source=copy_web&vd_source=e7551656b52210b8f1bf3f198cce4fc4

  8. CLIP 论文逐段精读【论文精读】

    https://www.bilibili.com/video/BV1SL4y1s7LQ/?share_source=copy_web&vd_source=e7551656b52210b8f1bf3f198cce4fc4

  • 关注公众机器视觉与人工智能实验室

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maya动画基础

Maya动画基础教程(完整)_哔哩哔哩_bilibili 第一集 动画基础设置 altv播放动画 选择撕下副本 右键---播放预览 第二集 k帧记录物体的空间信息 初始位置清零 删除历史记录 s键key帧 自动记录位置信息 删除帧,按住右键选择delete 按shif…

Apache subversion 编译流程

目录 1. 概述2. 依赖库简介2.1 Expat2.2 Apache apr2.3 Apache apr-iconv2.4 Apache apr-util2.5 Zlib2.6 OpenSSL2.7 Sqlite2.8 Apache Serf2.9 Apache subversion3. 编译3.1 Expat编译3.1.1 源码信息3.1.2 CMake-GUI3.1.3 编译步骤3.2 APR编译3.2.1 源码信息3.2.2 编译步骤3.…

详解c++菱形继承和多态---下

菱形继承 #include<iostream>using namespace std; class Animal { public:int m_Age; }; class Sheep : public Animal {}; class Tuo : public Animal {}; class SheepTuo : public Sheep, public Tuo {}; void test() {SheepTuo st;st.Sheep::m_Age 18;st.Tuo::m_Age…

数据结构-3.1.栈的基本概念

一.栈的定义&#xff1a; 栈和线性表的区别&#xff1a;栈只能在表尾一端进行插入或者删除的操作&#xff0c;而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语&#xff1a; 三.栈的基本操作&#xff1a; 1.回顾线性表的基本操作&#xff1a; 2.栈的基本操作&…

vue使用vue-i18n实现国际化

我使用的是vue2.6版本&#xff0c;具体使用其他版本可以进行修改 一、安装 npm install vue-i18n -D 二、配置 1、文件配置 ①在src下创建 i18n 目录 ②在 i18n 目录下创建 langs 文件夹 和 index.js文件&#xff0c;具体如下 2、index.js代码如下&#xff0c;这里使用了…

【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作

因为最近在带多个新人,让其设计原理图和PCB总会发现各种电路问题点。比如TVS管接法问题。 TVS是一种限压型的过压保护器,它将过高的电压钳制至一个安全范围,藉以保护后面的电路,有着比其它保护元件更快的反应时间,这使TVS可用在防护lighting、switching、ESD等快速破坏性瞬…

计算机毕业设计 教师科研信息管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

1.复制函数--------------strcpy函数 函数使用 char*strcpy&#xff08;char* destination, const char* source&#xff09; strcpy函数用于拷贝字符串&#xff0c;即将一个字符串中的内容拷贝到另一个字符串中&#xff08;会覆盖原字符串内容&#xff09;。它的参数是两个指…

TIOBE 编程指数 9 月排行榜公布 VB.Net第七

原文地址&#xff1a;百度安全验证 IT之家 9 月 8 日消息&#xff0c;TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标&#xff0c;评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎&#xff0c;今天 TIOBE 官网公布了 2024 年 9 月的编程语言排行榜&#xf…

Element走马灯组件循环播放两个页面是方向不一致

摘要&#xff1a;使用Carousel 走马灯循环播放同一类型的图片、文字等内容&#xff0c;会在循环内容为两组是出现下图 [1]中的现象。本文记录下如何解决 之前项目遇到过一次这个问题&#xff0c;由于indicator-position 指示器不用显示&#xff0c;则判断内容长度为2时&#xf…

恶意Bot流量识别分析实践

1、摘要 随着互联网的发展&#xff0c;自动化工具和脚本&#xff08;Bots&#xff09;的使用越来越普遍。虽然一些善意 Bots 对于网站的正常运行和数据采集至关重要&#xff0c;但恶意 Bots 可能会对网站带来负面影响&#xff0c;如爬取敏感信息、恶意注册、刷流量等。因此&am…

saltstack配置管理

一、saltstack的SSH工作模式 一、salt-ssh介绍 salt-ssh 是 0.17.0 新引入的一个功能&#xff0c;不需要minion对客户端进行管理&#xff0c;也不需要master。salt-ssh 支持salt大部分的功能&#xff1a;如 grains、modules、state 等salt-ssh 没有使用ZeroMQ的通信架构&#…

向日葵好用吗?4款稳定的远程控制软件推荐。

远程控制技术现在已经被应用于很多个领域&#xff0c;像企业办公&#xff0c;远程协助&#xff0c;智能家居&#xff0c;工业控制等等。我们常常会用到的时前两种。而实现远程控制的方式也有多种&#xff0c;但是最方便高效的还是使用第三方软件。我最常使用的是向日葵&#xf…

算法.图论-并查集上

文章目录 1. 并查集介绍2. 并查集的实现2.1 实现逻辑2.2 isSameSet方法2.3 union方法(小挂大优化)2.4 find方法(路径压缩优化) 3. 并查集模板 1. 并查集介绍 定义&#xff1a; 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题&#xff08;即所…

游戏如何对抗定制挂

近年来&#xff0c;游戏安全对抗强度相比以往更加激烈&#xff0c;具体表现在“定制挂”趋势显著。在近期收集的近万款外挂样本中&#xff0c;定制挂约占比78%&#xff0c;常见的内存修改器、变速器等通用作弊手段占比正在下降。 所谓定制挂&#xff0c;是指针对某款游戏单独开…

SPI接口通信协议浅谈成都自动化开发

沙鸥-成都 1 什么是SPI SPI是串口外设接口的缩写&#xff0c;是一种高速的、全双工、同步的通信协议&#xff0c;是微处理器与外围IC之间常用的一种通讯方式。 SPI是主从式的通信协议&#xff0c;可以一主机一从机通信&#xff0c;也可以一主机多从机通信。 2 SPI的优缺点 SPI接…

【Java版】云HIS系统源码

云HIS系统介绍 云HIS系统是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务&#xff0c;提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能&#xff0c;还能与公卫、PACS等各类…

【STM32 HAL库】OLED显示模块

【STM32 HAL库】OLED显示模块 前言理论OLED基本参数OLED基本驱动原理OLED坐标轴 应用CubeMx配置底层函数代码高层封装函数printf显示函数 前言 本文为笔者学习 OLED 的总结&#xff0c;基于keysking的视频内容&#xff0c;如有错误&#xff0c;欢迎指正 理论 OLED基本参数 …

基于224G的超高速以太网端口1.6Tbps 1600G真的来了~

基于224G PAM4 SerDes的1.6T(更激进些的是3.2T&#xff09; 受AI智能算中心的驱动&#xff0c;基于4x112G的400G光模块&#xff0c;和基于8x112G的800G的光模块已经很成熟了&#xff0c;标志就是大家都在降本增效&#xff0c;考虑干掉功耗的DSP&#xff0c;...另外一个标志就是…

关于支持向量机的一份介绍

在这篇文章中&#xff0c;我将介绍与支持向量机有关的东西&#xff0c;我们知道支持向量机主要分两类&#xff0c;就是线性支持向量机和核支持向量机这两种&#xff08;当然还有其他的&#xff0c;如多类支持向量机、 Nu-Support Vector Regression等&#xff09;&#xff0c;因…