当前位置: 首页 > article >正文

大模型学习笔记------BLIP模型详解与思考

大模型学习笔记------BLIP模型解读与思考

    • 1、BLIP与CLIP的主要不同之处
    • 2、BLIP的创新之处
    • 3、BLIP模型结构
    • 4、BLIP 高效率利用噪声网络数据的方法:CapFilt
    • 5、BLIP的思考

     CLIP(Contrastive Language-Image Pretraining)和 BLIP(Bootstrapping Language-Image Pretraining)都是将视觉和语言信息结合的模型。但它们侧重的任务和方法有所不同。BLIP的出现可以看作是对CLIP的一种扩展和改进。

1、BLIP与CLIP的主要不同之处

    在上两篇文章中讲到了CLIP模型的主要应用与一些思考,本文的BLIP模型对CLIP模型的一个增强版本,能够更好地处理复杂的视觉和语言结合的任务,推动了多模态学习的发展。我认为比较重要的不同主要体现在如下两个方面:

  • 任务多样性:CLIP主要用于图像和文本的对齐问题,比如分类或是图文搜索;而BLIP除了完成以上任务,还旨在解决包括图像生成、视觉问答和图像描述等更复杂的任务,它通过引入更丰富的训练任务来提升性能。
  • 训练方式:CLIP采用“对比学习”的方式学习图像与文本的相似度。BLIP采用了“引导学习”的方式,通过自监督的方式来增强模型对语言和视觉信息的理解,这种方式使得模型能够更好地捕捉图像和文本之间的关系。

    在论文中,作者提出了视觉语言训练 (Vision-Language Pre-training, VLP) 现有方法的主要限制:

  • 模型层面:大多数现有的预训练模型仅在基于理解的任务或者基于生成的任务方面表现出色,很少有可以兼顾的模型。比如,基于编码器的模型,像 CLIP,ALBEF 不能直接转移到文本生成任务 (比如图像字幕),而基于编码器-解码器的模型,像 SimVLM 不能直接用于图像文本检索任务。
  • 数据层面:大多数现有的预训练模型为了提高性能,使用从网络收集的嘈杂图像-文本对扩展数据集。这样虽然提高了性能,但是很明显这个带噪声的监督信号肯定不是最优的。

2、BLIP的创新之处

     BLIP用于统一的视觉语言理解和生成。BLIP 是一种新的 VLP 框架,与现有的方法相比,它可以实现更广泛的下游任务。它分别从模型和数据的角度引入了两个贡献:

  • BLIP 提出了一种编码器-解码器混合架构 (Multimodal mixture of Encoder-Decoder, MED),MED 的特点是很灵活,它既可以作为单模态的编码器,又可以作为基于图像的文本编码器,或者基于图像的文本解码器。BLIP 由三个视觉语言目标联合训练:图像文本的对比学习、图像文本匹配和图像条件语言建模。
  • BLIP 提出了一种高效率利用噪声网络数据的方法。即先使用嘈杂数据训练一遍 BLIP,再使用 BLIP 的生成功能生成一系列通过预训练的 Captioner 生成一系列的字幕,再把这些生成的字幕通过预训练的 Filter 过滤一遍,从原始网络文本和合成文本中删除嘈杂的字幕,得到干净的数据。最后再使用干净的数据训练一遍 BLIP。

3、BLIP模型结构

    BLIP引入了编码器-解码器的多模态混合结构MED( Multimodal mixture of Encoder-Decoder),能够有效地进行多任务预学习和迁移学习。MED包括两个单模态编码器(lmage Encoder,Text Encoder),一个以图像为基础的编码器(image-grounded text encoder)和一个以图像为基础的解码器(image-grounded text decoder)。具体结果如下图所示:
在这里插入图片描述

    其中,在Loss的计算方面主要分为如下三个:

  • 图像-文本对比损失 ITC(Image-Text Contrastive Loss):针对图像编码器和文本编码器,通过正负图文对的对比学习,来对齐图像和文本的潜在特征空间。方法是使得正样本图文对的相似性更大,负样本图文对的相似性更低。这跟CLIP结构非常相似,甚至可以认为就是CLIP结构。
  • 图像-文本匹配损失 ITM(Image-Text Matching Loss):针对以图像为基础的文本编码器,通过对图文匹配性进行二分类,目标是学习图像文本的联合表征,以捕获视觉和语言之间的细粒度对齐。
  • 语言建模损失 LM(Language Modeling Loss ):针对以图像为基础的文本解码器,通过交叉熵损失进行优化,训练模型以自回归的方式将图像生成文本描述,主要用于生成任务。

4、BLIP 高效率利用噪声网络数据的方法:CapFilt

    在第一部分中介绍BLIP提出了一种高效率利用噪声网络数据的方法,具体如何实现的呢?论文中提出了CapFilt(Captioning and Filtering)的方法。下图为训练方法示意图。
