从零开始,用 USO 把“风格迁移”与“主体定制”一次搞定
“我想让 AI 画一只猫,但要用梵高的笔触,还要保留我家那只橘猫的脸,能做到吗?”
——答案是:可以,而且只需一张主体图、一张风格图、一句话。
目录
-
USO 是什么? -
为什么以前做不到,现在可以? -
安装与准备(含低显存方案) -
四种典型用法与命令示例 -
效果对比:USO 与常见工具 -
常见问题 FAQ -
技术原理速览 -
一句话总结 & 下一步阅读
1. USO 是什么?
一句话:
USO(Unified Style and Subject-Driven Generation) 是一个开源模型,它把“风格迁移”和“主体定制”这两个原本分开的任务合并到一个框架里,让你用一张“主体图”+一张“风格图”+一句提示词,直接生成符合要求的新图片。
任务 | 传统做法 | USO 做法 |
---|---|---|
风格迁移 | 只改画风,主体不变 | 可同时替换主体或保留主体 |
主体定制 | 只保留主体,画风随机 | 可指定任意画风 |
两者结合 | 需两个模型+后处理 | 一个模型一步到位 |
2. 为什么以前做不到,现在可以?
过去遇到的三大难题:
-
任务隔离
风格模型只管风格,主体模型只管主体,互不通信。 -
信息纠缠
参考图里既有“画风”又有“人物”,模型分不清哪些该学、哪些该扔。 -
数据缺失
缺少同时标注了“主体、风格、合成结果”的大规模数据集。
USO 用三步解决:
步骤 | 技术关键词 | 通俗解释 |
---|---|---|
① 造数据 | 交叉任务三元组 | 先让 AI 生成 20 万张“主体-风格-合成图”三元组,保证训练时有标准答案 |
② 拆信息 | 解耦编码器 | 用两个独立编码器:一个看“主体”,一个看“风格”,互不干扰 |
③ 学奖励 | 风格奖励学习 | 额外训练一个“打分器”告诉模型:画得像不像参考风格,分数越高越好 |
3. 安装与准备(含低显存方案)
3.1 系统要求
-
Python 3.10 ~ 3.12 -
CUDA ≥ 12.1(NVIDIA 显卡) -
显存: -
16 GB 可用:直接跑 fp8 权重 -
≤ 12 GB:加 --offload
参数把部分权重卸载到内存
-
3.2 一键安装步骤
# 1. 创建并激活虚拟环境
python -m venv uso_env
source uso_env/bin/activate # Windows 用 uso_env\Scripts\activate
# 2. 安装 PyTorch(CUDA 12.4 示例)
pip install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu124
# 3. 安装依赖
pip install -r requirements.txt
# 4. 下载权重
cp example.env .env
# 打开 .env,把 HF_TOKEN 换成你的 Hugging Face token
python weights/downloader.py
3.3 低显存启动模板
python inference.py \
--prompt "一只橘猫在咖啡馆打盹" \
--image_paths "my_cat.jpg" "van_gogh.jpg" \
--width 1024 --height 1024 \
--offload --model_type flux-dev-fp8
-
--offload
:显存不足时自动把权重搬到内存 -
--model_type flux-dev-fp8
:官方推荐低显存版本
4. 四种典型用法与命令示例
场景 | 主体图 | 风格图 | 提示词示例 | 启动命令 |
---|---|---|---|---|
1. 主体驱动 | 需提供 | 无 | “穿西装的柯基在演讲” | 见 4.1 |
2. 风格驱动 | 留空 | 需提供 | “雪山落日” | 见 4.2 |
3. 主体+风格 | 需提供 | 需提供 | “我家柯基在雪山落日中奔跑” | 见 4.3 |
4. 多风格混合 | 留空 | 多张 | “赛博朋克城市” | 见 4.4 |
小提示:路径用空格隔开,第一张永远是主体图,留空用
""
。
4.1 主体驱动(保持主体,换背景)
python inference.py \
--prompt "The man in flower shops carefully match bouquets" \
--image_paths "assets/gradio_examples/identity1.jpg"
4.2 风格驱动(换画风,主体随机)
python inference.py \
--prompt "A cat sleeping on a chair" \
--image_paths "" "assets/gradio_examples/style1.webp"
4.3 主体+风格(既要脸又要画风)
python inference.py \
--prompt "The woman gave an impassioned speech on the podium" \
--image_paths "assets/gradio_examples/identity2.webp" "assets/gradio_examples/style2.webp"
4.4 多风格混合(一张图里融合多种画风)
python inference.py \
--prompt "A handsome man" \
--image_paths "" "style3.webp" "style4.webp"
5. 效果对比:USO 与常见工具
作者在 USO-Bench(50 张内容图 × 50 张风格图 × 多种提示词)上跑了大量实验,核心结论:
指标 | 含义 | USO 得分 | 次优模型得分 |
---|---|---|---|
CLIP-I ↑ | 主体相似度 | 0.623 | 0.605 (UNO) |
DINO ↑ | 身份一致性 | 0.793 | 0.789 (UNO) |
CSD ↑ | 风格相似度 | 0.557 | 0.540 (InstantStyle-XL) |
CLIP-T ↑ | 文本一致性 | 0.282 | 0.282 (StyleStudio) |
图片示例
左:原风格;中:InstantStyle;右:USO,笔触更接近梵高。
6. 常见问题 FAQ
Q1:我只有 8 GB 显存,跑得动吗?
可以。使用 flux-dev-fp8
+ --offload
,峰值显存约 16 GB,但系统内存够大即可。
Q2:主体图一定要是人像吗?
不限制。猫、狗、产品 logo、动漫角色都可以,只要主体清晰即可。
Q3:风格图可以用插画、油画以外的类型吗?
可以。照片、3D 渲染、像素风、甚至布料纹理都支持。
Q4:提示词该怎么写?
-
想保留姿势:用空提示词 ""
-
想换动作:直接写 “主体 + 动作 + 场景”,例如“穿西装的柯基在演讲”
Q5:生成的图版权归谁?
代码 Apache 2.0,生成图由用户自行负责,请遵守当地法律。
7. 技术原理速览(写给好奇宝宝)
7.1 训练数据怎么来?
-
从公开图库 + 合成数据里挑 20 万张“风格化图” -
再用两个专家模型来回倒腾: -
风格专家:把普通图→指定风格 -
去风格专家:把风格图→还原成普通图
-
-
最终得到三元组: [风格参考图, 去风格主体图, 合成结果图]
这样模型既有“标准答案”,又能学到“哪些信息该保留/丢弃”。
7.2 模型结构长什么样?
-
SigLIP 编码器:提风格特征(颜色、笔触) -
VAE 编码器:提主体特征(脸、姿势) -
分层映射器(Hierarchical Projector):把不同层特征拼一起,再送进 DiT 生成图片 -
风格奖励模型:实时给生成图打分,分数高才回传梯度
7.3 训练两阶段
阶段 | 目标 | 解冻参数 | 数据 |
---|---|---|---|
① 风格对齐 | 让模型先学会“按风格出图” | 仅映射器 | {风格图 → 结果图} |
② 解耦训练 | 同时喂主体+风格,学会分离 | DiT 全部 | {主体+风格 → 结果图} |
8. 一句话总结 & 下一步阅读
-
用:一张主体、一张风格、一句话,就能生成高质量定制图。 -
学:想深挖原理,直接看 技术报告 arXiv:2508.18966。 -
玩:在线 demo 已上线 Hugging Face,免安装直接体验。
祝你玩得开心,创作愉快!