作者:曹庭锋、汪诚愚、吴梓恒、黄俊
背景
Stable Diffusion(SD)是一种流行的AI生成内容(AI Generated Content,AIGC)模型,能在文字输入的基础上生成各种风格多样的图像。在目前的AIGC方向,SD是开源社区最热门的模型。然而,SD能够生成高颜值的图像,非常依赖于用户提供的Prompt。如果没有好的Prompt,SD往往无法生成用户预期的图像,极大的影响用户的使用体验。在先前的工作中,阿里云机器学习PAI团队在AIGC方向做了很多探索,包括PAI-Diffusion中文模型的开源、基于Blade的推理优化等,并且推出一系列行业解决方案。为了提升SD系列模型的易用性、降低使用门槛、释放AI模型的创造潜力,我们提出并训练完成面向SD自动Prompt美化器,使得用户只要输入一个极其简单的Prompt,就可以得到一系列经过语言模型优化过的、细节满满的Prompt,帮助您更简单地生成高颜值图像。在下文中,我们详细介绍PAI自动Prompt生成模型的功能和背后的技术干货。
一键体验Prompt自动生成
在详细介绍PAI自动Prompt生成模型前,我们首先给出体验Prompt生成效果。在以下的示例中,我们分别对比了原始Prompt和我们生成Prompt在Stable Diffusion v1.5底座模型上生成图像的效果。对于每个Prompt,我们随机生成两张图片进行对比。
我们也在ModelScope上构建了一个Demo以供用户体验(链接)。只要输入一个简单的Prompt,我们的模型就可以扩写成一个细节描述详细的Prompt,然后使用Stable Diffusion进行文图生成。
Prompt美化器背后的技术
在本节中,我们详细介绍如何训练一个优秀的Prompt美化器。整体架构如下图所示:
底座模型
PAI-Prompt生成模型底座基于BLOOM(BigScience Language Open-science Open-access Multilingual),由BigScience训练并且开源。BLOOM具有Decoder-only模型架构,和GPT-3非常相似,最大具有1760亿参数。在我们的模型训练时,我们选择了具有11亿参数的BLOOM模型进行继续训练,其原因在于它的参数量不大,当它用于线上部署时,推理速度较快,而且训练和推理成本都相当可控,具有很高的实用价值。
无需数据标注的SFT
由于模型的训练需要高质量和低质量的Prompt对,这些数据一般很难直接去做标注。因此我们使用如下方法自动话地搜集训练数据。
1.摘要生成:首先,我们搜集开源的高质量Prompt数据集,作为语言模型生成的Target。在这种场景下,由于缺乏低质量的Prompt,我们可以使用ChatGPT等大模型生成Summary作为低质量的Prompt。以下是一个Summary的例子:
Instruction: Summarize this image description in 10 words or less and ignore words like archdaily, wallpaper, highly detailed, 8k, [r/earthporn]. Check English. Ignore modifiers 'by xxx', 'with xxx' or 'in xxx'. Ignore adjective.
Input: a beautiful very detailed illustration of abandoned urbex unfinished building city nature industrial architecture architecture building spaceport by caspar david friedrich, scumm bar meadow nature synthwave, archdaily, wallpaper, highly detailed, trending on artstation.
Output: of abandoned urban building in nature.
Input: portrait painting of a lost boy by cedric peyravernay and greg ruthkowski, in the style of dishonored concept art, concept design, trending on artstation \n
Output:
2.Prompt扩展:利用低质量的Prompt,使用ChatGPT生成更高质量的Prompt。以下是一个Prompt生成的例子:
Instruction: create a detailed and creative description of the 'input'. Your response should include specific details about the colors, textures, and overall composition of the painting, as well as any unique features or elements that make it stand out.
Please provide a clear and concise response that captures the essence of the painting while also encouraging creativity and originality in your description. You may consider describing the setting or environment depicted in the painting.
Input: Digital painting of a girl with candy hat.
3.图像标题生成:我们搜集了高质量的图文对,对图像进行image captioning,生成更多可供训练模型的Prompt。
最终,得到的数据会进行美观值和一致性筛选,我们保留质量较高的数据用于SFT。
面向SD的强化学习优化
RLHF(Reinforcement Learning from Human Feedback)对ChatGPT等大模型的效果提升有重要的作用。在我们的应用中,我们设计了面向Stable Diffusion的强化学习算法,优化Prompt生成模型。
对于Reward Model,我们在得到图文对数据基础上,使用美学值评分模型来给图片打分,并使用一个语言模型来拟合对应Pprompt->美学值评分,将此作为我们的打分模型。此外,我们还采用最先进的强化学习算法PPO来进一步优化模型,奖励函数使用打分模型和一致性得分加权:
reward = a * score_model(prompt) + b * consistency_model(raw_prompt, prompt)
这样可以进一步加强我们生成Prompt的美观性和图文一致性。在完成了上述三阶段训练以后,我们的模型在小参数规模下(1.1B)的效果不亚于ChatGPT生成Prompt的效果,示例如下:
模型调用
如果想快速体验模型效果,可以访问我们在ModelScope社区的创空间页面链接。同时,我们也在huggingface等开源社区上架了这一模型,使用接口如下:
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained('alibaba-pai/pai-bloom-1b1-text2prompt-sd')
model = AutoModelForCausalLM.from_pretrained('alibaba-pai/pai-bloom-1b1-text2prompt-sd').eval().cuda()
raw_prompt = '1 girl'
input = f'Instruction: Give a simple description of the image to generate a drawing prompt.\nInput: {raw_prompt}\nOutput:'
input_ids = tokenizer.encode(input, return_tensors='pt').cuda()
outputs = model.generate(
input_ids,
max_length=384,
do_sample=True,
temperature=1.0,
top_k=50,
top_p=0.95,
repetition_penalty=1.2,
num_return_sequences=5)
prompts = tokenizer.batch_decode(outputs[:, input_ids.size(1):], skip_special_tokens=True)
prompts = [p.strip() for p in prompts]
print(prompts)
未来展望
在这一期的工作中,我们提出并训练完成面向SD自动Prompt美化器,使得用户只要输入一个极其简单的Prompt,就可以得到一系列经过语言模型优化过的Prompt,帮助您更简单地生成高颜值图像。在未来,我们计划增加这一类模型对各种类SD模型的适配,丰富PAI-AIGC的算法和产品能力。
阿里灵杰回顾
- 阿里灵杰:阿里云机器学习PAI开源中文NLP算法框架EasyNLP,助力NLP大模型落地
- 阿里灵杰:预训练知识度量比赛夺冠!阿里云PAI发布知识预训练工具
- 阿里灵杰:EasyNLP带你玩转CLIP图文检索
- 阿里灵杰:EasyNLP中文文图生成模型带你秒变艺术家
- 阿里灵杰:EasyNLP集成K-BERT算法,借助知识图谱实现更优Finetune
- 阿里灵杰:中文稀疏GPT大模型落地 — 通往低成本&高性能多任务通用自然语言理解的关键里程碑
- 阿里灵杰:EasyNLP玩转文本摘要(新闻标题)生成
- 阿里灵杰:跨模态学习能力再升级,EasyNLP电商文图检索效果刷新SOTA
- 阿里灵杰:EasyNLP带你实现中英文机器阅读理解
- 阿里灵杰:EasyNLP发布融合语言学和事实知识的中文预训练模型CKBERT
- 阿里灵杰:当大火的文图生成模型遇见知识图谱,AI画像趋近于真实世界
- 阿里灵杰:PAI-Diffusion模型来了!阿里云机器学习团队带您徜徉中文艺术海洋
- 阿里灵杰:阿里云PAI-Diffusion功能再升级,全链路支持模型调优,平均推理速度提升75%以上
- 阿里灵杰:EasyNLP集成K-Global Pointer算法,支持中文信息抽取
- 阿里灵杰:PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成
免费领取 交互式建模PAI-DSW、模型训练PAI-DLC 5000CU*H计算资源包,以及价值500元模型在线服务 PAI-EAS 抵扣包。