综合介绍
UNO 是由 ByteDance 智能创作团队开发的一个开源图像生成框架。它基于 FLUX.1 模型,专注于通过“少到多”的泛化方式实现单主体和多主体的定制化图像生成。UNO 利用扩散变换器(DiT)的上下文生成能力,结合高一致性的数据合成流程,解决了多主体场景下数据扩展和主体一致性的难题。它支持用户通过文字描述和参考图像生成高质量图像,广泛适用于个性化图像创作、虚拟角色设计等场景。项目代码采用 Apache 2.0 许可证,模型权重则使用 CC BY-NC 4.0 许可证,适合学术研究和非商业用途。
功能列表
- 单主体图像生成:基于单一参考图像生成与描述一致的图像,保持主体特征。
- 多主体图像生成:在同一场景中生成多个特定主体,保持各自特征不混淆。
- 上下文生成:利用扩散变换器的上下文学习能力,生成高一致性的图像。
- 低显存优化:支持 fp8 模式,峰值显存占用约 16GB,适合消费级 GPU。
- 模型微调:提供预训练和多阶段训练策略,支持从文本到图像模型的迭代优化。
- 开源支持:提供训练代码、推理代码和模型权重,方便研究者扩展应用。
使用帮助
安装流程
要使用 UNO,需要在本地环境中安装并配置相关依赖。以下是详细的安装步骤,适用于 Python 3.10 至 3.12 的环境。
- 创建虚拟环境
首先,创建一个独立的 Python 虚拟环境以避免依赖冲突。可以使用以下命令:python -m venv uno_env source uno_env/bin/activate # Linux/MacOS uno_env\Scripts\activate # Windows
或者使用 Conda 创建环境:
conda create -n uno_env python=3.10 -y conda activate uno_env
- 安装 PyTorch
如果使用 AMD GPU、NVIDIA RTX 50 系列或 macOS MPS,需要手动安装适合的 PyTorch 版本。参考 PyTorch 官网(https://pytorch.org/)选择正确的版本。例如:pip install torch torchvision torchaudio
- 安装 UNO 依赖
克隆 UNO 仓库并安装依赖:git clone https://github.com/bytedance/UNO.git cd UNO pip install -e . # 仅用于推理 pip install -e .[train] # 用于推理和训练
注意:确保
requirements.txt
中的依赖正确安装。如果遇到问题,可检查是否有缺失的系统库(如ffmpeg
)并通过conda install -c conda-forge ffmpeg
安装。 - 下载模型检查点
UNO 依赖 FLUX.1-dev 模型和相关检查点。可以通过以下方式下载:- 自动下载:运行推理脚本时,检查点会自动通过
hf_hub_download
下载到默认路径(~/.cache/huggingface
)。 - 手动下载:使用 Hugging Face CLI 下载模型:
huggingface-cli download black-forest-labs/FLUX.1-dev huggingface-cli download xlabs-ai/xflux_text_encoders huggingface-cli download openai/clip-vit-large-patch14 huggingface-cli download bytedance-research/UNO
下载后,将模型放置到指定目录(如
models/unet
和models/loras
)。 - 自动下载:运行推理脚本时,检查点会自动通过
- 验证安装
安装完成后,运行以下命令检查环境是否正确配置:python -c "import torch; print(torch.cuda.is_available())"
如果返回
True
,说明 GPU 环境配置成功。
使用方式
UNO 提供了一个 Gradio 界面(app.py
)用于交互式图像生成,也可以通过命令行运行推理脚本(inference.py
)。以下是主要操作流程。
通过 Gradio 界面生成图像
- 启动 Gradio 应用
确保安装了 Gradio(包含在requirements.txt
中)。运行以下命令启动界面:python app.py
启动后,浏览器会打开一个本地页面(通常是
http://127.0.0.1:7860
)。 - 输入参数
在 Gradio 界面中:- 输入文字提示(
prompt
),描述你想要生成的图像场景,例如“一只猫和一只狗在公园玩耍”。 - 上传 1-4 张参考图像(
image_ref1
至image_ref4
),这些图像定义主体的外观。 - 设置种子值(
seed
)以控制生成结果的随机性,默认值为 3407。 - 选择模型类型(
flux-dev
、flux-dev-fp8
或flux-schnell
),推荐flux-dev-fp8
以降低显存需求。
- 输入文字提示(
- 生成图像
点击“生成”按钮,UNO 会根据提示和参考图像生成结果。生成时间取决于硬件性能,通常在消费级 GPU(如 RTX 3090)上需要数秒到数分钟。
通过命令行运行推理
- 准备输入
创建一个包含提示和参考图像路径的配置文件,或直接在命令行指定参数。例如:python inference.py --prompt "A man in a suit, standing in a city" --image_paths "./assets/examples/man.jpg" --model_type "flux-dev-fp8" --save_path "./output"
- 常用参数说明
--prompt
:文字描述,定义生成图像的内容。--image_paths
:参考图像路径,支持多个图像。--model_type
:模型类型,推荐flux-dev-fp8
。--offload
:启用显存卸载,减少显存占用。--num_steps
:扩散步骤数,默认 25,影响生成质量。--guidance
:引导因子,默认 4,控制文字与图像的匹配度。
- 查看结果
生成的图像会保存到--save_path
指定的目录(如output/inference
)。
特色功能操作
单主体生成
- 操作步骤:
- 上传一张主体图像(如一张人物照片)。
- 输入文字提示,描述目标场景(如“此人在海滩上散步”)。
- 设置参考图像分辨率为 512(默认值)。
- 生成图像,UNO 会保持主体的外观特征(如面部、服装)。
- 注意事项:确保参考图像清晰,主体特征明显,避免模糊或低质量图像。
多主体生成
- 操作步骤:
- 上传多张参考图像(如一张猫的照片和一张狗的照片)。
- 输入文字提示,描述多主体场景(如“猫和狗在草地上玩耍”)。
- 设置参考图像分辨率为 320(多主体默认值)。
- 生成图像,UNO 会通过 UnoPE(通用旋转位置嵌入)技术避免主体特征混淆。
- 注意事项:参考图像数量不超过 4 张,且每个主体应在图像中明确区分。
低显存优化
- 使用
flux-dev-fp8
模型,显存占用降至约 16GB。 - 启用
--offload
参数,将部分计算卸载到 CPU,进一步降低显存需求。 - 适合 RTX 3090 或 RTX 4090 等消费级 GPU 用户。
常见问题解决
- 显存不足:尝试降低分辨率(
--width
和--height
)至 512x512,或使用flux-dev-fp8
模型。 - 安装失败:检查 PyTorch 版本是否与 GPU 兼容,必要时手动安装特定版本。
- 生成结果不理想:调整
--guidance
(增加到 5 或 6)或--num_steps
(增加到 50),以提高图像质量。
应用场景
- 个性化图像创作
用户可以上传自己的照片,结合文字描述生成特定场景的图像。例如,上传一张自拍照,生成“自己在未来城市漫步”的图像,适用于社交媒体内容创作。 - 虚拟角色设计
游戏开发者或动画制作者可上传角色草图,生成不同场景下的角色形象,保持角色外观一致性,适合漫画、动画或游戏开发。 - 广告与营销
营销团队可以上传产品或品牌吉祥物图像,生成多样化的广告场景(如产品在不同季节的展示),提升视觉内容的多样性。 - 学术研究
研究者可利用 UNO 的开源代码和训练流程,探索扩散模型在多主体生成中的应用,验证新的算法或优化现有模型。
QA
- UNO 支持哪些硬件?
UNO 推荐使用 NVIDIA GPU(如 RTX 3090 或 4090),最低显存 16GB。支持 AMD GPU 和 macOS MPS,但需手动配置 PyTorch。 - 如何提高生成图像的质量?
增加扩散步骤(--num_steps
设为 50)或调整引导因子(--guidance
设为 5-6)。确保参考图像清晰且文字提示具体。 - UNO 是否支持商用?
模型权重采用 CC BY-NC 4.0 许可证,仅限非商业用途。商业使用需遵守 FLUX.1-dev 的原始许可条款。 - 如何处理多主体生成中的特征混淆?
UNO 使用 UnoPE 技术减少混淆。确保每张参考图像的主体特征明确,并适当降低分辨率(如 320)以优化效果。