一键修改图片,例如风格、背景、颜色、抠图、角色动作表情或者编辑某一元素。
一键组合多张图片中的物体、场景、人物。
上面这些功能,最近发布的 OmniGen2 都能帮你轻松做到。
它能够在自然语言的prompt下帮助用户精准编辑图像,一句话P图已经成为现实。
OmniGen2 也因为其体现出来的接近 PhotoShop 级别的图像编辑能力,被网友戏称为 PhotoShop 杀手,并在外网上狂揽了一波好评。
一、项目简介
OmniGen2 来自北京人工智能学院的 VectorSpaceLab 团队, 作为一个 7B 参数级别的多模态生成模型,旨在为不同的生成任务提供统一的解决方案,包括文本到图像、图像编辑和上下文生成。
主要在四个功能方面具有核心竞争力:
视觉理解 :继承了 Qwen-VL-2.5 基础的强大图像内容解释和分析能力。
文本到图像生成 :从文本提示创建高保真且美观的图像。
指令导向的图像编辑 :以高精度执行复杂的、基于指令的图像修改,在开源模型中实现最先进的性能。
上下文生成 :一种多功能功能,可处理和灵活组合各种输入(包括人类、参考对象和场景),以产生新颖且连贯的视觉输出。
OmniGen2 目前已经集成到 ComfyUI 中可以本地运行。
此外,项目完全开源。目前训练代码、数据集和数据构建管道暂时还未发布,但是 coming soon。
项目地址:
https://vectorspacelab.github.io/OmniGen2/
Github:
https://github.com/VectorSpaceLab/OmniGen2
Hugging Face:
https://huggingface.co/OmniGen2/OmniGen2
二、算法原理介绍
关于数据集
我们先来看一下它使用的数据集。对于多模态理解任务,OmniGen2 使用的是 LLaVA-OneVision 提供的数据集。对于 T2I 生成。此外,还整合了 1000 万张专有图像,为此使用了 Qwen2.5-VL-72B 生成合成注释。对于图像编辑任务,使用的是公开可用的数据集,包括 SEED-Data-Edit 、UltraEdit 、OmniEdit 、PromptFix 和 ImgEdit 。
模型设计
2024年发布的 OmniGen v1 采用流线型 Transformer 架构,无需额外的插件或预处理器即可处理各种图像生成任务。
研究观察中团队发现,简单的参数共享不足以同时处理自回归文本建模和基于扩散的图像建模。为了解决这个问题,OmniGen2 与 OmniGen v1 不同,采用了两种不同的文本和图像模态解码路径,利用非共享参数和解耦的图像分词器。
此外,OmniGen2 使用多模态大型语言模型 (MLLM) 来处理文本和视觉输入,采用单独的 transformer 架构进行自回归和扩散。使用 ViT 对图像进行编码以输入到文本转换器中,并采用 VAE 为扩散转换器对图像进行编码。模型架构如下所示:
在 OmniGen2 中,采用了将扩散过程解耦并随机初始化其参数。利用 MLLM 生成的多模态交错条件的隐藏状态,而不是依赖一组固定的可学习查询标记作为扩散解码器的输入。并且选择将 VAE 专门用作扩散解码器的输入,而不是将它们集成到 MLLM 本身中。这种策略保留了 MLLM 的架构简单性,并保持了其多模态理解能力,而无需进行大量的重新训练。
多模态大型语言模型
OmniGen2 利用基础 MLLM 转换器来处理文本和视觉输入。对于文本生成任务,使用自回归语言头,而图像生成是通过专用的扩散模块完成的。transformer 主干由 Qwen2.5-VL-3B 初始化。并引入了一个特殊标记 "<|img|>",以明确指示输出序列中的图像生成。遇到此 Token 后,模型会触发 diffusion decoder 来合成相应的图像。MLLM 生成的隐藏状态用作扩散解码器的条件输入。然而,由于这些隐藏状态可能缺乏详细的视觉信息,用从输入图像中提取的 VAE 衍生特征进一步增强了解码器。然后,扩散解码器使用整流(RF)方法生成图像。
扩散变压器
OmniGen2 采用了一个基础的扩散变压器架构,直接连接来自 MLLM、VAE 和噪声的特征,允许共同关注这些模态。在 Lumina-Image 2.0 之后,多个输入条件首先由精简器网络处理,以确保对齐,然后再传递到转换器层。扩散解码器由 32 层组成,隐藏大小为 2520,产生大约 40 亿个参数。由于明确集成了 VAE 特征,与 MLLM 中的图像对应的隐藏状态变得不那么重要。为了减少计算开销,丢弃了 MLLM 中与图像相关的隐藏状态,只保留与文本标记关联的状态。此外,在扩散变压器中采用了 3D 旋转位置嵌入。
受到多模态位置嵌入设计最新进展的启发,该模型还引入了一种称为 Omni-RoPE 的特殊位置嵌入类型,以帮助它理解图像和文本中不同元素的位置,尤其是用于编辑和上下文生成。
训练策略
MLLM 使用 Qwen2.5-VL1 进行初始化,其大部分参数在训练过程中保持冻结,以保持其多模态理解能力。仅更新新引入的特殊标记 "<|img|>"。扩散模型是从头开始训练的,最初是在 T2I 生成任务上训练,然后使用混合任务训练策略来适应多个目标。在反射训练阶段,所有模型参数都被解冻,允许模型生成反射文本描述并迭代优化图像输出。
实验评估
OmniGen2 采用了 OmniContext 基准测试来对模型输出的图像进行评估,主要是评估模型在不同上下文中保持主体保真度的能力。
为了有效地评估上下文图像生成能力并提高评估结果的可解释性,采用了最先进的多模态大语言模型 GPT-4.1 来评估生成的输出,如下图所示。OmniContext 包含三个指标:提示跟随 (PF)、主题一致性 (SC) 和总分,总分计算为 PF 和 SC 分数的几何平均值。遵循 VIEScore 的既定方法,利用 GPT-4.1 生成 0-10 分制的分数,同时提供详细的理由来证明其评估的合理性。其中涵盖了四个关键领域:视觉理解、文本到图像生成、图像编辑和上下文生成。结果表明,OmniGen2 在所有领域的强劲性能之间实现了显著的平衡,尤其是在上下文生成方面表现出色。
三、快速上手教程
接着,让我们一起快速过一遍官方教程。
环境设置
推荐设置:
# 1. Clone the repo
git clone git@github.com:VectorSpaceLab/OmniGen2.git
cd OmniGen2
# 2. (Optional) Create a clean Python environment
conda create -n omnigen2 python=3.11
conda activate omnigen2
# 3. Install dependencies
# 3.1 Install PyTorch (choose correct CUDA version)
pip install torch==2.6.0 torchvision --extra-index-url https://download.pytorch.org/whl/cu124
# 3.2 Install other required packages
pip install -r requirements.txt
# Note: Version 2.7.4.post1 is specified for compatibility with CUDA 12.4.
# Feel free to use a newer version if you use CUDA 12.6 or they fixed this compatibility issue.
# OmniGen2 runs even without flash-attn, though we recommend install it for best performance.
pip install flash-attn==2.7.4.post1 --no-build-isolation
对于中国大陆用户:
# Install PyTorch from a domestic mirror
pip install torch==2.6.0 torchvision --index-url https://mirror.sjtu.edu.cn/pytorch-wheels/cu124
# Install other dependencies from Tsinghua mirror
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# Note: Version 2.7.4.post1 is specified for compatibility with CUDA 12.4.
# Feel free to use a newer version if you use CUDA 12.6 or they fixed this compatibility issue.
# OmniGen2 runs even without flash-attn, though we recommend install it for best performance.
pip install flash-attn==2.7.4.post1 --no-build-isolation -i https://pypi.tuna.tsinghua.edu.cn/simple
运行示例:
# Visual Understanding
bash example_understanding.sh
# Text-to-image generation
bash example_t2i.sh
# Instruction-guided image editing
bash example_edit.sh
# In-context generation
bash example_in_context_generation.sh
本地运行 demo :
# for only generating image
pip install gradio
python app.py
# Optional: Share demo with public link (You need to be able to access huggingface)
python app.py --share
# for generating image or text
pip install gradio
python app_chat.py
使用技巧
要使用 OmniGen2 获得最佳结果,可以根据特定用例调整以下关键超参数。
text_guidance_scale
:控制输出对文本提示 (Classifier-Free Guidance) 的严格遵守程度。image_guidance_scale
:控制最终图像与输入参考图像的相似程度。max_pixels
:当图像的总像素数(宽度×高度)超过此限制时,自动调整图像的大小,同时保持其长宽比。这有助于管理性能和内存使用情况。默认值为 1024*1024。如果遇到内存问题,可以减小此值。max_input_image_side_length
:输入图像的最大边长。negative_prompt
:告诉模型您不想在图像中看到的内容。 示例:模糊、画质低、文本、水印。 提示:为了获得最佳效果,请尝试使用不同的否定提示。如果不确定,只需使用默认的否定提示。enable_model_cpu_offload
: 将 VRAM 使用量减少近 50%,对速度的影响可以忽略不计。 这是通过在不使用模型权重时将模型权重卸载到 CPU RAM 来实现的。enable_sequential_cpu_offload
:将 VRAM 使用量降至 3GB 以下,但代价是性能明显降低。 其工作原理是将模型卸载到子模块中,然后根据需要按顺序将它们加载到 GPU 上。cfg_range_start
、cfg_range_end
:定义应用 CFG 的时间步长范围。减少cfg_range_end
可以显著减少推理时间,而对质量的影响可以忽略不计。scheduler
:在[euler, dpmsolver++]
之间进行选择。默认值为euler
。为了以更少的步骤获得更好的性能,请尝试dpmsolver++
。num_inference_step
:ODE 求解器的离散化步数。默认值为 50。
提高生成质量的一些建议:
使用高质量图像
提供清晰的图像,最好具有大于 512×512 像素的分辨率。 小或模糊的输入将导致低质量的输出。
具体说明
清楚地描述要更改的内容以及您希望如何更改 。
优先英语:模型目前在英语提示下表现最佳。
更改说明以增强主题的一致性。当生成的图像与输入图像对齐不佳时,您可以尝试以下方法来提高主体一致性:
使用尺寸较大的图像,以及人物在画面中占据较大比例的图像。 增加 Image Guidance Scale(图像引导比例 ),例如增加到 3.0。权衡可能是图像中轻微的过度曝光或油腻外观。 使用单个输入图像时 ,您可以尝试使用以下提示模板:"她/他 ...,保持她/他的面部特征、发型和其他属性。 增加参数 -- Number of images per prompts(每个提示的图像数量)以生成更多输出,从而有更好的机会找到具有更强主题一致性和更令人满意结果的 Images。 较长的提示通常比较短的提示产生更好的结果。 更详细的场景和角色交互描述可以提供其他好处。
对于上下文编辑(基于多个图像进行编辑),我们建议使用以下提示格式:"编辑第一个图像:添加/替换([对象]替换为)第二个图像中的 [对象]。[目标图像的描述]。例如:"编辑第一张图片:添加第二张图片中的男人。男人在厨房里和一个女人说话"。目标图像的描述应尽可能详细。
资源要求
OmniGen2 本身需要 NVIDIA RTX 3090 或具有大约 17GB VRAM 的同等 GPU。对于 VRAM 较少的设备,您可以启用 CPU Offload 卸载来运行模型。
性能提示 :要提高推理速度,请考虑减小 cfg_range_end
参数。在合理范围内,这对输出质量的影响可以忽略不计。
OmniGen2 在 A800 GPU 上的推理性能:
四、最后一句
作为一个开源项目,OmniGen2 为探索可控和个性化生成式 AI 提供了强大且资源高效的基础,感兴趣的话就赶紧去试试吧~
>/ 本期作者:Tashi & JackCui
>/ JackCui:AI领域从业者,毕业于东北大学,大厂算法工程师,热爱技术分享。
没有评论:
发表评论