百度文心大模型团队开源了ERNIE-Image,一款基于单流DiT架构的8B参数文生图模型。仅需24GB显存的消费级显卡即可运行,在指令遵循、文字渲染等主流benchmark上全面领先开源模型,尤其擅长海报、漫画分镜、多面板布局等强控制力场景。团队同步推出ERNIE-Image Turbo,8步推理即可生成高保真图像。模型权重与推理代码已全部开源,魔搭创空间支持快速体验。
体验地址:
- 创空间:https://modelscope.cn/studios/PaddlePaddle/ERNIE-Image
开源地址:
- ERNIE-Image:https://modelscope.cn/models/PaddlePaddle/ERNIE-Image
- ERNIE-Image-Turbo:https://modelscope.cn/models/PaddlePaddle/ERNIE-Image-Turbo
模型介绍
ERNIE-Image基于DiT架构,参数量80亿(8B),仅需24GB显存即可生成媲美顶级商业模型的复杂图像。在GenEval、OneIG、LongTextBench等主流评测中全面领先开源模型,整体效果接近NanoBanana、Seedream 4.5等最先进模型。模型在复杂指令跟随与精准文字渲染方面优势显著,同时覆盖动漫、胶片、超现实主义、剪影、老照片等多元视觉风格。
核心特性:
- 小模型,强性能
仅8B参数规模,在GenEval、OneIG、LongTextBench等主流评测中取得开源模型世界第一,效果接近最先进的商业级模型。 - 精准文字渲染
在高密度文本、长文本及版式敏感的文字生成任务上表现稳定,支持中英文等多语言文字渲染,适合海报、信息图、类UI图像等重文字场景。 - 复杂指令跟随
面对多主体关系、细节约束和知识密集型描述的prompt,模型保持强理解与精准执行能力。 - 结构化生成突出
在海报、漫画、分镜、故事板和多面板图像等结构化视觉任务中,能更好地保持布局逻辑和画面组织。 - 多元风格覆盖
支持写实摄影、设计感图像、动漫二次元、胶片、超现实主义、剪影、老照片等多种视觉风格,以及更柔和、更具电影感的画面风格。 - 消费级硬件友好
24GB VRAM即可部署运行,降低了研究与生产环境的使用门槛。
Prompt Enhancer(提示词增强器)
ERNIE-Image在详细、结构化的长prompt下表现最佳,但实际使用中用户往往只输入一句简短描述,难以充分发挥模型能力。
为此,团队内置了3B参数的轻量级Prompt Enhancer,自动将简短输入扩展为更详细、结构化的prompt——不改变用户意图,而是将简洁请求转化为更能发挥模型潜力的形式。在海报、动漫、网页布局、游戏截图等结构化视觉任务中效果尤为明显。
以下示例展示了Prompt Enhancer的效果:无PE时模型倾向于字面理解短prompt,结果不完整;启用3B PE后生成质量显著提升。使用更强LLM作为PE可进一步提升效果,表明提示词增强是发挥ERNIE-Image长prompt能力的有效杠杆。
评测结果
ERNIE-Image在四个主流文生图评测基准上进行了评估:GenEval(组合生成)、OneIG-EN / OneIG-ZH(中英文开放域图像生成)和LongTextBench(长文本渲染保真度)。
- 全面领先开源模型
ERNIE-Image在所有四个benchmark上均为开源模型第一:GenEval第1名(0.8856)、OneIG-ZH第2名(0.5543)、LongTextBench第2名(0.9733)、OneIG-EN第3名(0.5750),与NanoBanana 2.0、Seedream 4.5等顶级闭源模型直接竞争。 - 极致参数效率
上述成绩仅来自8B参数的DiT架构,是同性能水平下最具参数效率的模型之一。 - 文字渲染突出
在LongTextBench上排名第2,中英文长文本渲染均表现出色;在OneIG的Text维度上也保持高竞争力,体现了多语言文字生成的核心优势。
模型推理
Diffusers推理
环境安装:
pip install git+https://github.com/huggingface/diffusers
推理脚本:
import torch from diffusers import ErnieImagePipeline pipe = ErnieImagePipeline.from_pretrained( "Baidu/ERNIE-Image-Turbo", torch_dtype=torch.bfloat16, ).to("cuda") image = pipe( prompt="这是一张呈现城市街道场景的摄影作品,画面采用平视角度拍摄,展现了一条带有顶棚的步行街或商业街区。画面中央偏下位置有一位骑自行车的行人,背对镜头,正朝画面深处行进,因逆光拍摄而呈现为深色剪影,细节难以辨认。地面铺设有规则的方形地砖,中央有一条明显的盲道贯穿画面,盲道表面的凸起纹理在光线照射下清晰可见。光线从画面右侧斜射入,形成强烈的逆光效果,产生明显的丁达尔效应(光束感),照亮了空气中的尘埃或蒸汽,在街道上投下长长的阴影。画面左侧和远处有多位行人,有的背对镜头,有的侧身行走,均呈现为剪影或半剪影状态。整体色调偏暖,以金黄色和深褐色为主,营造出黄昏或清晨时分的氛围。", height=1264, width=848, num_inference_steps=8, guidance_scale=1.0, use_pe=True # use prompt enhancer ).images[0] image.save("output.png")
SGLang推理
安装sglang:
git clone https://github.com/sgl-project/sglang.git
启动服务:
sglang serve --model-path baidu/ERNIE-Image-Turbo
发送生成请求:
curl -X POST http://localhost:30000/generate \ -H "Content-Type: application/json" \ -d '{ "prompt": "这是一张呈现城市街道场景的摄影作品,画面采用平视角度拍摄,展现了一条带有顶棚的步行街或商业街区。画面中央偏下位置有一位骑自行车的行人,背对镜头,正朝画面深处行进,因逆光拍摄而呈现为深色剪影,细节难以辨认。地面铺设有规则的方形地砖,中央有一条明显的盲道贯穿画面,盲道表面的凸起纹理在光线照射下清晰可见。光线从画面右侧斜射入,形成强烈的逆光效果,产生明显的丁达尔效应(光束感),照亮了空气中的尘埃或蒸汽,在街道上投下长长的阴影。画面左侧和远处有多位行人,有的背对镜头,有的侧身行走,均呈现为剪影或半剪影状态。整体色调偏暖,以金黄色和深褐色为主,营造出黄昏或清晨时分的氛围。", "height": 1264, "width": 848, "num_inference_steps": 8, "guidance_scale": 1.0, "use_pe": true }' \ --output output.png
Diffsynth推理
环境安装:
pip install -U diffsynth==2.0.8
运行以下代码可以快速加载 PaddlePaddle/ERNIE-Image 模型并进行推理。DiffSynth-Studio显存管理已启动,框架会自动根据剩余显存控制模型参数的加载,最低 3G 显存即可运行。
from diffsynth.pipelines.ernie_image import ErnieImagePipeline, ModelConfig import torch vram_config = { "offload_dtype": torch.bfloat16, "offload_device": "cpu", "onload_dtype": torch.bfloat16, "onload_device": "cpu", "preparing_dtype": torch.bfloat16, "preparing_device": "cuda", "computation_dtype": torch.bfloat16, "computation_device": "cuda", } pipe = ErnieImagePipeline.from_pretrained( torch_dtype=torch.bfloat16, device='cuda', model_configs=[ ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors", **vram_config), ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="text_encoder/model.safetensors", **vram_config), ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors", **vram_config), ], tokenizer_config=ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="tokenizer/"), vram_limit=torch.cuda.mem_get_info("cuda")[1] / (1024 ** 3) - 0.5, ) image = pipe( prompt="一只黑白相间的中华田园犬", negative_prompt="", height=1024, width=1024, seed=42, num_inference_steps=50, cfg_scale=4.0, ) image.save("output.jpg")
模型LoRA训练
DiffSynth-Studio也支持了ERNIE-Image模型的文生图LoRA训练。
环境安装:
pip install -U diffsynth==2.0.8
训练脚本:
# Dataset: data/diffsynth_example_dataset/ernie_image/Ernie-Image-T2I/ # Download: modelscope download --dataset DiffSynth-Studio/diffsynth_example_dataset --include "ernie_image/Ernie-Image-T2I/*" --local_dir ./data/diffsynth_example_dataset accelerate launch examples/ernie_image/model_training/train.py \ --dataset_base_path data/diffsynth_example_dataset/ernie_image/Ernie-Image-T2I \ --dataset_metadata_path data/diffsynth_example_dataset/ernie_image/Ernie-Image-T2I/metadata.csv \ --max_pixels 1048576 \ --dataset_repeat 50 \ --model_id_with_origin_paths "PaddlePaddle/ERNIE-Image:transformer/diffusion_pytorch_model*.safetensors,PaddlePaddle/ERNIE-Image:text_encoder/model.safetensors,PaddlePaddle/ERNIE-Image:vae/diffusion_pytorch_model.safetensors" \ --learning_rate 1e-4 \ --num_epochs 5 \ --remove_prefix_in_ckpt "pipe.dit." \ --output_path "./models/train/Ernie-Image-T2I_lora" \ --lora_base_model "dit" \ --lora_target_modules "to_q,to_k,to_v,to_out.0" \ --lora_rank 32 \ --use_gradient_checkpointing \ --dataset_num_workers 8 \ --find_unused_parameters
验证脚本:
import torch from diffsynth.pipelines.ernie_image import ErnieImagePipeline, ModelConfig from diffsynth.core.loader.file import load_state_dict pipe = ErnieImagePipeline.from_pretrained( torch_dtype=torch.bfloat16, device="cuda", model_configs=[ ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="transformer/diffusion_pytorch_model*.safetensors"), ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="text_encoder/model.safetensors"), ModelConfig(model_id="PaddlePaddle/ERNIE-Image", origin_file_pattern="vae/diffusion_pytorch_model.safetensors"), ], ) lora_state_dict = load_state_dict("./models/train/Ernie-Image-T2I_lora/epoch-4.safetensors", torch_dtype=torch.bfloat16, device="cuda") pipe.load_lora(pipe.dit, state_dict=lora_state_dict, alpha=1.0) image = pipe( prompt="a professional photo of a cute dog", seed=0, num_inference_steps=50, cfg_scale=4.0, ) image.save("image_lora.jpg") print("LoRA validation image saved to image_lora.jpg")
总结
ERNIE-Image证明了8B参数模型可以在文字渲染、复杂指令跟随、结构化生成和多元风格表达上与更大规模模型竞争,同时保持消费级硬件可部署的实用性。希望开源的ERNIE-Image和ERNIE-Image Turbo能为研究、开发和创意应用提供有力的基础工具。
点击即可跳转模型合集