ERNIE-Image 自定义风格微调实战:从零训练专属风格 LoRA

Jun 3, 2026

ERNIE-Image 自定义风格微调实战:从零训练专属风格 LoRA

摘要:ERNIE-Image 的 LoRA 微调能力让个人创作者也能训练专属艺术风格。本文从零开始,教你准备数据集、配置训练环境、运行 LoRA 微调,并在 ComfyUI 中加载使用。全程本地运行,完全免费。


为什么需要风格微调?

ERNIE-Image 基模型已经覆盖了广泛的风格范围——从写实摄影到动漫、从水彩到油画。但当你有独特的视觉风格需求时,基模型往往力不从心:

  • 品牌视觉一致性:电商产品的固定视觉风格
  • 个人艺术签名:独特的绘画风格或配色方案
  • IP 角色统一性:系列作品中角色外观保持一致
  • 特定媒介风格:如赛博朋克、复古海报、极简主义等

LoRA(Low-Rank Adaptation)微调只需训练 0.5%~1.5% 的模型参数,就能让 ERNIE-Image "学会"你的专属风格。相比全量微调,它更快、更省资源,且可以像插件一样随时切换。

硬件要求

配置 最低要求 推荐配置
GPU NVIDIA 12GB VRAM NVIDIA 24GB+ VRAM
量化版本 8GB VRAM (GGUF/NVFP4) —
内存 16GB 32GB
磁盘 20GB 可用空间 40GB+

提示:如果你的 GPU 显存不足 12GB,可以考虑使用 Cloud GPU 服务(RunPod、Vast.ai),每小时成本约 $0.20~$0.50。

第一步:准备风格数据集

数据集要求

  • 图片数量:10~50 张(风格越统一,效果越好)
  • 图片分辨率:建议统一缩放至 1024×1024 或 1024×768
  • 格式:JPG 或 PNG
  • 风格一致性:所有图片应属于同一视觉风格

数据集示例结构

my-style-dataset/
├── images/
│   ├── style_001.jpg
│   ├── style_002.jpg
│   ├── ...
│   └── style_050.jpg
├── captions/
│   ├── style_001.txt  # "a digital painting of a landscape in watercolor style"
│   ├── style_002.txt  # "a digital painting of a portrait in watercolor style"
│   └── ...
└── metadata.json

生成 Caption 的方法

Caption(图像描述)告诉模型"这张图片是什么",而风格信息通过视觉特征学习。建议使用以下格式:

a [style_keyword] of [subject]

例如:

  • a watercolor painting of a cat
  • a cyberpunk digital art of a city street
  • a vintage poster illustration of a woman

技巧:可以使用 CLIP 或 BLIP 模型自动为图片生成 Caption,再手动修正风格关键词。

第二步:安装训练环境

方式一:使用官方 Diffusers + PEFT

# 创建虚拟环境
python3 -m venv ernie-lora-env
source ernie-lora-env/bin/activate

安装依赖

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121
pip install diffusers transformers accelerate peft bitsandbytes
pip install datasets pillow timm

克隆 ERNIE-Image 仓库

git clone https://github.com/baidu/ERNIE-Image.git
cd ERNIE-Image

方式二:使用 DreamBooth 训练脚本

ERNIE-Image 基于 Diffusers 架构,可以直接使用 HuggingFace 官方的 train_dreambooth.py 脚本:

git clone https://github.com/huggingface/diffusers.git
cd examples/dreambooth
pip install -r requirements.txt

第三步:运行 LoRA 微调训练

训练命令

accelerate launch train_dreambooth_lora.py \
  --pretrained_model_name_or_path=baidu/ERNIE-Image \
  --instance_data_dir=./my-style-dataset/images \
  --instance_prompt="a {style_keyword} of subject" \
  --output_dir=./lora-outputs \
  --learning_rate=1e-4 \
  --max_train_steps=1000 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --resolution=1024 \
  --mixed_precision=bf16 \
  --lora_rank=32 \
  --lora_alpha=16 \
  --lora_target_modules=["to_q","to_k","to_v","to_out.0"] \
  --checkpointing_steps=200 \
  --seed=42

关键参数说明

参数 推荐值 说明
learning_rate 1e-4 ~ 5e-4 太高会导致过拟合,太低训练不充分
max_train_steps 500~2000 图片少用少步数,图片多可多步数
lora_rank 16~64 越大表达能力越强,但文件也越大
lora_alpha lora_rank/2 通常设为 rank 的一半
mixed_precision bf16 需要 Ampere+ GPU;旧 GPU 用 fp16

