首页 > 其他分享 >多模态大语言模型(MLLM)-InstructBlip深度解读

多模态大语言模型(MLLM)-InstructBlip深度解读

时间:2024-10-10 08:50:51浏览次数:12  
标签:模态 embeddings config self ids MLLM InstructBlip position 数据

前言

InstructBlip可以理解为Blip2的升级版,重点加强了图文对话的能力。
模型结构和Blip2没差别,主要在数据集收集、数据集配比、指令微调等方面下文章。

创新点

  • 数据集收集: 将26个公开数据集转换为指令微调格式,并将它们归类到11个任务类别中。使用了其中13个数据集来进行指令微调,另外13个数据集用于zero-shot评估。
  • 数据集配比:提出了一种平衡采样策略,以同步不同数据集间的学习进度。
  • 模型改进:提出了指令感知的视觉特征提取,能够根据输入文本,提取特定的图像特征。说白了,就是文本不仅输入到LLM,也输入到Q-Former,Q-Former的输出再又给到LLM。
  • 评估并开源了一系列InstructBLIP模型,使用了两类大型语言模型:1) FlanT5,一种基于T5 微调得到的encoder-decoder模型;2) Vicuna,一种基于LLaMA微调得到的decoder模型。InstructBLIP模型在广泛的视觉-语言任务上实现了最先进的零样本性能。

具体细节

数据集收集

总共收集了11个任务类别(例如image captioning、visual reasoning等),26个数据集,如下:
在这里插入图片描述
数据集需要转化为图文指令微调的形式,用于多模态大语言模型的训练。
举个例子,在image classification任务中,图片A的类别是狗,数据的组织形式要转换成
问题:图片A,请问图片的类别是什么
回答:类别是狗
针对不同的任务类型,有多样化模板来进行数据的形式转换,如下:
在这里插入图片描述

训练测试数据划分

26个数据集中,13个用于训练,另外13个用于测试
按照对zero-shot影响深浅,评测集分为两类

  • 训练集有同一任务的其他数据集
  • 训练集无同一任务的其他数据集

数据集配比

因数据集较多,直接均匀分布可能会导致模型对小数据集过拟合,而对大数据集欠拟合。
为了解决这个问题,提出了一种采样策略,即按照数据集大小(或训练样本数)的平方根成比例的概率来选择数据集。
给定D个数据集,其大小分别为{S1, S2, …, SD},从数据集d中选取一个训练样本的概率
在这里插入图片描述

模型优化

在这里插入图片描述
从模型结构上看,和Blip2一模一样。。。
Instruction指用户的问题,有两个输入位置:

  • Q-Former:上一篇博客说到,左列输入图像,右列输入文本(Instruction),提取的是多模态特征,相较于Blip2仅输入图像效果肯定是更好的
  • LLM:Q-Former的输出、Instruction在embedding层面融合,输入到LLM中
class BertEmbeddings(nn.Module):
    """Construct the embeddings from word and position embeddings."""

    def __init__(self, config):
        super().__init__()
        self.word_embeddings = nn.Embedding(
            config.vocab_size, config.hidden_size, padding_idx=config.pad_token_id
        )
        self.position_embeddings = nn.Embedding(
            config.max_position_embeddings, config.hidden_size
        )

        # self.LayerNorm is not snake-cased to stick with TensorFlow model variable name and be able to load
        # any TensorFlow checkpoint file
        self.LayerNorm = nn.LayerNorm(config.hidden_size, eps=config.layer_norm_eps)
        self.dropout = nn.Dropout(config.hidden_dropout_prob)

        # position_ids (1, len position emb) is contiguous in memory and exported when serialized
        self.register_buffer(
            "position_ids", torch.arange(config.max_position_embeddings).expand((1, -1))
        )
        self.position_embedding_type = getattr(
            config, "position_embedding_type", "absolute"
        )

        self.config = config

    def forward(
        self,
        input_ids=None,
        position_ids=None,
        query_embeds=None,
        past_key_values_length=0,
    ):
        if input_ids is not None:
            seq_length = input_ids.size()[1]
        else:
            seq_length = 0

        if position_ids is None:
            position_ids = self.position_ids[
                :, past_key_values_length : seq_length + past_key_values_length
            ].clone()

        if input_ids is not None:
            embeddings = self.word_embeddings(input_ids)
            if self.position_embedding_type == "absolute":
                position_embeddings = self.position_embeddings(position_ids)
                embeddings = embeddings + position_embeddings

            if query_embeds is not None:
                embeddings = torch.cat((query_embeds, embeddings), dim=1)
        else:
            embeddings = query_embeds

        embeddings = self.LayerNorm(embeddings)
        embeddings = self.dropout(embeddings)
        return embeddings

可以看到

            if query_embeds is not None:
                embeddings = torch.cat((query_embeds, embeddings), dim=1)

作者重写了bert embedding层的代码,将query_embeds(可理解为Q-Former的输出)和embeddings(可理解为Instruction的文本embedding) concat起来

推理策略

对于不同的任务类别,采用不同的推理策略

  • 对于绝大部分任务,例如image captioning以及开放域VQA任务,采用传统的transformer解码方式生成回答
  • 对于classification或multi-choice VQA这种回复内容受限的任务,生成时限制解码的词表,保证回复范围不超过规定范围。(例如多选任务里,回答只能约束在A B C D四个选项)

实验结果

zero-shot对比

在这里插入图片描述
从图标上看,效果确实比Blip2,flamingo要好。不过InstructBlip在Blip2的基础上加了这么多数据训练,效果没道理差。

