基础模型:
- deepseek-ai/DeepSeek-R1-Distill-Qwen-14B
数据集:
- X-ART/LeX-R1-60K
库名称: transformers
许可证: mit
管道标签: 文本到图像
标签:
- 艺术
- 文本渲染

🎨 LeX-Enhancer: 提示增强器
LeX-Enhancer 是一个轻量级的提示增强模型,基于 DeepSeek-R1 蒸馏而来。
我们收集了 60,856 对标题 —— 即经过 DeepSeek-R1 增强前后的对比 —— 并使用 LoRA 微调了 DeepSeek-R1-Distilled-Qwen-14B 模型,以重现高质量、视觉丰富的提示输出。
这使得高效、大规模的提示增强生成成为可能,非常适合高保真的文本到图像生成。
✍️ 示例:从简单标题到增强标题
🧾 输入(简单标题):
一张感谢卡,上面写着“VERY”用黑色,“MUCH”用黄色。
🧾 输出(增强标题):
图片展示了一张长方形的感谢卡,背景为柔和的暖色调渐变,从奶油米色到淡淡的粉红色,带有轻微的纹理效果,增加了层次感而不喧宾夺主。卡片顶部中央,“VERY”一词以粗体大写黑色字母呈现,采用简洁的无衬线字体,略微弯曲以顺应构图的自然流动。正下方,“MUCH”一词以鲜艳的明黄色呈现,字体风格同样粗犷但稍大,与“VERY”的下边缘对齐,形成平衡的层次感。两段文字均带有淡淡的投影,增强了在柔和光照背景下的可读性。卡片边缘清晰,边框为背景色调的浅色,整体布局对称,展现出精致现代的美感。柔和的环境光在卡片角落投下模糊的阴影,暗示下方有轻微纹理的表面,同时没有多余的装饰元素,确保焦点集中在文字上。色彩搭配和谐,既温暖又中性,确保文字成为视觉焦点,同时保持宁静亲切的氛围。
🚀 使用方式(Python 代码)
import torch, os
from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
SYSTEM_TEMPLATE = (
"用户与助手之间的对话。用户提出问题,助手解决问题。 "
"助手先在脑海中思考推理过程,然后向用户提供答案。 "
"推理过程和答案分别包含在 <think> </think> 和 <answer> </answer> 标签中,即 "
"<think> 推理过程在这里 </think> <answer> 答案在这里 </answer>。"
)
model_path = 'X-ART/LeX-Enhancer'
simple_caption = "一张感谢卡,上面写着“VERY”用黑色,“MUCH”用黄色。"
def create_chat_template(user_prompt):
return [
{"role": "system", "content": SYSTEM_TEMPLATE},
{"role": "user", "content": user_prompt},
{"role": "assistant", "content": "<think>"}
]
def create_direct_template(user_prompt):
return user_prompt + "<think>"
def create_user_prompt(simple_caption):
return (
"以下是一个带有文字的图像的简单标题。请根据这个简单标题推断出图像的详细描述。 "
"注意:1. 描述应仅包含视觉元素,不应包含任何延伸意义。 "
"2. 视觉元素应尽可能丰富,例如图像中的主要对象、它们的属性、对象之间的空间关系、光影效果、色彩风格、图像中的文字及其样式等。 "
"3. 输出描述应为单个段落,不应结构化。 "
"4. 描述应避免某些情况,例如纯白或纯黑背景、模糊的文字、过度渲染的文字或过于刺眼的视觉风格。 "
"5. 详细标题应易于人类阅读且流畅。 "
"6. 避免使用模糊表达,如“可能是”或“或许是”;生成的标题必须采用确定的叙述语气。 "
"7. 不要使用否定句式,如“图像中没有任何东西”等;整个标题应直接描述图像内容。 "
"8. 整个输出应限制在200字以内。"
f"简单标题: {simple_caption}"
)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto", torch_dtype=torch.bfloat16)
messages = create_direct_template(create_user_prompt(simple_caption))
input_ids = tokenizer.encode(messages, return_tensors="pt").to(model.device)
streamer = TextStreamer(tokenizer, skip_special_tokens=True, clean_up_tokenization_spaces=True)
output = model.generate(
input_ids,
max_length=2048,
num_return_sequences=1,
do_sample=True,
temperature=0.6,
repetition_penalty=1.1,
streamer=streamer
)
print("*" * 80)
GitHub 仓库: https://github.com/zhaoshitian/LeX-Art
@article{zhao2025lexart,
title={LeX-Art: 通过可扩展的高质量数据合成重新思考文本生成},
author={赵诗田 and 吴启龙 and 李昕悦 and 张博 and 李明 and 秦琦 and 刘东阳 and 张开鹏 and 李宏升 and 乔宇 and 高鹏 and 付斌 and 李真},
journal={arXiv 预印本 arXiv:2503.21749},
year={2025}
}