VARGPT:将视觉理解与生成统一在一个模型中,北大推出支持混合模态输入与输出的多模态统一模型

简介: VARGPT是北京大学推出的多模态大语言模型,专注于视觉理解和生成任务,支持混合模态输入和高质量图像生成。

❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. 模型简介:VARGPT是北京大学推出的多模态大语言模型,专注于视觉理解和生成任务。
  2. 主要功能:支持混合模态输入输出、高效视觉生成和广泛的多模态任务。
  3. 技术原理:基于自回归框架,采用三阶段训练策略,包含专门的视觉解码器。

正文(附运行示例)

VARGPT是什么

VARGPT

VARGPT是北京大学推出的一款创新的多模态大语言模型,专注于视觉理解和生成任务。该模型基于自回归框架,将视觉生成与理解统一在一个模型中,避免了任务切换的复杂性。

VARGPT在LLaVA架构基础上进行扩展,通过next-token预测实现视觉理解,通过next-scale预测实现视觉生成,能够高效处理混合模态输入和输出。

VARGPT采用三阶段训练策略:预训练阶段学习语言和视觉特征,混合视觉指令微调阶段进一步对齐视觉和文本特征并增强指令遵循能力。这使得模型在视觉问答、推理等任务上表现出色,同时在视觉生成任务中展现出强大的能力,能够自然地生成高质量图像。

VARGPT的主要功能

  • 视觉理解与生成的统一:VARGPT在单一的自回归框架内实现视觉理解和视觉生成。通过next-token预测范式完成视觉理解任务,如视觉问答和推理,基于next-scale预测范式实现视觉生成。
  • 混合模态输入与输出:VARGPT支持文本和图像的混合模态输入,能同时输出文本和图像。在处理复杂的视觉-语言任务时更加灵活和高效。
  • 高效视觉生成:VARGPT配备了专门的视觉解码器,包含20亿参数,用于高质量的视觉生成。能根据文本指令生成图像,在自回归过程中逐步构建图像内容。
  • 多模态任务的广泛适用性:VARGPT在多个视觉中心的基准测试中表现优于其他模型,能自然地支持指令到图像的合成,适用于多种视觉-语言任务。

VARGPT的技术原理

  • 统一的自回归框架:VARGPT将视觉理解和生成任务统一在一个自回归框架内。对于视觉理解,模型采用next-token预测范式,即通过预测下一个文本标记来完成视觉问答和推理任务;对于视觉生成,采用next-scale预测范式,逐步预测图像的下一个尺度信息。使模型能在单一框架内高效处理视觉和语言任务。
  • 视觉解码器与特征映射:VARGPT包含一个专门的视觉解码器,拥有20亿参数,用于高质量的视觉生成。解码器由30个Transformer块组成,每个块包含30个注意力头,宽度为1920,采用自适应归一化(AdaLN)。
  • 多尺度标记化:为了支持视觉生成,VARGPT使用了多尺度变分自编码器(VAE)架构,类似于VAR模型。架构通过多尺度量化方案将图像分解为不同尺度的标记,词汇表大小为4090,训练数据为OpenImages数据集。
  • 混合模态输入与输出:VARGPT支持文本和图像的混合模态输入,能同时输出文本和图像。模型通过特殊的标记和提示格式,灵活地在文本和视觉模态之间切换,实现混合模态生成。
  • 三阶段训练策略
    • 预训练阶段:学习文本和视觉特征之间的映射关系。
    • 混合视觉指令微调阶段:通过构造视觉生成指令数据集,结合多轮对话指令数据集进行混合训练,增强模型在视觉问答和指令到图像合成任务中的能力。

如何运行 VARGPT

1. 环境配置

首先,设置环境:

pip3 install -r requirements.txt

2. 多模态理解

执行以下命令进行多模态理解的推理演示:

python3 inference/understanding_vargpt.py

或者执行以下代码:

import requests
from PIL import Image
import torch
from transformers import AutoProcessor, AutoTokenizer
from vargpt_llava.modeling_vargpt_llava import VARGPTLlavaForConditionalGeneration
from vargpt_llava.prepare_vargpt_llava import prepare_vargpt_llava 
from vargpt_llava.processing_vargpt_llava import VARGPTLlavaProcessor
from patching_utils.patching import patching

model_id = "VARGPT-family/VARGPT_LLaVA-v1"
prepare_vargpt_llava(model_id)

model = VARGPTLlavaForConditionalGeneration.from_pretrained(
    model_id, 
    torch_dtype=torch.float32, 
    low_cpu_mem_usage=True, 
).to(0)
patching(model)

tokenizer = AutoTokenizer.from_pretrained(model_id)
processor = VARGPTLlavaProcessor.from_pretrained(model_id)

