BLIP3技术小结(xGen-MM (BLIP-3): A Family of Open Large Multimodal Models)

devtools/2024/9/19 23:42:38/ 标签: blip3, blip, 多模态, xGen-MM
paperhttps://www.arxiv.org/abs/2408.08872
githubhttps://github.com/salesforce/LAVIS/tree/xgen-mm
Org.Salesforce AI Research
个人博客地址http://myhz0606.com/article/blip3>blip3

前置阅读:BLIP系列总结

核心思路

虽然过去BLIP系列对LMM发展起到至关重要的作用,但从效果上来说,已经远落后于当下的SOTA模型,主要有一下3点原因:
1)数据上,训练数据数量少、质量不高、多样性不强。
2)训练策略上,多个stage(ITMITCITG)训练流程冗长,up scale的训练开销大
3)模型架构上,BLIP系列仅支持单图输入,应用范围相对较窄

BLIP3针对以上3个方面进行改进:
1)数据上,构造了更大的、质量更高、多样性更强的数据集。
2)训练策略上,提出3 stage 的训练范式,并统一用next token prediction作为训练目标目标,提升训练效率和模型效果。
3)模型架构上,支持交错图文输入。

在这里插入图片描述

方法

模型架构

多模态两种主流架构:

  • cross-attention style;通过给LLM引入交叉注意力机制,融合不同模态的信息;代表方法:FlamingoLlama 3.1
  • decoder-only style;通过VL-connector,将visual token转为LLM可以“理解”的token,无需改动LLM的架构。代表方法:BLIP-2LLAVAQwen-vlPali-xKosmos-2phi3-vision

BLIP3也是decoder-only style。区别于早先的BLIP2BLIP3支持交错式的图文输入。

训练阶段:图片用visual tokenizer转为visual token,文本用text tokenizer转为text token,最后按序拼接起来送入LLM,用causal mask做并行,仅对文本token处计算自回归损失。

推理阶段:图片用visual tokenizer转为visual token,文本用text tokenizer转为text token,最后按序拼接起来送入LLM,按照next token prediction的范式做生成。

BLIP3架构只能解决多模态图文交错输入,单模态文本输出。

在这里插入图片描述

BLIP3的架构包含3部分

image transforme(image encoder)

这个部分不参与训练,所用模型为SigLIPViT-SO400M-14-SigLIP-384),用于提取图片embedding。

VL-Connector

BLIP3中没有沿用BLIP2QFormer,而是用了FlamingoPerceiver Resampler。二者核心思路其实都差不多——以learnable queries的方式,将image encoder提取的image embedding转为固定长度的image token。

Perceiver Reampler的核心计算逻辑如图所示:

代码位置:https://github.com/salesforce/LAVIS/blob/xgen-mm/open_flamingo/src/helpers.py#L105

在这里插入图片描述

LLM

BLIP3中,LLM也参与训练。所用的LLMphi3-mini

Any-Resolution Vision Token Sampling

为了强化模型对细粒度信息的捕获能力。BLIP3也引入了Llava next中的Any-Resolution Vision Token Sampling 策略,具体过程如下:

step1: 找到最优分辨率

预设了一些模版,通过下面的目标找到输入图片最适合的分辨率

O b j e c t i o n : A r g min ⁡ t ( w a s t e d _ r e s o l u t i o n ) , t = 1 , 2 , ⋯ N \begin{aligned} &\mathrm{Objection:} \mathrm{Arg} \min_{t} (\mathrm{wasted\_resolution}), t=1,2, \cdots N \\ \end{aligned} Objection:Argtmin(wasted_resolution),t=1,2,N

其中t为模版的索引,一共有 N N N个预设模版

r t = min ⁡ ( w t w o r i , h t h o r i ) w a s t e d _ r e s o l u t i o n = w t ∗ h t − min ⁡ ( w o r i ∗ h o r i , I N T ( w o r i ∗ r t ) ∗ I N T ( h o r i ∗ r t ) ) \begin{aligned} &r_{t} = \min( \frac{w_t} {w_{\rm ori}}, \frac{h_t} {h_{\rm ori}}) \\ &\mathrm{wasted\_resolution} = w_t * h_t - \min (w_{\rm ori} * h_{\rm ori}, \mathrm{INT}(w_{\rm ori} * r_{t}) * \mathrm{INT} (h_{\rm ori} * r_{t}) ) \\\end{aligned} rt=min(woriwt,horiht)wasted_resolution=wthtmin(worihori,INT(worirt)INT(horirt))