在这里插入图片描述
    CapFilt主要是分为两部分,分别是captioner和Filter。具体如下:

  • Captioner就是image-grounded text decoder,即网络结构中的视觉-文本解码器。它在人工标注数据集上以LM为目标进行微调,对给定的网络图像进行文本解码,Captioner生成合成caption 。
  • Filter是image-grounded text encoder,即网络结构中的视觉-文本编码器。它根据ITC和ITM的目标进行微调,以学习文本是否与图像匹配,去除原始网络文本和合成文本中的噪音文本。

    Bootstrap过程就是将Filter过滤后的网络图文,再加上人工标注的图文对结合起来,形成一个新的数据集,重新预训练一个新模型。

5、BLIP的思考

    5.1 已经有了视觉-文本编码器,为什么还需要一个文本编码器?

    BLIP的网络结果图中,视觉-文本编码器包含了文本编码器的部分,同时加入了图像与文本的Cross Attention。理论上,视觉-文本编译器的性能肯定会由于文本编码器,那为什么还会存在一个文本编译器呢?我认为原因有以下几个:

  • 寻求网络的互补性:视觉-文本编码器能够更好地提取语义信息,但是在捕捉语言的深层语义和上下文关系上有欠缺,因此结合使用可以发挥各自的优势,提升整体性能。
  • 任务复杂性的递归关系:BLIP模型的任务难度从左往右的是逐步增强的,即文本编码器->视觉-文本编码器->视觉-文本解码器。从简单的文本分类任务逐步向图文生成任务过度。而网路结构中相同颜色的模块是参数共享的,文本编码器与视觉-文本编码器的训练将加快Feed Forward和Bi Self-Att两个模块的训练速度与效果,进而增强Cross Attention部分的训练。视觉-文本编码器与视觉-文本解码器的训练也因为Feed Forward和Cross Attention模块训练的效果进而提升Casual-Attention模块的训练效果。这也许就是“引导学习”的精髓。

    5.2 BLIP引入了 bootstrapping 技术以提高模型性能,但是这个技术真的没有风险吗?

    我认为技术风险或是弊端是比较明显的,而主要风险恰恰来自于网络数据本身。具体如下:

  • 过拟合风险:在训练特定任务时,大量引入相关的网络数据可能造成训练数据的过拟合,尤其是在样本不够多样化时。过拟合会使模型在新的、未见过的数据上表现不佳。
  • 数据偏移或是偏见:网络数据中一旦存在某种偏见,BLIP 可能会继承并放大这些偏见,造成任务的损失,甚至引发伦理和公平性问题。
  • 计算资源需求:BLIP 及其 bootstrapping 方法往需要大量的计算资源进行训练和推理。这可能导致在资源受限的环境中部署时存在困难。

    5.2BLIP有哪些应用?

  • 视觉问答(Visual Question Answering, VQA):BLIP 能理解图像内容并回答与之相关的问题。用户可以向模型提出关于图像的具体问题,模型通过结合视觉和文本信息给出准确的回答。
  • 图像描述生成(Image Caption):BLIP 可以根据输入的图像生成自然语言描述。
  • 图文检索(Image-text retrieval):通过文本查询来检索与之相匹配的像,或者通过图像查询相应的文本信息。BLIP 在图像与文本之间的关系建模上表现出,因此适合用于多模态内容检索。

http://www.kler.cn/a/391517.html

相关文章:

  • 图片画廊 day2 (可复制源码)
  • DNS面临的4大类共计11小类安全风险及防御措施
  • MySql结合element-plus pagination的分页查询
  • 冗余连接2 hard题 代随C#写法
  • 在 Ubuntu 上安装 `.deb` 软件包有几种方法
  • 笔记 | image may have poor performance,or fail,if run via emulation
  • Linux(CentOS)yum update -y 事故
  • 吴恩达深度学习笔记:卷积神经网络(Foundations of Convolutional Neural Networks)4.11
  • 【嵌入式开发——ARM】2ARM汇编指令
  • C/C++ 模板与so
  • elementUI input 禁止内容两端存在空格,或者是自动去除两端空格
  • springboot小型养猪场信息管理系统-计算机毕业设计源码48584
  • 【青牛科技】 GC6153——TMI8152 的不二之选,可应用于摇头机等产品中
  • 编译ffmpeg动态库时设置RPATH为$ORIGIN
  • Elasticsearch日志收集成功但是展示不出来????
  • webpack指南
  • Vue 简单入手
  • C++20 中最优雅的那个小特性 - Ranges
  • uni-app表单⑪
  • 【3D Slicer】的小白入门使用指南二
  • rust智能指针
  • ubuntu下openssl签名证书制作流程及验证demo
  • XML Schema 字符串数据类型
  • 干式电抗器的故障诊断和排除方法是什么?
  • 【大数据学习 | HBASE】hbase的写数据流程与hbase插入数据
  • Python教程笔记(1)