模型权重、训练代码、数据集完全开源!BLIP3‑o:CLIP + Flow Matching,理解生成一条龙服务

部署运行你感兴趣的模型镜像

内容源自计算机科研圈

完全开源的生成理解统一模型:架构,训练,数据集。

本文探索了理解生成统一模型 (Unified Multimodal Models) 的最优模型架构和训练配方。本文研究了几个关键的问题:

图像应该怎么表征?使用 VAE 还是 CLIP-Diffusion 作为 Autoencoder。

训练目标该如何设计?使用 MSE Loss 还是 Flow Matching Loss?

统一模型的顺序预训练策略该怎么做?是联合训练,还是先在图像理解上进行训练,再在图像生成上训练?

本文开发的 BLIP3-o 是一套最先进的统一多模态模型,在图像理解和生成任务的大多数 Benchmark 中都取得了卓越的性能。本文还做了一个高质量的指令微调数据集 BLIP3o-60k。

本文目录

1 BLIP3-o:完全开源的生成理解统一模型:架构,训练,数据集
(来自 Salesforce)
1 BLIP3-o 论文解读
1.1 BLIP3-o 简述
1.2 为什么要构建理解生成统一模型
1.3 图像表征路线:VAE Autoencoder 还是 CLIP-Diffusion Autoencoder ?
1.4 图像 Latent 表征建模路线:MSE Loss 还是 Flow Matching?
1.5 训练策略:联合训练还是顺序训练?
1.6 BLIP3-o 模型
1.7 实验结果

1 BLIP3-o:完全开源的生成理解统一模型:架构,训练,数据集

论文名称:BLIP3-o: A Family of Fully Open Unified Multimodal Models—Architecture, Training and Dataset

论文地址:

https://www.arxiv.org/pdf/2505.09568

代码链接:

https://github.com/JiuhaiChen/BLIP3o

模型:

https://huggingface.co/BLIP3o/BLIP3o-Model

预训练数据:

https://huggingface.co/datasets/BLIP3o/BLIP3o-Pretrain-Long-Caption

指令微调数据:

https://huggingface.co/datasets/BLIP3o/BLIP3o-60k

1.1 BLIP3-o 简述

理解生成统一模型 (Unified Multimodal Model) 支持使用一个模型完成图像理解和图像生成的任务。图像生成的最佳架构和训练策略仍未得到充分探索。前人的方案主要围绕 2 种方法:

第 1 种方法 (如 Chameleon,Emu3,TokenShuffle) 将连续的视觉特征量化为离散的 token,并将它们建模为分类分布。

第 2 种方法 (如 MetaMorph,MetaQuery) 通过自回归模型生成视觉特征或 latent representation,然后以这些视觉特征的条件,通过 Diffusion Model 生成图像。

最近的 GPT-4o 图像生成被暗示采用具有自回归和扩散模型的混合架构,遵循第 2 种方法。

为此,本文系统研究了 Unified Model 中图像生成的 design choice。

本文研究的 3 个关键问题:

  1. 图像表征: 将图像编码为 low-level 像素特征 (比如基于 VAE 的编码器) 或 high-level 语义特征 (比如来自 CLIP 图像编码器)。

  2. 训练目标: MSE 还是 Flow Matching。以及它们对训练效率和生成质量的影响。

  3. 训练策略: 图像理解和生成的联合多任务训练 (如 Metamorph),还是像 LMFusion 和 MetaQuery 这样的顺序训练,其中模型首先被训练来理解,然后扩展到生成。

结论 (太长不看版):

  1. 图像表征: CLIP 特征比 VAE 特征提供更紧凑和信息量更大的表征,训练速度更快,图像生成质量更高。

  2. 训练目标: Flow Matching Loss 比 MSE Loss 更有效,实现更多样化的图像采样,产生更好的图像质量。

  3. 训练策略: 顺序训练策略,即首先在图像理解任务上训练自回归模型,然后冻结之后做图像生成训练,可以获得最好的整体性能。

基于这些发现,本文提出 BLIP3-o。

BLIP3-o 在 CLIP 特征上使用 DiT,Flow Matching,先在图像理解任务上训练,再在生成任务训练。

BLIP3-o 框架:

为了进一步提高美学和指令跟随能力,本文通过 prompting GPT-4o,curate 了 60k 高质量指令微调数据集 BLIP3o-60k。BLIP3o-60k 上的有监督指令微调可以显著提升 BLIP3-o 与人类偏好的对齐,以及提升美学质量。

1.2 为什么要构建理解生成统一模型