训练时间参考

图片数 步数 学习率 RTX 3090 耗时 RTX 4090 耗时
15 张 500 3e-4 ~15 分钟 ~10 分钟
30 张 1000 2e-4 ~30 分钟 ~20 分钟
50 张 2000 1e-4 ~60 分钟 ~40 分钟

第四步:验证微调效果

快速测试

训练完成后,在 lora-outputs 目录中找到 pytorch_lora_weights.safetensors 文件。使用以下 Python 代码测试:

from diffusers import DiffusionPipeline
from transformers import AutoTokenizer

加载基模型

pipe = DiffusionPipeline.from_pretrained(
"baidu/ERNIE-Image",
torch_dtype=torch.float16
)
pipe.to("cuda")

加载 LoRA

pipe.load_lora_weights("./lora-outputs", weight_name="pytorch_lora_weights.safetensors")

生成测试图

prompt = "a watercolor painting of a mountain landscape, soft colors, flowing brush strokes"
image = pipe(prompt, num_inference_steps=50, guidance_scale=7.5).images[0]
image.save("test_output.png")

评估要点

  1. 风格一致性:不同主题的生成结果是否保持统一风格?
  2. 过度拟合:模型是否只复训练数据中的图片,而非学习风格?
  3. Prompt 响应:改变 prompt 中的主体描述,风格是否跟随?

第五步:在 ComfyUI 中使用 LoRA

安装步骤

  1. 将 pytorch_lora_weights.safetensors 复制到 ComfyUI/models/loras/ 目录
  2. 启动 ComfyUI
  3. 在节点图中添加 "Load LoRA" 节点
  4. 选择你的 LoRA 模型文件
  5. 设置 LoRA 强度(推荐 0.6~0.9)

ComfyUI 工作流示例

[Load Checkpoint: ERNIE-Image]
       ↓
[Load LoRA: your-style-lora.safetensors, strength=0.8]
       ↓
[CLIP Text Encode (Positive Prompt)]
       ↓
[KSampler] → [VAE Decode] → [Save Image]

技巧:LoRA 强度设为 0.8 时通常效果最佳。过高(>1.0)可能导致风格过度,过低(<0.5)效果不明显。

常见问题与解决方案

问题 1:训练过程中显存溢出 (OOM)

RuntimeError: CUDA out of memory

解决方案:

  • 降低 resolution 至 768 或 512
  • 使用梯度检查点:--gradient_checkpointing
  • 减小 train_batch_size 或增加 gradient_accumulation_steps
  • 使用 8-bit 优化器:--optimizer_type=8bit_adam

问题 2:生成的图片与训练数据过于相似

这是过度拟合的表现。

解决方案:

  • 降低学习率(从 3e-4 降至 1e-4)
  • 减少训练步数
  • 在 instance prompt 中加入更多变化(不同主体描述)
  • 使用 regularization images(正则化图片)

问题 3:风格不够明显

解决方案:

  • 增加 lora_rank 至 64
  • 增加训练步数
  • 确保训练数据的风格足够统一和鲜明
  • 在 ComfyUI 中提高 LoRA 强度至 0.9~1.0

问题 4:多个 LoRA 叠加使用

ERNIE-Image 支持同时加载多个 LoRA,可以组合风格+角色:

pipe.load_lora_weights("./style-lora", weight_name="pytorch_lora_weights.safetensors", adapter_name="style")
pipe.load_lora_weights("./character-lora", weight_name="pytorch_lora_weights.safetensors", adapter_name="character")
pipe.set_adapters(["style", "character"], adapter_weights=[0.8, 0.7])

总结

ERNIE-Image 的 LoRA 风格微调是一项零成本的个性化生成能力。通过准备 1050 张风格统一的数据集,在消费级 GPU 上训练 1560 分钟,你就可以拥有一个专属的艺术风格模型。

核心流程回顾:

  1. 准备 10~50 张风格统一的图片 + Caption
  2. 配置 Diffusers + PEFT 训练环境
  3. 运行 LoRA 微调(lr=1e-4, steps=1000, rank=32)
  4. 验证风格效果
  5. 在 ComfyUI 中加载使用

与 Midjourney 的 --sref(风格参考)或 FLUX 的参考图功能相比,ERNIE-Image LoRA 提供了更精确、更可控的风格迁移能力——而且完全免费、本地运行。


本文首发于 ernie-image.app,欢迎转载并注明出处。

ERNIE-Image Team