conversation = [
    {
   
      "role": "user",
      "content": [
          {
   "type": "text", "text": "Please explain the meme in detail."},
          {
   "type": "image"},
        ],
    },
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
image_file = "./assets/llava_bench_demo.png"
print(prompt)

raw_image = Image.open(image_file)
inputs = processor(images=raw_image, text=prompt, return_tensors='pt').to(0, torch.float32)

output = model.generate(
    **inputs, 
    max_new_tokens=2048, 
    do_sample=False)

print(processor.decode(output[0], skip_special_tokens=True))

3. 文本到图像生成

执行以下命令进行文本到图像生成的推理演示:

python3 inference/generation_vargpt.py

或者执行以下代码:

import requests
from PIL import Image
import torch
from transformers import AutoProcessor, AutoTokenizer
from vargpt_llava.modeling_vargpt_llava import VARGPTLlavaForConditionalGeneration
from vargpt_llava.prepare_vargpt_llava import prepare_vargpt_llava 
from vargpt_llava.processing_vargpt_llava import VARGPTLlavaProcessor
from patching_utils.patching import patching

model_id = "VARGPT-family/VARGPT_LLaVA-v1"

prepare_vargpt_llava(model_id)

model = VARGPTLlavaForConditionalGeneration.from_pretrained(
    model_id, 
    torch_dtype=torch.float32, 
    low_cpu_mem_usage=True, 
).to(0)

patching(model)
tokenizer = AutoTokenizer.from_pretrained(model_id)
processor = VARGPTLlavaProcessor.from_pretrained(model_id)

conversation = [
    {
   
      "role": "user",
      "content": [
          {
   "type": "text", "text": "Please design a drawing of a butterfly on a flower."},
        ],
    },
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
print(prompt)

inputs = processor(text=prompt, return_tensors='pt').to(0, torch.float32)
model._IMAGE_GEN_PATH = "output.png"
output = model.generate(
    **inputs, 
    max_new_tokens=2048, 
    do_sample=False)

print(processor.decode(output[0], skip_special_tokens=True))

资源


❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日分享大模型与 AI 领域的最新开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦

相关文章
|
9月前
|
人工智能 自然语言处理 IDE
模型微调不再被代码难住!PAI和Qwen3-Coder加速AI开发新体验
通义千问 AI 编程大模型 Qwen3-Coder 正式开源,阿里云人工智能平台 PAI 支持云上一键部署 Qwen3-Coder 模型,并可在交互式建模环境中使用 Qwen3-Coder 模型。
1376 109
|
9月前
|
分布式计算 测试技术 Spark
科大讯飞开源星火化学大模型、文生音效模型
近期,科大讯飞在魔搭社区(ModelScope)和Gitcode上开源两款模型:讯飞星火化学大模型Spark Chemistry-X1-13B、讯飞文生音频模型AudioFly,助力前沿化学技术研究,以及声音生成技术和应用的探索。
759 2
|
10月前
|
文字识别 算法 语音技术
基于模型蒸馏的大模型文案生成最佳实践
本文介绍了基于模型蒸馏技术优化大语言模型在文案生成中的应用。针对大模型资源消耗高、部署困难的问题,采用EasyDistill算法框架与PAI产品,通过SFT和DPO算法将知识从大型教师模型迁移至轻量级学生模型,在保证生成质量的同时显著降低计算成本。内容涵盖教师模型部署、训练数据构建及学生模型蒸馏优化全过程,助力企业在资源受限场景下实现高效文案生成,提升用户体验与业务增长。
988 23
|
10月前
|
存储 人工智能 自然语言处理
告别文字乱码!全新文生图模型Qwen-Image来咯
通义千问团队开源了Qwen-Image,一个20B参数的MMDiT模型,具备卓越的文本渲染和图像编辑能力。支持复杂中英文文本生成与自动布局,适用于多场景图像生成与编辑任务,已在魔搭社区与Hugging Face开源。
1774 2
|
8月前
|
人工智能 搜索推荐 程序员
当AI学会“跨界思考”:多模态模型如何重塑人工智能
当AI学会“跨界思考”:多模态模型如何重塑人工智能
1158 120
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
1186 13
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-LiveTranslate-全模态同传大模型
|
9月前
|
自然语言处理 机器人 图形学
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型
腾讯混元图像3.0,真的来了——开源,免费开放使用。 正式介绍一下:混元图像3.0(HunyuanImage 3.0),是首个工业级原生多模态生图模型,参数规模80B,也是目前测评效果最好、参数量最大的开源生图模型,效果可对…
1838 2
腾讯混元图像3.0正式开源发布!80B,首个工业级原生多模态生图模型

热门文章

最新文章