3 点原因:

  • 继承 MLLM 的推理能力: 把图像生成能力集成到 MLLM 等自回归模型的一个重要原因是希望继承 MLLM 的预训练知识,推理能力,以及指令跟随的能力。

  • In-context Learning: 理解生成统一模型自然地支持 In-context Learning 能力。之前生成的多模态输出可以作为后续生成的 context,从而实现迭代图像编辑、视觉对话和逐步视觉推理。这就不需要再做另一个任务的时候去切换模式了。

  • AGI 的需求: 未来的系统需要去感知、解释和生成多模态内容。要实现这一点,就需要从纯文本架构转移到理解生成统一的多模态架构。

1.3 图像表征路线:VAE Autoencoder 还是 CLIP-Diffusion Autoencoder ?

BLIP3-o 采用了自回归+扩散框架。自回归模型产生连续的中间视觉特征,这就带来了两个关键问题。

其一,这个图像特征的 Ground-truth Embedding 是什么?我们应该使用 VAE 还是 CLIP 编码的特征?

其二,自回归模型生成视觉特征之后,我们应该如何有效将其与 GT 真实图像特征对齐?或者更一般地讲,我们如何对这些连续视觉特征的分布进行建模:通过 MSE Loss,还是 diffusion-based 方法?

图像生成通常首先使用 Encoder 将图像编码为连续的 latent embedding,然后使用 Decoder 从该 latent embedding 重建图像。这种 Encoder-Decoder Pipeline 可以有效地降低图像生成中输入空间的维数,促进高效训练。

图像表征相关的路线,有两种比较常见的 Encoder-Decoder 范式:

一类是 VAE Autoencoder 路线。 VAE 是一类生成模型,它学习将图像编码为结构化的连续 latent space。Encoder 估计给定图像的 latent 的后验分布,Decoder 根据从 latent distribution 中得到的采样,来重建原始图像。Latent Diffusion Model 就是建立在该框架的基础上,建模 latent 的分布,而不是原始图像的分布。通过在 VAE latent 空间中操作,可显著降低输出空间的维度,降低了计算成本,实现更高效训练。

一类是 CLIP-Diffusion Autoencoder 路线。 CLIP 模型因为在大规模图像-文本对上进行对比学习,因而具有很强的从图像中提取丰富、高级语义特征的能力。但是因为 CLIP 最初不是为重建任务设计的,所以利用 CLIP 特征进行图像生成仍不容易。

Emu2 的做法是:CLIP-based encoder + diffusion-based decoder。

使用 EVA-CLIP 将图像编码为连续的视觉 embedding,并通过 SDXL-base 初始化的扩散模型重建。在训练期间,diffusion decoder 被微调,将 EVA-CLIP 的视觉 embedding 作为 Condition,从高斯噪声重建原始图像。EVA-CLIP 冻结参数。

这个过程相当于是把 CLIP 和 Diffusion Model 结合为一个 image autoencoder:CLIP Encoder 把图像编码为语义丰富的 latent embedding,Diffusion-based Decoder 从这些 embedding 重建图像。

总结:

VAE Autoencoder,或者 CLIP-Diffusion Autoencoder,都属于是用于获得图像表征 Encoder-Decoder 路线。

VAE 将图像编码为 low-level 像素特征,提供更好的重建质量。且 VAE 可以直接集成到图像生成 training pipeline 中。

CLIP-Diffusion 需要额外的训练来使扩散模型适应各种 CLIP Encoder。但是,CLIP-Diffusion 架构在图像压缩比率方面更有优势。比如在 Emu2 和 BLIP3-o 中,无论分辨率如何都可编码为 64 个连续向量,提供紧凑且语义丰富的 latent embedding。相比之下,基于 VAE 的 Encoder 为更高分辨率的输入生成更长的 latent embedding 序列,增加了训练过程中的计算负担。

1.4 训练目标:MSE Loss 还是 Flow Matching?

在获得连续的 image embedding 后,继续使用自回归架构对它们进行建模。

假设 prompt 是 "A young woman with freckles wearing a straw hat."。

  • 首先使用自回归模型的输入 Embedding 层将其编码为 embedding 向量  。

  • 将一组 learnable query 向量  附加到向量  ,得到  。  随机初始化,且在训练期间更新参数。

  • 把  输入自回归模型,  学习从向量  中提取语义信息。

  • 最后输出的  代表自回归模型输出的中间视觉特征。希望通过训练,使其近似 GT 图像特征 (从 VAE 或 CLIP 得到)。

如何将  与 GT 图像特征  对齐?有 2 种方法:

MSE Loss

给定自回归模型输出的视觉特征  和 GT 图像特征  ,应用一个可学习的线性投影将  的维度与  的维度对齐。然后 MSE Loss 为:

其中,  是可学习的投影矩阵。

Flow Matching