possible_resolutions = [[384, 768], [768, 384], [768, 768], [1152, 384], [384, 1152]]def select_best_resolution(original_size, possible_resolutions):"""Args:original_size (tuple): The original size of the image in the format (width, height).possible_resolutions (list): A list of possible resolutions in the format [(width1, height1), (width2, height2), ...].Returns:tuple: The best fit resolution in the format (width, height)."""original_width, original_height = original_sizebest_fit = Nonemax_effective_resolution = 0min_wasted_resolution = float('inf')for width, height in possible_resolutions:scale = min(width / original_width, height / original_height)downscaled_width, downscaled_height = int(original_width * scale), int(original_height * scale)effective_resolution = min(downscaled_width * downscaled_height, original_width * original_height)wasted_resolution = (width * height) - effective_resolutionif effective_resolution > max_effective_resolution or (effective_resolution == max_effective_resolution and wasted_resolution < min_wasted_resolution):max_effective_resolution = effective_resolutionmin_wasted_resolution = wasted_resolutionbest_fit = (width, height)return best_fi

step2: 切分patch

每个patch的size为vision transformer的输入size,blip3>blip3所用的ViT-SO400M-14-SigLIP-384 的输入size为(384x384)。假设输入图片所映射的模板size为(768x768),将图片resize到(768x768)后进行切分,得到5个patch,4个切分patch加上一个包含全局信息的patch,如下图所示。

在这里插入图片描述

step3: 计算每个patch的image embedding。

一个384x384的图片经过ViT-SO400M-14-SigLIP-384后得到576个token ( 384 / 16 ) 2 (384/16)^2 384/16)2

在这里插入图片描述

step4: 分别提取每个patch的vision token再拼接

从下图可见,不同模版分辨率的image token是不同的。通常来说,token数越多,包含的细粒度信息就越多。对于下游感知密集型的推理任务会有更大优势(如DocQA)。

在这里插入图片描述

训练recipe

training-stage训练模块训练目标datasetdataset size训练时长是否采用any-resolution Vision Token Sampling 的策略
stage1: pre-trainingVL connector, LLMnext token prediction交错图文数据,caption类数据-100 billion multi-modal token
stage2-part1. 常规instruct-following SFTVL connector, LLMnext token prediction开源数据:1)多模态会话
2) image caption;3)VQA;4) document QA;5)science and math understand等1M1 epoch
stage2-part2. multi-image instruction tuningVL connector, LLMnext token predictionMANTIS,Mmdu,及stage 2.1中的交错图文数据--
post-training—Improving Truthfulness by Direct Preference OptimizationLLM-backbone Lora 2.5%参数。DPOVLFeedback62.6k1 epoch
post-training—Improving Harmlessness by Safety Fine-tuningLLM-backbone Lora 2.5%参数next token predictionVLGuard-2k,5k additional examples from the instruction fine-tuning dataset2k3 epoch

从模型架构来看,BLIP3需要训练模块有两个:1)VL-connector (perceiver sampler);2) LLM

BLIP3的训练分为了3个stage

  • pre-training
  • SFT
  • post-training

stage1: pre-training

在这里插入图片描述

数据集格式如:

在这里插入图片描述

stage1训练了约100 billion 多模态token。此外,stage1没有用Any-Resolution Vision Token Sampling的策略。

简单介绍BLIP3自建的3个数据集

(一) BLIP3-KALE

论文暂时未给出细节。

论文原话:Details will be discussed in another paper, and the dataset will be made public very soon

(二) BLIP3-OCR-200M

作者从Datacomp-1B中搜集了200M张高分辨率图片。用paddleOCR提取里面的文字信息。虽然BLIP3中并没有用到文本的bounding box,作者说可以尝试,会提升OCR QA类任务的效果。

在这里插入图片描述

(三) BLIP3-GROUNDING-50M

作者从Datacomp-1B中搜集50M图片(图文信息都要)。用开源的open-set目标检测模型Grounding-DINORecognize Anything进行识别。将caption中的对应的object替换为包含位置信息的object。

在这里插入图片描述

stage2: SFT

part1. 常规instruct-following SFT

作者搜集了一批开源数据集,从里面挑选了1M数据用Any-Resolution Vision Token Sampling的策略微调模型1个epoch。开源数据涉及的领域包括:

  • 多模态会话
  • image caption
  • VQA
  • document QA
  • science and math understand等

part2. multi-image instruction tuning

为了提升模型对多图交错图文场景的理解能力,作者用多图交错图文数据集MANTISMmdu结合2.1的单图交错图片数据对模型进行进一步微调。

stage3: post-training

stage3主要是为了提升模型的helpfulness,harmlessness

part1. 通过DPO提升模型的Truthfulness

