MLMs之OmniGen:OmniGen(统一图像生成模型)的简介、安装和使用方法、案例应用之详细攻略
导读:这篇论文介绍了OmniGen,一个用于统一图像生成的扩散模型。论文的核心要点可以总结如下:
>> 背景痛点:
● 图像生成领域的碎片化: 现有的图像生成模型通常专注于特定任务(例如文本到图像生成、图像编辑等),需要为不同任务设计和训练不同的模型或模块(例如ControlNet, IP-Adapter等),导致模型复杂且难以维护。 这与大型语言模型(LLM)在自然语言处理领域的统一性形成鲜明对比,LLM能够在一个框架内处理各种语言任务。
● 额外预处理步骤的繁琐: 许多图像生成任务需要额外的预处理步骤,例如人脸检测、姿态估计、图像分割等,增加了使用门槛和计算成本。
● 缺乏通用性: 现有模型缺乏对各种图像生成任务的通用理解和生成能力,难以处理未见过的任务和领域。
>> 具体的解决方案:OmniGen旨在创建一个统一的图像生成框架,解决上述痛点。它是一个基于扩散模型的框架,其核心设计理念是:
● 统一性: OmniGen能够处理多种图像生成任务,包括文本到图像生成、图像编辑、主题驱动生成、视觉条件生成以及一些经典的计算机视觉任务(例如边缘检测、人体姿态识别),所有这些都集成在一个模型中。
● 简洁性: OmniGen的架构非常简洁,只包含一个VAE和一个预训练的大型Transformer模型,无需额外的编码器(例如CLIP编码器),简化了模型结构和使用流程。
● 知识迁移: 通过在统一的格式下进行训练,OmniGen能够有效地跨不同任务进行知识迁移,处理未见过的任务和领域,并展现出一些新兴的能力。
>> 核心思路步骤:
● 数据集构建:论文构建了一个大型的多任务图像生成数据集X2I,包含各种图像生成任务的数据,并将其标准化为统一的格式。 数据集包含文本到图像、多模态到图像(包括常见混合模态提示、主题驱动图像生成和计算机视觉任务)、少量样本到图像等数据。
● 模型架构:OmniGen采用VAE提取图像的连续视觉特征,并使用预训练的Transformer模型(基于Phi-3)根据输入条件生成图像。 它使用了一种改进的注意力机制,能够处理文本和图像的任意交错输入。
● 训练策略:采用修正流(rectified flow)方法进行训练,并通过逐步增加图像分辨率来提高图像质量。针对图像编辑任务,论文提出了一种加权损失函数,以解决模型简单复制输入图像的“捷径”问题。
● 推理过程:推理过程利用流匹配方法,迭代多次生成最终的图像。 利用kv-cache机制加速推理。
>> 优势:
● 统一性: 在一个框架内处理多种图像生成任务,避免了使用多个模型的需要。
● 简洁性: 模型架构简洁,易于使用和部署。
● 高效性: 参数利用率高,推理速度快。
● 通用性: 能够处理未见过的任务和领域,并展现出一些新兴的能力,例如任务组合、隐式任务组合和少样本学习。
● 端到端工作流程: 简化了图像生成的工作流程,无需额外的预处理步骤和中间模型。
>> 结论和观点:
● OmniGen是首个尝试构建通用图像生成模型的工作,虽然取得了显著进展,但仍存在一些局限性,例如对长文本和复杂场景的处理能力有限,生成的图像可能存在细节错误等。
● 多任务学习能够提高模型的泛化能力,并促进新兴能力的涌现。
● OmniGen展现出一定的推理能力和少样本学习能力。
● 逐步细化图像生成过程(类似于人类绘画过程)是一个有前景的研究方向。
● 论文开源了相关资源,旨在促进该领域的进一步发展。
总而言之,OmniGen 提出了一种新的统一图像生成框架,在一定程度上解决了图像生成领域任务碎片化和模型复杂性的问题,展现了其在多任务学习和知识迁移方面的潜力。 但该模型仍处于发展阶段,未来需要进一步改进以提高其鲁棒性和处理更复杂任务的能力。
目录
相关文章
《OmniGen: Unified Image Generation》翻译与解读
OmniGen的简介
1、新闻
2、能干什么
通过 OmniGen 灵活控制图像生成
引用表情生成
OmniGen的安装和使用方法
1、通过GitHub安装
2、使用OmniGenPipeline示例
3、使用Gradio Demo (本地):
4、使用Google Colab:
5、微调:
6、推理
OmniGen的案例应用
1、在线测试使用
相关文章
《OmniGen: Unified Image Generation》翻译与解读
地址 | 论文地址:https://arxiv.org/abs/2409.11340 |
时间 | 2024年9月17日 |
作者 | 北京市人工智能研究院 |
摘要 | 在这项工作中,我们介绍了OmniGen,这是一种用于统一图像生成的新型扩散模型。与流行的扩散模型(如Stable Diffusion)不同,OmniGen不再需要处理多种控制条件的额外模块(如ControlNet或IP-Adapter)。OmniGen具有以下特点: 1) 统一性:OmniGen不仅具有文本到图像生成的能力,还内在地支持其他下游任务,如图像编辑、基于主题的生成和视觉条件生成。此外,OmniGen可以通过将它们转换为图像生成任务来处理经典的计算机视觉任务,例如边缘检测和人体姿态识别。 2) 简单性:OmniGen的架构高度简化,无需额外的文本编码器。此外,它比现有的扩散模型更易于使用,允许通过指令完成复杂的任务,无需额外的预处理步骤(例如人体姿态估计),从而大大简化了图像生成的工作流程。 3) 知识转移:通过采用统一的格式进行学习,OmniGen能够在不同的任务之间有效地转移知识,管理未见过的任务和领域,并展现出新的能力。 我们还探索了该模型的推理能力以及链式思考机制的潜在应用。这项工作代表了通用图像生成模型的首次尝试,但仍存在一些尚未解决的问题。我们将在此 https URL 上开放相关资源,以促进该领域的进步。 |
OmniGen的简介
2024年10月22日发布,OmniGen是一个统一的图像生成模型,能够根据多模态提示生成各种各样的图像。其设计目标是简洁、灵活和易于使用。该模型旨在避免现有图像生成模型需要加载多个额外网络模块(如ControlNet、IP-Adapter、Reference-Net等)以及进行额外预处理步骤(例如人脸检测、姿态估计、裁剪等)的复杂性。OmniGen希望实现类似于GPT在语言生成中的方式,即通过任意多模态指令直接生成各种图像,无需额外的插件和操作。
OmniGen提供了一个统一的框架,简化了图像生成流程,并支持多种多样的图像生成任务。 通过提供的代码和文档,用户可以方便地安装、使用和微调该模型,以满足不同的图像生成需求。
虽然由于资源限制,OmniGen仍有改进空间,但它能够执行多种任务,包括但不限于文本到图像生成、主题驱动生成、身份保持生成、图像编辑和图像条件生成。OmniGen能够根据文本提示自动识别输入图像中的特征(例如所需物体、人体姿态、深度映射)。 项目作者也鼓励用户反馈,以帮助改进模型。
GitHub地址:https://github.com/VectorSpaceLab/OmniGen
1、新闻
2024-11-03:✨✨添加了复制演示和 API:复制
2024-10-28:✨✨我们发布新版本的推理代码,优化了内存使用和时间成本。您可以参考docs/inference.md了解详细信息。
2024-10-22:����我们发布了 OmniGen 的代码。推理:docs/inference.md训练:docs/fine-tuning.md
2024-10-22:����我们发布了 OmniGen 的第一个版本。模型权重:Shitao/OmniGen-v1 HF 演示:��
2、能干什么
通过 OmniGen 灵活控制图像生成
引用表情生成
您可以输入多幅图像,并使用简单、通用的语言来引用图像中的对象。OmniGen 可以自动识别每幅图像中的必要对象,并根据这些对象生成新图像。无需进行图像裁剪或人脸检测等额外操作。
OmniGen的安装和使用方法
1、通过GitHub安装
首先克隆GitHub仓库:
git clone https://github.com/staoxiao/OmniGen.git
cd OmniGen
pip install -e .
建议创建一个新的conda环境以避免冲突:
# 创建一个python 3.10.12的conda环境 (你也可以使用virtualenv)
conda create -n omnigen python=3.10.12
conda activate omnigen
安装PyTorch(根据你的CUDA版本选择合适的版本):
pip install torch==2.3.1+cu118 torchvision --extra-index-url https://download.pytorch.org/whl/cu118
最后安装OmniGen:
pip install -e .
2、使用OmniGenPipeline示例
from OmniGen import OmniGenPipeline
pipe = OmniGenPipeline.from_pretrained("Shitao/OmniGen-v1")
# Note: Your local model path is also acceptable, such as 'pipe = OmniGenPipeline.from_pretrained(your_local_model_path)', where all files in your_local_model_path should be organized as https://huggingface.co/Shitao/OmniGen-v1/tree/main
## Text to Image
images = pipe(
prompt="A curly-haired man in a red shirt is drinking tea.",
height=1024,
width=1024,
guidance_scale=2.5,
seed=0,
)
images[0].save("example_t2i.png") # save output PIL Image
## Multi-modal to Image
# In the prompt, we use the placeholder to represent the image. The image placeholder should be in the format of <img><|image_*|></img>
# You can add multiple images in the input_images. Please ensure that each image has its placeholder. For example, for the list input_images [img1_path, img2_path], the prompt needs to have two placeholders: <img><|image_1|></img>, <img><|image_2|></img>.
images = pipe(
prompt="A man in a black shirt is reading a book. The man is the right man in <img><|image_1|></img>.",
input_images=["./imgs/test_cases/two_man.jpg"],
height=1024,
width=1024,
guidance_scale=2.5,
img_guidance_scale=1.6,
seed=0
)
images[0].save("example_ti2i.png") # save output PIL image
如果内存不足,可以设置offload_model=True。如果输入多张图像时推理时间过长,可以减小max_input_image_size。更多信息请参考docs/inference.md#requiremented-resources。
3、使用Gradio Demo (本地):
我们在Huggingface中构建了一个在线演示。
对于本地 gradio 演示,您需要安装pip install gradio spaces
,然后可以运行
pip install gradio spaces
python app.py
4、使用Google Colab:
!git clone https://github.com/staoxiao/OmniGen.git
%cd OmniGen
!pip install -e .
!pip install gradio spaces
!python app.py --share
5、微调:
提供训练脚本train.py用于微调OmniGen。 docs/fine-tuning.md包含更多细节,例如完整的微调过程。 文档中提供了一个使用LoRA微调的玩具示例。
accelerate launch --num_processes=1 train.py \
--model_name_or_path Shitao/OmniGen-v1 \
--batch_size_per_device 2 \
--condition_dropout_prob 0.01 \
--lr 1e-3 \
--use_lora \
--lora_rank 8 \
--json_file ./toy_data/toy_subject_data.jsonl \
--image_path ./toy_data/images \
--max_input_length_limit 18000 \
--keep_raw_resolution \
--max_image_size 1024 \
--gradient_accumulation_steps 1 \
--ckpt_every 10 \
--epochs 200 \
--log_every 1 \
--results_dir ./results/toy_finetune_lora
6、推理
项目提供了inference.ipynb和inference_demo.ipynb两个Jupyter Notebook文件,包含更多图像生成的示例。 docs/inference.md包含更详细的推理参数说明。
OmniGen的案例应用
OmniGen可以进行多种图像生成任务,例如:
>> 文本到图像生成: 直接根据文本描述生成图像。
>> 多模态图像生成: 结合文本和图像进行图像生成,例如根据文本描述和参考图像生成新的图像。 模型能够自动识别参考图像中的关键特征并将其整合到新生成的图像中。
>> 图像编辑: 对现有图像进行修改和编辑。
>> 身份保持生成: 在生成新图像的同时保持特定人物或物体的身份特征。
>> 参考表达生成: 输入多张图像和简单的语言描述,OmniGen能够自动识别图像中的目标并据此生成新图像,无需额外的操作如图像裁剪或人脸检测。
1、在线测试使用
测试地址:https://huggingface.co/spaces/Shitao/OmniGen
<img><|image_1|></img>中的女人在人群中开心地挥手
一个男人和一个满脸皱纹的短发女人站在图书馆的书架前。男士是<img><|image_1|></img>中间的男士,女士是<img><|image_2|></img>中年龄最大的女士。