一个扩散框架,可以通过从先验分布(如高斯)迭代传输样本从目标连续分布中采样。给定一个 GT 真实图像特征  和自回归模型编码的 Condition  ,在每个训练步骤中,对时间步长  和 noise  进行采样。然后 DiT 学习在以  为条件的时间步 预测速度  ,朝着  的方向。通过在  和  之间进行简单的线性插值来计算  :

其中, 是 DiT 的参数,  表示基于实例  、时间步长  和噪声 预测的速度。

总结:

离散 token 支持基于采样的策略,可以探索不同的生成路径。连续表征缺少了这个性质。

在基于 MSE 的训练目标下,对于给定的 prompt,预测的视觉特征 Q 几乎是确定的。因此,无论视觉 Decoder 是基于 VAE 的还是 CLIP + Diffusion 的架构,输出图像在多个推理运行中几乎保持不变。这突出了 MSE 目标的一个关键的限制:约束模型为每个 prompt 生成固定的输出,限制了生成的多样性。

相比之下,Flow Matching 使模型能够继承 diffusion 的随机性。允许模型在相同 prompt 时,生成不同图像样本。然而,这种灵活性是以模型复杂性增加为代价的。与 MSE 相比,Flow Matching 引入了额外的可学习参数。本文使用 DiT,并发现缩放模型容量可以提高性能。

三种设计选择

前面列举了 2 种图像表征路线:

  • VAE 作为 Autoencoder

  • CLIP-Diffusion (简记为 CLIP) 作为 Autoencoder

也列举了 2 种训练目标 (即 Loss Function):

  • MSE Loss

  • Flow Matching

排列组合,得到 4 种图像生成模型的设计方案如下。不同的方案影响生成图像的质量和可控性。

  • CLIP + MSE

  • CLIP + Flow Matching

  • VAE + Flow Matching

  • VAE + MSE

您可能感兴趣的与本文相关的镜像

GPT-oss:20b

GPT-oss:20b

图文对话
Gpt-oss

GPT OSS 是OpenAI 推出的重量级开放模型,面向强推理、智能体任务以及多样化开发场景

### 使用 Flickr30K 数据集训练 BLIP 图像字幕生成模型 为了使用 Flickr30K 数据集训练 BLIP 图像字幕生成模型,可以遵循以下指导: #### 准备环境和依赖项 确保安装必要的库和支持工具。通常这包括 PyTorch 和 Hugging Face 的 `transformers` 库。 ```bash pip install torch transformers datasets ``` #### 下载并准备数据集 Flickr30K 是一个广泛使用的图像描述数据集,包含大约 31,000 张图片以及每张图对应的五个句子描述。可以从官方资源下载该数据集,并按照需求处理成适合输入给定框架的形式。 对于 BLIP 模型而言,建议将数据转换为 JSON 文件或其他易于加载的格式,以便于后续步骤中读取与解析。 #### 加载预训练模型 BLIP 提供了多种版本的基础架构用于不同任务;针对本案例应选择专门设计用来生成图像说明的部分。可以通过如下方式获取已有的权重文件来初始化网络结构[^2]。 ```python from transformers import BlipForConditionalGeneration, BlipProcessor processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base") model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base") ``` #### 定制化微调过程 考虑到 Flickr30K 中的具体特点,在实际操作过程中可能需要调整一些超参数设置以优化最终效果。比如学习率、批大小等都可根据实验结果灵活变动。此外,由于采用了类似于 CapFilt 方法的方式筛选高质量标注信息作为监督信号的一部分,因此也可以考虑引入类似的机制进一步提升质量[^1]。 #### 训练脚本实例 下面给出一段简单的 Python 脚本来展示整个流程的大致模样: ```python import os from datasets import load_dataset from transformers import Trainer, TrainingArguments # 加载自定义的数据集 dataset = load_dataset('json', data_files={'train': 'path_to_flickr30k_train.json'}) def preprocess_function(examples): images = examples['image'] texts = examples['text'] inputs = processor(images=images, text=texts, padding="max_length", truncation=True) return {"pixel_values": inputs["pixel_values"], "labels": inputs["input_ids"]} encoded_dataset = dataset.map(preprocess_function, batched=True) training_args = TrainingArguments( output_dir="./results", per_device_train_batch_size=8, num_train_epochs=5, logging_steps=100, save_strategy="epoch" ) trainer = Trainer( model=model, args=training_args, train_dataset=encoded_dataset["train"] ) trainer.train() ``` 通过上述代码片段可以看出,这里主要完成了几个重要环节的工作:首先是导入所需的模块;接着指定了本地存储路径下的 Flickr30K 数据源位置;再者定义了一个辅助函数来进行批量化的预处理工作;最后则是配置好训练选项之后启动迭代更新循环直至收敛为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值