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

news2024/11/15 23:20:00
paperhttps://www.arxiv.org/abs/2408.08872
githubhttps://github.com/salesforce/LAVIS/tree/xgen-mm
Org.Salesforce AI Research
个人博客地址http://myhz0606.com/article/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_size
    best_fit = None
    max_effective_resolution = 0
    min_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_resolution

        if effective_resolution > max_effective_resolution or (effective_resolution == max_effective_resolution and wasted_resolution < min_wasted_resolution):
            max_effective_resolution = effective_resolution
            min_wasted_resolution = wasted_resolution
            best_fit = (width, height)

    return best_fi

step2: 切分patch

每个patch的size为vision transformer的输入size,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.coloradmin.cn/o/2117224.html

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

相关文章

Redis缓存常用的读写策略

缓存常用的读写策略 缓存与DB的数据不一致问题&#xff0c;大多数都是指DB的数据已经修改&#xff0c;而缓存中的数据还是旧数据的情况。 旁路缓存模式 对于读操作&#xff1a;基本上所有模式都是先尝试从缓存中读&#xff0c;没有的话再去DB读取&#xff0c;然后写到缓存中…

MSCKF7讲:特征管理与优化

MSCKF7讲&#xff1a;特征管理与优化 文章目录 MSCKF7讲&#xff1a;特征管理与优化1 Feature.h2 OptimizationConfig3 initializePosition三角化LM优化3.1 计算归一化坐标深度初值generateInitialGuess① 理论推导② 代码分析 3.2 计算归一化误差cost① 理论推导② 代码分析 3…

模型和算力看板:Compute DashBoard

AGI 之路 AGI&#xff08;通用人工智能&#xff09;是整个计算机科学的圣杯&#xff0c;算力的增长和模型能力的提升&#xff08;算法和数据&#xff09;缺一不可。作为一个新质生产力&#xff0c;构建一个合理的评价体系是常用的方法论。针对模型和算力的评价&#xff0c;有类…

【AutoX.js】选择器 UiSelector

文章目录 原文&#xff1a;https://blog.c12th.cn/archives/37.html选择器 UiSelector笔记直接分析层次分析代码分析 最后 原文&#xff1a;https://blog.c12th.cn/archives/37.html 选择器 UiSelector 笔记 AutoX.js UiSelector 直接分析 用于简单、最直接的查找控件 开启悬…

code agent-自动写代码的AI工具整理(2024)

文章目录 cursorReplit Agentgithub-copilot cursor https://www.cursor.com/ 界面类似VSCODE&#xff0c;集成多种先进功能的AI驱动的代码编辑器&#xff0c;智能代码编辑与补全、使用自然语言指令来编辑和修改代码、版本控制与代码审查、自动化测试等&#xff1b; Replit…

路径规划——RRT算法

路径规划——RRT算法 算法原理 RRT算法的全称是快速扩展随机树算法(Rapidly Exploring Random Tree)&#xff0c;它的思想是选取一个初始点作为根节点&#xff0c;通过随机采样&#xff0c;增加叶子节点的方式&#xff0c;生成一个随机扩展树&#xff0c;当随机树中的叶子节点…

基于阿里云函数计算(FC)x 云原生 API 网关构建生产级别 LLM Chat 应用方案最佳实践

作者&#xff1a;计缘 LLM Chat 应用大家应该都不陌生&#xff0c;这类应用也逐渐称为了我们日常的得力助手&#xff0c;如果只是个人使用&#xff0c;那么目前市面上有很多方案可以快速的构建出一个LLM Chat应用&#xff0c;但是如果要用在企业生产级别的项目中&#xff0c;那…

开源软件如何保证数据安全?从一下七个方面进行分析

1、加密软件来保护 在开源软件中&#xff0c;数据加密和保护是保障数据安全的重要手段。开发者应该使用强加密算法的加密软件来保护敏感数据&#xff0c;并确保数据传输和存储的安全性。通过驱动层加密技术&#xff0c;对开发源代码进行强制加密处理&#xff0c;文件创建自动进…

Mac在Python项目中通过opencv模版匹配定位不到图片

起因 原本一行代码的事情&#xff0c;但是在Mac上总能出现意外&#xff0c;如下 box pyautogui.locateOnScreen(obsidian.png) print(box) pyautogui.moveTo(box[0],box[1])上面的代码用来定位图片在屏幕中的位置&#xff0c;然后移动鼠标到定位到的屏幕位置坐标。 意外…

