点击下方卡片,关注「魔方AI空间」公众号
简介:
一种新的统一模型,即 Show-o,能够通过混合自回归和扩散建模同时处理多模态理解和生成任务。
创新性地在单个transformer中结合了自回归和(离散)扩散建模,分别处理文本和图像。 作为统一模型,Show-o 在多模态理解和生成基准测试中表现出与个别基线模型相当甚至更好的性能。 Show-o天然支持各种下游应用,如基于文本的修复和外推,无需任何微调。此外,它还展示了混合模态生成的潜力。 探索了不同类型表示(离散或连续)对多模态理解性能的影响,为未来统一模型的设计提供了系统性的见解。
项目主页:https://showlab.github.io/Show-o/
引 言
“一个人能做的很少;我们一起可以做很多事情。” ——海伦·凯勒
在过去的几年里,多模态智能的两个关键支柱:理解和生成(如图 1 所示)取得了重大进展。对于多模态理解,像 LLaVA 这样的多模态大语言模型 (MLLMs) 在视觉问答 (VQA) 等视觉语言任务中表现出卓越的能力。
对于视觉生成的另一个支柱,去噪扩散概率模型(DDPM)已经彻底改变了传统的生成范式,在文本到图像 / 视频生成方面实现了前所未有的性能。
图 1:仅理解、仅生成和统一(理解和生成)模型之间的特征比较。“Vision” 和 “Language” 表示来自特定输入模式的表示。在这种情况下,“Diffusion” 代表连续和离散的 diffusion。
研究问题:这篇文章要解决的问题是如何用一个单一的Transformer模型同时处理多模态理解和生成任务。现有的方法通常将理解和生成任务分开处理,使用不同的模型来分别处理视觉和文本数据。
研究难点:如何将自回归和扩散建模这两种不同的技术集成到一个单一的Transformer网络中;如何处理离散文本标记和连续图像表示之间的显著差异;如何在单一模型中有效地训练这两种不同的建模技术。 相关工作:该问题的研究相关工作有:多模态大语言模型(MLLMs)在视觉问答等任务中的出色表现;去噪扩散概率模型(DDPMs)在文本到图像生成任务中的突破;以及最近的一些尝试将这些领域专家模型组合成一个统一系统的探索性工作。
方法概述
图 2:Show-o 概述。输入数据(无论其模态如何)都会被标记化,然后提示到格式化的输入序列中。Show-o 通过全神贯注在(离散)去噪扩散建模中用因果注意力和图像词元自回归地处理文本词元,然后生成所需的输出。具体来说,Show-o 能够处理图像描述、视觉问答、文本到图像生成、文本引导修复/外推和混合模态生成。
实验
数据集:使用了三种类型的数据来训练Show-o:纯文本数据(RefinedWeb),带类名的图像数据(ImageNet-1K),以及图像-文本对数据(CC12M、SA1B、LAION-aesthetics-12M)。
评估细节:在多模态理解基准(POPE、MME、Flickr30k、VQAv2、GQA、MMMU)上评估Show-o的多模态理解能力。在生成任务中,使用Fréchet Inception Distance(FID)在MSCOCO数据集上评估生成质量,使用GenEval基准评估文本到图像生成的能力。
实现细节:初始阶段,使用RefinedWeb、35M图像-文本对和ImageNet-1K进行联合训练,分别进行语言建模、图像字幕生成和类条件图像生成。随后,使用35M图像-文本对进行文本到图像生成的训练。最后,使用高质量的图像-文本对进行微调。
效果演示
多模态理解:在POPE、MME、Flickr30k和VQAv2基准上,Show-o的表现与基线模型LLaVA-v1.5-Phi-1.5相当,甚至在某些基准上表现更好。与仅理解模型(如InstructBLIP、Qwen-VL-Chat、mPLUG-Owl2)相比,Show-o在大多数基准上表现竞争甚至更好。
生成能力:在MSCOCO 30K数据集上,Show-o的零样本FID为9.24,优于许多生成模型,且参数数量仅为1.3B。在GenEval基准上,Show-o在所有六个指标上的表现均优于类似大小的模型(如LDM),显示出其生成能力的优越性。
文本引导的图像修复和外推:Show-o能够在不需要微调的情况下自然地支持基于文本的图像修复和外推任务,展示了其在下游应用中的优势。
混合模态生成:在GenHowTo数据集上,Show-o能够根据文本描述和视频关键帧生成一致的混合模态内容,展示了其在长视频生成中的潜力。
项目部署:
安装基础环境
pip3 install -r requirements.txt
登录 wandb 账户
wandb login <your wandb keys>
模型推理
推理演示,在 wandb 上可以查看结果
多模态理解推理演示:
python3 inference_mmu.py config=configs/showo_demo_w_clip_vit.yaml \
mmu_image_root=./mmu_validation question='Please describe this image in detail. *** Do you think the image is unusual or not?'
文本到图像生成的推理演示
python3 inference_t2i.py config=configs/showo_demo.yaml \
batch_size=1 validation_prompts_file=validation_prompts/showoprompts.txt \
guidance_scale=1.75 generation_timesteps=18 \
mode='t2i'
文本引导修复推理演示
python3 inference_t2i.py config=configs/showo_demo.yaml \
batch_size=1 \
guidance_scale=1.75 generation_timesteps=16 \
mode='inpainting' prompt='A blue sports car with sleek curves and tinted windows, parked on a bustling city street.' \
image_path=./inpainting_validation/bus.jpg inpainting_mask_path=./inpainting_validation/bus_mask.webp
文本引导外推推理演示
python3 inference_t2i.py config=configs/showo_demo.yaml \
batch_size=1 \
guidance_scale=1.75 generation_timesteps=16 \
mode='extrapolation' extra_direction='left *** left *** left *** right *** right *** right' offset=0 prompt='a serene natural landscape featuring a clear, blue lake surrounded by lush green trees. *** a serene natural landscape featuring a clear, blue lake surrounded by lush green trees. *** a serene natural landscape featuring a clear, blue lake surrounded by lush green trees. *** a serene natural landscape featuring a clear, blue lake surrounded by lush green trees. *** a serene natural landscape featuring a clear, blue lake surrounded by lush green trees. *** a serene natural landscape featuring a clear, blue lake surrounded by lush green trees.' \
image_path=./inpainting_validation/alpine_lake.jpg
训练模型
准备训练数据并更改 configs/xx.yaml
中的数据路径
训练过程基于 accelerate
。请确保配置accelerate
以进行分布式训练。在下面提供了在单个 GPU 或多个 GPU 上进行(分布式)训练的配置示例。
├── accelerate_configs/
| ├── multi_nodes (6x8 GPUs)
| | ├—— ...
| ├── 1_gpu.yaml
| └── 8_gpu_deepspeed_zero2.yaml
第 1 阶段 - 在 ImageNet-1K 数据集上进行预训练
在configs/showo_pretraining_stage1.yaml
中将数据路径更改为 ImageNet-1K。请注意,我们使用内部包来处理 RefinedWeb 数据集,必须在 training/train.py
中手动注释与语言建模相关的代码部分,或者编写新的 dataloder。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train.py config=configs/showo_pretraining_stage1.yaml
训练后,checkpoint
文件夹的结构如下:
├── show-o-training-stage1/
| ├── ...
| ├── checkpoint-500000
| └── config.yaml
只需为阶段 2 创建一个新的输出文件夹(在 yaml 配置中编辑),将阶段 1 的最新checkpoint
复制到此文件夹,并将其重命名为 checkpoint-0
。它将自动恢复以进行下一阶段的训练。
├── show-o-training-stage2/
| └── checkpoint-0
第 2 阶段 - 对 Image-Text 数据集进行预训练。
默认数据加载器基于 WebDataset
。更改configs/showo_pretraining_stage2.yaml
中的数据路径。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train.py config=configs/showo_pretraining_stage2.yaml
第 3 阶段 - 对高质量 Image-Text 数据集进行预训练。
更改数据 configs/showo_pretraining_stage3.yaml
路径。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train.py config=configs/showo_pretraining_stage3.yaml
对 LLaVA 数据集 (llava-pretrain) 进行指令优化。更改llava/llava_data_vq_unified.py
中的数据路径。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train.py config=configs/showo_instruction_tuning_1.yaml
LLaVA 数据集上的指令优化 (llava-tuning)。更改llava/llava_data_vq_unified.py
中的数据路径。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train.py config=configs/showo_instruction_tuning_2.yaml
使用 CLIP-ViT 对 LLaVA 数据集 (llava-pretrain) 进行指令调整。更改 llava/llava_pretrain_data.py
中的数据路径。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train_w_clip_vit.py config=configs/showo_instruction_tuning_1_w_clip_vit.yaml
使用 CLIP-ViT 对 LLaVA 数据集(llava-tuning)进行指令调整。更改 llava/llava_instuct_data.py
中的数据路径。
accelerate launch --config_file path/to/your/accelerate_config --main_process_port=8888 training/train_w_clip_vit.py config=configs/showo_instruction_tuning_2_w_clip_vit.yaml
提炼关键问题:
问题1:Show-o 模型如何在单一Transformer中融合自回归和扩散建模?
Show-o 模型通过创新地将自回归和离散扩散建模融合到一个单一的Transformer中实现了这一目标。具体来说,文本数据被表示为离散 token 并使用自回归方式进行建模,类似于大语言模型(LLMs)。而图像数据则被表示为离散token,并通过离散去噪扩散过程进行建模。
为了实现这种融合,Show-o 模型引入了一个全注意力机制(Omni-Attention),该机制能够根据输入序列的格式自适应地混合和处理文本和图像令牌。在处理文本时,采用因果注意力;在处理图像时,采用全注意力。这种设计使得Show-o 模型能够灵活地处理不同的模态和数据类型。
问题2:Show-o 模型在多模态理解任务中的表现如何?与现有的其他模型相比有何优势?
在多模态理解任务中,Show-o 模型的表现与基线模型LLaVA-v1.5-Phi-1.5相当,甚至在某些基准上表现更好。与仅理解模型(如InstructBLIP、Qwen-VL-Chat、mPLUG-Owl2)相比,Show-o模型在大多数基准上表现竞争甚至更好。例如,在POPE、MME、Flickr30k和VQAv2基准上,Show-o模型展示了出色的多模态理解能力。
此外,Show-o模型还展示出在处理复杂任务和罕见情况下的潜力,进一步证明了其在多模态理解方面的优势。
问题3:Show-o 模型在图像生成任务中的表现如何?与其他生成模型相比有何改进?
在图像生成任务中,Show-o 模型在MSCOCO 30K数据集上的零样本FID为9.24,优于许多生成模型,如GLIDE和DALL·E 2。与类似的生成模型(如LDM、SDv1.5、PixArt、Imagen、RAPHAEL)相比,Show-o模型在生成质量和多样性方面表现出色。例如,在GenEval基准上,Show-o模型在所有六个维度上的表现均优于类似大小的模型(如LDM),并且在某些方面甚至超过了更大的模型(如SDXL和SD3)。此外,Show-o模型在生成图像时所需的采样步骤较少,大约是其他自回归模型的四分之一,进一步展示了其在生成效率和效果方面的优势。
参考文献:
SHOW-O: ONE SINGLE TRANSFORMER TO UNIFY MULTIMODAL UNDERSTANDING AND GENERATION
技术交流
加入「AIGCmagic社区」群聊,一起交流讨论,涉及 AI视频、AI绘画、Sora技术拆解、数字人、多模态、大模型、传统深度学习、自动驾驶等多个不同方向,可私信或添加微信号:【m_aigc2022】,备注不同方向邀请入群!!
推荐阅读
• 半年耕耘,《AIGCmagic社区知识星球》重磅升级!限量活动中!
• MiniCPM-V 2.0: 具备领先OCR和理解能力的高效端侧多模态大模型