训练数据:该阶段利用了开源的VLFeedback数据集的指令,VLFeedback是一个用GPT4-v构造多模态偏好数据集,总计80K。构造方式:给定指令,让多个VLM模型做生成,随后GPT4-v从helpfulness, visual faithfulness, and ethics对生成的结果进行打分。分值高的输出作为preferred responses,分值低的输出作为dispreferred responses。BLIP3进一步过滤掉首选响应得分较低的sample,最终得到62.6K数据。

训练方式BLIP3采用DPO作为训练目标,用LORA微调LLM 2.5%参数,总计训练1个epoch。

part2. 通过Safty-SFT提升模型的Harmlessness

训练数据:用VLGuard数据集+随机5K SFT数据集对BLIP3再次进行微调,在保留helpfulness的同时提升harmlessness。

训练方式LORA微调LLM 2.5%参数

结果

Pre-Training模型的few-shot能力

在这里插入图片描述

SFT 模型评估

单图benchmark评估

在这里插入图片描述

多图benchmark评估

在这里插入图片描述

在这里插入图片描述

Post-training 模型评估

在这里插入图片描述

一些关键的消融实验

Pre-Training阶段消融实验

scaling pre-training data

caption类任务在训练token数达到60B后精度增长放缓;相对复杂的text VQA类任务精度还有较大提升。

在这里插入图片描述

visual backbone & number of visual token

SigLip模型作为backbone有较大的优势,尤其在OCR任务上。

在这里插入图片描述

作者方向将visual token从128降到64后,精度并没有明显下降。

在这里插入图片描述

SFT训练阶段消融实验

Any-Resolution Vision Token Sampling

base resolution pipeline

在这里插入图片描述

anyres-fixed-sampling pipeline

在这里插入图片描述

anyres-patch-sampling pipeline

在这里插入图片描述

从消融实验看,Any-Resolution Vision Token Sampling 对强感知类任务增益很大。

在这里插入图片描述

小结

BLIP3从dataset curation, training recipe, model architectures对BLIP2进行了一系列改进,使BLIP系列达到目前开源SOTA水平。


http://www.ppmy.cn/devtools/109033.html

相关文章

@Value读取properties中文乱码解决方案

前几天碰到使用Value中文乱码的问题&#xff0c;英文字符则不会出现问题 原因&#xff1a;SpringBoot在加载properties配置文件时&#xff0c;使用的默认编码是&#xff1a;ISO_88599_1 解决方式&#xff1a;将properties改成yml就可以读取成功了 Data Component PropertySou…

R 包管理

R 包管理 函数总结简介安装包选择安装路径 更新包devtoolsGitHub 和 BioConductor加载包迁移扩展包 2024-09-04 函数总结 函数功能install.packages()安装包。不加参数&#xff0c;显示CRAN镜像站点站点&#xff0c;加包名称&#xff0c;直接下载安装包installed.packages()列…

EmguCV学习笔记 VB.Net 第10章 人脸识别

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

仿华为车机UI--图标从Workspace拖动到Hotseat同时保留图标在原来位置

基于Android13 Launcher3,原生系统如果把图标从Workspace拖动到Hotseat里则Workspace就没有了&#xff0c;需求是执行拖拽动作后&#xff0c;图标同时保留在原位置。 实现效果如下&#xff1a; 实现思路&#xff1a; 1.如果在workspace中拖动&#xff0c;则保留原来“改变图标…

项目日志——日志等级类和日志消息类的设计、实现、测试

文章目录 日志等级类设计实现测试 日志消息类设计实现 日志等级类 设计 日志等级一共分7个等级 UNKNOW 0OFF 关闭所有日志输出DEBUG 调试等级INFO 提示等级WARN 警告等级ERROR 错误等级FATAL 致命等级OFF 关闭所有日志的输出 每一个项目都会设置一个默认输出等级&#xff…

前端项目开发之prettier安装和使用

前端项目开发之安装prettier和使用 Prettier 是一个流行的代码格式化工具&#xff0c;可以帮助你保持代码风格的一致性。以下是如何在 Visual Studio Code (VS Code) 中安装和使用 Prettier 的步骤&#xff1a; 安装 Prettier 通过 VS Code 扩展市场安装&#xff1a; 打开 V…

使用AI赋能进行软件测试-文心一言

1.AI赋能的作用 提高速度和效率缺陷预测与分析 2.AI互动指令格式--文心一言 角色、指示、上下文例子、输入、输出 a 直接问AI 针对以下需求&#xff0c;设计测试用例。 需求&#xff1a; 1、账号密码登录系统验证账号和密码的正确性。 验证通过,用户登录成功,进入个人中心;验…

pytorch tensor.expand函数介绍

在 PyTorch 中&#xff0c;tensor.expand()是一个用于扩展张量维度的函数。 一、函数作用 它允许你在不复制数据的情况下&#xff0c;将张量的形状扩展到指定的维度大小。这对于需要在特定维度上重复数据的操作非常有用&#xff0c;例如在进行广播操作时调整张量的形状。 二…

