MLMs之OmniGen:OmniGen(统一图像生成模型)的简介、安装和使用方法、案例应用之详细攻略

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

时间

2024917

作者

北京市人工智能研究院

摘要

在这项工作中,我们介绍了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>中年龄最大的女士。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/912210.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT中 update()函数无法实时调用 paintEvent

QT中 update()函数无法实时调用 paintEvent&#xff01; 在QT中&#xff0c;update()函数用于标记一个窗口区域为“需要重绘”。当调用update()后&#xff0c;QT会在合适的时候调用paintEvent()来重绘这个区域。然而&#xff0c;update()不会立即调用paintEvent()&#xff0c;…

OpenCV视觉分析之目标跟踪(12)找到局部的最大值函数meanShift()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在反向投影图像上找到一个对象。 meanShift 是一种用于图像处理和计算机视觉领域的算法&#xff0c;特别适用于目标跟踪、图像分割等任务。该算…

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上&#xff0c;给定无人车起始点和目标点后&#xff0c;按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率&#xff0c;减少交…

杂谈:业务说的场景金融是什么?

引言&#xff1a;市场格局的转变 在供应短缺的年代&#xff0c;是典型的卖方市场。为了保证稳定供货&#xff0c;买方会提前一段时间下单&#xff0c;也几乎没什么议价能力。卖方只需等着接单就行。 现在很多领域的供应商数量越来越多&#xff0c;而且随着互联网的普及&#…

Chrome扩展是程序员做独立开发的绝佳入场机会

一、开发成本低&#xff0c;难度低 简便灵活&#xff1a;相比开发移动应用&#xff0c;浏览器扩展的开发过程更加简便灵活&#xff0c;更适合初学者。省时省力&#xff1a;通过扩展&#xff0c;你可以修改现有网站的功能&#xff0c;无需从零开始搭建应用&#xff0c;大大节省…

Aop+自定义注解实现数据字典映射

数据字典 Web项目开发中&#xff0c;字典表的一般都会存在&#xff0c;主要用来给整个系统提供基础服务。 比如男女性别的类型可以使用0和1来进行表示&#xff0c;在存储数据和查询数据的时候&#xff0c;就可以使用字典表中的数据进行翻译处理。 再比如之前做的一个项目中宠物…

【C#】选课程序增加、删除统计学时

文章目录 【例6-2】编写选课程序。利用利用列表框和组合框增加和删除相关课程&#xff0c;并统计学时数1. 表6-2 属性设置2. 设计窗体及页面3. 代码实现4. 运行效果 【例6-2】编写选课程序。利用利用列表框和组合框增加和删除相关课程&#xff0c;并统计学时数 分析&#xff1…

星期-时间范围选择器 滑动选择时间 最小粒度 vue3

星期-时间范围选择器 功能介绍属性说明事件说明实现代码使用范例根据业务需要,实现了一个可选择时间范围的周视图。用户可以通过鼠标拖动来选择时间段,并且可以通过快速选择组件来快速选择特定的时间范围。 功能介绍 时间范围选择:用户可以通过鼠标拖动来选择时间段。快速选…

Swift从0开始学习 简单值 day1

1.0简单值的初始化: Swift声明值可以使用let 来声明常量&#xff0c;使用 var 来声明变量。let声明是不可修改的且只能赋值一次&#xff0c;var声明是可修改的。两者都不需要显式的指定类型&#xff0c;当你通过一个值来声明变量和常量时&#xff0c;编译器会自动推断其类型。 …

技术领导者的道与术:从领导者到领导力

目录标题 领导者现实看起来是这样技术领导者不应该和个人坐在一起技术领导力仍然是必须的从技术领导到技术领导力小结领导者 你可能想成为或者已经是一位技术领导者,估计你现在心里想成为超级英雄的想法正在爆棚。 你是Java、JavaScript、Angular等技术的专家,公司的项目代…

FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案我已有的 GT 高速接口解决方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图输入Sensor之-->芯片解码的HDMI视频数据组包基于GTH高速接口的视频传输架构GTH IP 简介GTH 基本结构GTH 发送和接收处理…

【实战篇P2-5】手把手实现STM32+ESP8266+原子云服务器+手机APP应用——第五节-编写Android手机APP程序实现接入原子云服务器

使用的开发软件是Android studio Android SDK(运行环境 :最低版本 21(Android 5.0) 最高版本 29 (Android 9.0) Gradle 版本 :4.6 根据源码,可自定义修改界面,修改名称,根据需求自定义数据展示界面等,修改app图标及名称等。 目录 Android程序设计 Android…

华为私有接口类型hybrid

华为私有接口类型hybrid Tip&#xff1a;hybrid类型&#xff0c;简称混合型接口。 本次实验模拟2层网络下 vlan10 vlan20 不能互访&#xff0c;vlan10 vlan20 同时可以访问vlan100 sw1配置如下&#xff1a; <Huawei>sy [Huawei]sys sw1 [sw1]vl ba 10 20 100 [sw1]int…

在 .NET 6.0 中创建用于 CRUD 操作的 Web API

快速概述&#xff1a; 在动态的技术世界中&#xff0c;创建强大的 Web API 已成为开发人员不可或缺的关键技能。这些 API 是促进不同应用程序之间顺畅通信的重要链接&#xff0c;可实现无缝数据检索和操作。本文的重点是在 .NET 6 中为 CRUD 操作创建 Web API。 为了实现这一点…

YOLOPv2论文翻译

YOLOPv2: Better, Faster, Stronger for Panoptic Driving Perception 摘要 在过去的十年中&#xff0c;多任务学习方法在解决全景驾驶感知问题方面取得了令人鼓舞的成果&#xff0c;既提供了高精度又具备高效能的性能。在设计用于实时实际自动驾驶系统的网络时&#xff0c;这…

使用GitHub Actions实现CI/CD流程

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 使用GitHub Actions实现CI/CD流程 GitHub Actions 简介 创建仓库 配置工作流 示例工作流文件 触发和运行工作流 部署应用 最佳实…

【C++练习】使用海伦公式计算三角形面积

编写并调试一个计算三角形面积的程序 要求&#xff1a; 使用海伦公式&#xff08;Herons Formula&#xff09;来计算三角形的面积。程序需要从用户那里输入三角形的三边长&#xff08;实数类型&#xff09;。输出计算得到的三角形面积&#xff0c;结果保留默认精度。提示用户…

【服务器】使用命令行文本编辑器(如 vim、nano 或 vi)创建文件并编辑

【服务器】使用命令行文本编辑器&#xff08;如 vim、nano 或 vi&#xff09;创建文件并编辑 准备&#xff1a;连接至服务器&#xff08;如ssh&#xff09;创建 .ncl 文件方法 1: 使用 vim 创建 .ncl 文件方法 2: 使用 nano 创建 .ncl 文件确认文件已创建运行 .ncl 文件 总结参…

负载均衡式在线oj项目开发文档(个人项目)

项目目标 需要使用的技术栈&#xff1a; 这个项目共分成三个模块第一个模块为公共的模块&#xff0c;用于解决字符串处理&#xff0c;文件操作&#xff0c;网络连接等等的问题。 第二个模块是一个编译运行的模块&#xff0c;这个模块的主要功能就是将用户的代码收集上来之后要…

区块链技术在数字版权管理中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 区块链技术在数字版权管理中的应用 引言 区块链技术概述 …