IT管理:我与IT的故事9-数字化转型7步思考行动法

四书即论语、孟子、大学、中庸&#xff0c;又称四子书&#xff0c;为历代儒学子首要研习之书。南宋朱熹取《礼记》之大学、中庸篇&#xff0c;分章注释&#xff0c;与论语、孟子合为“四书”。 四书及其注释包涵孔子弟子及再传弟子、孟子、程子、朱熹等&#xff0c;其编撰时长达…

代码随想录Day 38|背包问题完结,题目322.零钱兑换、279.完全平方数、139,单词拆分数

提示&#xff1a;DDU&#xff0c;供自己复习使用。欢迎大家前来讨论~ 文章目录 动态规划part06题目题目一&#xff1a;322. 零钱兑换解题思路&#xff1a;题目二&#xff1a;279.完全平方数题目三&#xff1a;139.单词拆分数解题思路&#xff1a;背包问题 多重背包&#xff08;…

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中&#xff0c;积水问题日益严重&#xff0c;特别是在大雨过后&#xff0c;积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术&#xff0c;我们能够智能化地检测和识别积水区域&#xff0c;减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积…

Unity使用自定义类型作为字典Key的最佳实践与避坑指南

自定义类型作为字典Key的最佳实践与避坑指南文章首发 问题背景 首先提一下之前项目开发时遇到的一个将自定义类型作为Dictionary键的坑。 项目中&#xff0c;我们有两个业务类BusinessA和BusinessB&#xff0c;因为某个需求&#xff0c;我们需要将这两个类建立一个映射关系&…

游泳馆收银系统源码解析之手牌管理--SAAS本地化及未来之窗行业应用跨平台架构

一、代码 if(手牌状态 "空"){结算界面 "";未来之窗_人工智能_通用页面_尺寸(title"游泳馆",收费,500,300);}else{未来之窗_人工智能_通用页面_尺寸(title"游泳馆",退款,1200,500);} 二、阿雪技术观 拥抱开源与共享&#xff0c;见…

探索图论中的关键算法(Java 实现)

“日出东海落西山 愁也一天 喜也一天 遇事不钻牛角尖” 文章目录 前言文章有误敬请斧正 不胜感恩&#xff01;||Day031. 最短路径算法Dijkstra算法Java 实现&#xff1a; Bellman-Ford算法Java 实现&#xff1a; 2. 最小生成树算法Prim算法Java 实现&#xff1a; Kruskal算法Ja…

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态&#xff0c;生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案&#xff0c;则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时&#x…

读软件设计的要素05概念的特性

1. 概念的特性 1.1. 专一性原则(specificity principle)认为概念与目的应该一一对应 1.1.1. 专一性原则已被证明是概念设计中最有用的原则之一 1.1.2. 一个概念最多只能满足一个目的 1.2. 很少有没有目的的概念 1.2.1. 如果本应隐藏的用户机制被暴露&#xff0c;可能会产生…

通信工程学习:什么是2ASK/BASK二进制振幅键控

2ASK/BASK&#xff1a;二进制振幅键控 2ASK/BASK二进制振幅键控是一种数字调制技术&#xff0c;其全称是二进制振幅键控&#xff08;Binary Amplitude Shift Keying&#xff09;。该技术通过改变载波的振幅来传递二进制数字信息&#xff0c;而载波的频率和相位则保持不变。以下…

RISC-V (九)抢占式多任务

主要的思想&#xff1a;借用定时器中断实现。设置定时器寄存器&#xff0c;系统自动触发定时器中断时会跳到trap handler这个函数里。借用这个函数做上下文的切换&#xff0c;从而实现了抢占式多任务。 定时器中断&#xff1a;跳到trap handler函数&#xff0c;同时系统自动将…

清华计算几何--凸Polygon的相交问题

凸Polygon和相交定义 本节只讨论凸Polygon的问题&#xff0c;不涉及凹Polygon. 相交包含了边相交和完全包含。 凸Polygon相交的两个问题 Detection(检测) 判断两个凸Polygon是否相交&#xff0c;至于相交部分是什么不关心. Construction(构造) 求出两个凸Polygon具体相交…