Web3社交新经济,与 SOEX 实现无缝交易的高级安全性

出于充分的理由&#xff0c;安全性是交易中至关重要的考虑因素。每个人都应该确保自己的资金在交易时是安全的。由于 &#xff33;&#xff2f;&#xff25;&#xff38; 充当您与交易所的最佳连接&#xff0c;因此必须强调的是&#xff0c;该系统不会引发任何安全问题。 &a…

com.baomidou.mybatisplus.annotation.DbType 无法引入

com.baomidou.mybatisplus.annotation.DbType 无法引入爆红 解决 解决 ❤️ 3.4.1 是mybatis-plus版本&#xff0c;根据实际的配置→版本一致 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-annotation</artifactId>&…

[动态规划] 删除并获得点数

给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。返回你能通过这些操…

国内短剧系统怎么搭建以及都需要那些资质?

聊到国内短剧&#xff0c;相信大家都不陌生&#xff0c;在各大短视频平台可谓是火的一批&#xff0c;您或许有想加入进来的想法&#xff0c;或是已经有规划还未实现的&#xff0c;请停下脚步&#xff0c;耐心看完该文章&#xff0c;相信一定会对你有所帮助的。本文介绍短剧平台…

做饭时用什么样的白酒能更好衬托食物的鲜味?

在做饭的时候&#xff0c;白酒扮演着举足轻重的角色&#xff0c;其核心功能在于祛除食材不良风味并显著提升菜肴的香醇层次。挑选适宜的白酒时&#xff0c;需细致考量其种类与酒精浓度&#xff0c;尽量与食材的风味和谐共生&#xff0c;而非相互抵触。以下是酱酒亮哥yutengtrad…

LeetCode HOT100系列题解之最大正方形(6/100)

题目&#xff1a;最大正方形. - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; 第一种方法&#xff1a;前缀和二分答案&#xff08;暴力优化&#xff09;我感觉比官方给的暴力好一点 时间复杂度&#xff1a; 暴力优化1&#xff1a;通过前缀和减少判断1出现得次数…

SpringBoot教程(十五) | SpringBoot集成RabbitMq(消息丢失、消息重复、消息顺序、消息顺序)

SpringBoot教程&#xff08;十五&#xff09; | SpringBoot集成RabbitMq&#xff08;消息丢失、消息重复、消息顺序、消息顺序&#xff09; RabbitMQ常见问题解决方案问题一&#xff1a;消息丢失的解决方案&#xff08;1&#xff09;生成者丢失消息丢失的情景解决方案1&#xf…

Elasticsearch之原理详解

简介 ES是使用 Java 编写的一种开源搜索引擎&#xff0c;它在内部使用 Lucene 做索引与搜索&#xff0c;通过对 Lucene 的封装&#xff0c;隐藏了 Lucene 的复杂性&#xff0c;取而代之的提供一套简单一致的 RESTful API 然而&#xff0c;Elasticsearch 不仅仅是 Lucene&#…

【ES备份和还原索引数据】

文章目录 备份&#xff08;Snapshot&#xff09;还原&#xff08;Restore&#xff09;注意事项示例 在 Elasticsearch 中&#xff0c;备份和还原索引数据通常通过快照&#xff08;Snapshot&#xff09;和恢复&#xff08;Restore&#xff09;机制来实现。以下是详细的操作步骤&…

【RabbitMQ】核心概念

界⾯上的导航栏共分6部分, 这6部分分别是什么意思呢, 我们先看看RabbitMQ的工作流程 1. Producer和Consumer Producer:生产者,是RabbitMQ Server的客户端,向RabbitMQ发送消息 Consumer: 消费者,也是RabbitMQ Server的客户端,从RabbitMQ接收消息 Broker:其实就是RabbitMQSer…

策略规划:在MySQL中实现数据恢复的全面指南

数据恢复是数据库管理中至关重要的一环&#xff0c;它确保在发生数据丢失或损坏的情况下&#xff0c;能够迅速且准确地恢复数据。在MySQL中&#xff0c;实现有效的数据恢复策略规划需要综合考虑备份策略、备份类型、存储管理、故障转移机制以及恢复流程。本文将深入探讨如何在M…

springcloud-GateWay

Spring Cloud Gateway 是 Spring Cloud 微服务架构中的一个重要组件&#xff0c;用于提供 API 网关功能。作为 API 网关&#xff0c;Spring Cloud Gateway 充当客户端和后端服务之间的代理&#xff0c;负责请求路由、过滤、安全认证、负载均衡等功能。在分布式系统中&#xff0…