消融实验

在这里插入图片描述
不把instruction送到Q-Former,效果确实差了很多
同时,不做数据配比,效果也差了一些

指令微调 VS 多任务学习

指令微调在实现的时候,利用了13个数据集来训练。一个比较类似的算法是多任务学习,也能够实现多个数据集的学习。
为比较效果,做了如下多任务学习实验:

  • 训练用原任务input-output数据,测试用InstructBlip指令
  • 训练在input前添加数据集名称,测试用InstructBlip指令
  • 训练在input前添加数据集名称,测试在input前添加数据集名称
    在这里插入图片描述
    有两个观察
  • 多任务学习和InstructBlip在held-in 数据集上,效果差不多。held-in数据可以理解为训练和测试均来自同一数据集,说明
  • InstructBlip在held-out数据集上远优于多任务学习,held-out数据集指模型在训练时没见过这个数据集,直接跨数据集。

笔者会持续关注多模态大语言模型(MLLM),对底层原理、经典论文、开源代码都会进行详细解读,欢迎交流学习。

标签:模态,embeddings,config,self,ids,MLLM,InstructBlip,position,数据
From: https://blog.csdn.net/Jamence/article/details/142753938

相关文章

  • 清华大学、腾讯联合推全开源多模态架构Oryx 支持超长视频输入
    在人工智能快速发展的今天,一个名为ORYX的多模态大型语言模型正在悄然改变我们对AI理解视觉世界能力的认知。这个由清华大学、腾讯和南洋理工大学研究人员联合开发的AI系统,堪称视觉处理领域的"变形金刚"。ORYX,全称OryxMulti-ModalLargeLanguageModels,是一个专门设计用于......
  • 《阿凡达》导演卡梅隆加入 Stability AI 董事会;Molmo 横空出世,开源多模态模型王座易位
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的......
  • 豆包通用模型Pro:字节跳动的AI革新,引领多模态交互新纪元
    在人工智能技术的快速发展浪潮中,字节跳动凭借其最新的豆包通用模型Pro,再次站在了技术创新的前沿。豆包通用模型Pro不仅在技术上取得了显著的突破,更在实际应用中展现了其强大的多模态交互能力,为内容创作和用户交互提供了全新的解决方案。技术突破:豆包通用模型Pro的核心优势豆包通用......
  • 社区来稿丨一个真正意义上的实时多模态智能体框架,TEN Framework 为构建下一代 AI Agen
    本文由RTE开发者社区成员通过社区网站投稿提供,如果你也有与实时互动(Real-TimeEngagement,RTE)相关的项目分享,欢迎访问网站rtecommunity.dev发布,优秀项目将会在公众号发布分享。   自从OpenAI展示了GPT-4o的实时对话能力后,感觉电影《Her》中的场景瞬间成了现实。受......
  • 云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算
    新一轮人工智能浪潮正在重塑世界,以生成式AI为代表的技术快速应用,推动了数据与智能的深化融合,同时也给数据基础设施带来了全新的变革与挑战。面向AI时代的数据基础设施如何构建?底层数据平台架构在AI时代如何演进?9月20日,2024云栖大会OpenLake解决方案专场带来了全方位的解读......
  • 为什么多模态大语言模型最近用BLIP2中Q-Former结构的变少了?
    前言本篇介绍为什么多模态大语言模型(MLLM)最近的工作中用BLIP2中Q-Former结构的变少了?简单来说,相较于MLP的方案,即LLaVA-1.5,BLIP-2中的Q-Former模型在参数量上更为庞大,其收敛过程也相对缓慢。在同等条件下,Q-Former的性能并未达到LLaVA-1.5所展现出的卓越水平。值得注意的是,即使在数据......
  • 2025秋招LLM大模型多模态面试题(八)- langchain完整面试题
    目录什么是LangChainLangChain包含哪些核心模块模型输入/输出(ModelI/O)组件管理数据处理链式组合记忆与上下文管理外部集成一些核心概念什么是LangChainAgent?什么是LangChainmodel?LangChain包含哪些特点?LangChain如何使用?LangChain如何调用......
  • 中电金信多模态鉴伪技术抵御AI造假威胁
    AI换脸技术,属于深度伪造最常见方式之一,是一种利用人工智能生成逼真的虚假人脸图片或视频的技术。基于深度学习算法,可以将一个人的面部特征映射到另一个人的面部,创造出看似真实的伪造内容。近年来,以AI换脸为代表的AIGC技术被用于诈骗活动呈显著增长趋势,给金融行业带来了巨大的安全风......
  • MoNA:复用跨模态预训练模型,少样本模态的福音 | ICML'24
    跨模态转移旨在利用大型预训练模型来完成可能不属于预训练数据模态的任务。现有的研究在将经典微调扩展到跨模态场景方面取得了一定的成功,但仍然缺乏对模态差距对转移的影响的理解。在这项工作中,进行了一系列关于转移过程中源表示质量的实验,揭示了更大的模态差距与较少知识重用之......
  • LeCun谢赛宁首发全新视觉多模态模型,等效1000张A100干翻GPT-4V,AI视频长度扩展调优技术:E
    LeCun谢赛宁首发全新视觉多模态模型,等效1000张A100干翻GPT-4V,AI视频长度扩展调优技术:ExVideo帮你轻松生成更长、更优质的视频,EVTexture:提升视频分辨率的新方法!利用AI将模糊视频变清晰!近日,LeCun和谢赛宁等大佬,共同提出了这一种全新的SOTAMLLM——Cambrian-1。开创了以视觉为中心的......