作者:段忠杰(终劫)、刘冰雁(伍拾)、汪诚愚(熊兮)、黄俊(临在)

布景

以Stable Diffusion模型为代表,AI生成内容(AI Generated Content,AIGC)的模型和运用呈现出井喷式的增加趋势。在先前的工作中,阿里机器学习PAI团队开源了PAI-Diffusion系列模型(看这儿),包含一系列通用场景和特定场景的文图生成模型,例如古诗配图、二次元动漫、魔幻现实等。这些模型的Pipeline除了包含规范的Diffusion Model,还集成了PAI团队先前提出的中文CLIP跨模态对齐模型(看这儿)使得模型能够生成符合中文文本描述的、各种场景下的高清大图。此外,因为Diffusion模型推理速度比较慢,而且需要消耗较多的硬件资源,咱们结合由PAI自主研发的编译优化东西 PAI-Blade,支撑对PAI-Diffusion模型的端到端的导出和推理加速,在A10机器下做到了1s内的中文大图生成(看这儿)。在本次的工作中,咱们对之前的PAI-Diffusion中文模型进行大幅升级,主要的功用扩展包含:

  • 图画生成质量的大幅提高、风格多样化:经过很多对模型预练习数据的处理和过滤,以及练习过程的优化,PAI-Diffusion中文模型生成的图画不管在质量上,仍是在风格上都大幅超越先前版本;
  • 丰厚的精细化模型微调功用:除了对模型的规范微调,PAI-Diffusion中文模型支撑开源社区的各种微调功用,包含LoRA、Textual Inversion、DreamBooth、ControlNet等,支撑各类图画生成和编辑的功用;
  • 简略易用的场景化定制方案:除了练习各种通用场景下的中文模型,咱们也在垂类场景下做了很多测验和探索,经过场景化的定制,能够在各种产品中运用这些模型,包含Diffuser API、WebUI等。

鄙人文中,咱们具体介绍PAI-Diffusion中文模型的新功用和新特性。

艺术画廊

在具体介绍PAI-Diffusion中文模型及其功用前,咱们首要带咱们观赏咱们的艺术画廊,下面的所有图片都选用PAI-Diffusion中文模型真实生成。

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion ModelZoo

咱们运用海量中文图文对数据,练习了多个Diffusion中文模型,参数量均在10亿左右。本次咱们开源了如下两个模型。概述如下所示:

模型名 运用场景
pai-diffusion-artist-large-zh 中文文图生成艺术模型,默认支撑生成图画分辨率为512*512
pai-diffusion-artist-xlarge-zh 中文文图生成艺术模型(更大分辨率),默认支撑生成图画分辨率为768*768

为了提高模型输出图画的质量,在最大限度内避免出现不合规或低质量内容,咱们搜集海量开源的图文对数据集,包含大规模中文跨模态预练习数据集WuKong、大规模多语言多模态数据集LAION-5B等。咱们针对图画和文本进行了多种清洗办法,挑选掉违规和低质量数据。具体的数据处理办法包含NSFW(Not Safe From Work)数据过滤、水印数据去除,以及运用CLIP分数和漂亮值分数评分,选出最合适的预练习数据子集进行练习。与英文开源社区的Diffusion模型不同,咱们的CLIP Text Encoder选用EasyNLP自研的中文CLIP模型(github.com/alibaba/Eas…),并且在Diffusion练习过程中冻结其参数,使得模型对中文语义的建模愈加精确。值得注意的是,上表的图画分辨率指练习过程中的图画分辨率,在模型推理阶段能够设置不同的分辨率。

PAI-Diffusion模型特性

为了愈加便于广大用户运用PAI-Diffusion模型,咱们从如下几个方面具体介绍PAI-Diffusion模型的特性。

丰厚多样的模型微调办法

PAI-Diffusion模型和社区Stable Diffusion等模型的参数量一般在十亿左右。这些模型的全量参数微调往往需要消耗很多核算资源。除了规范的模型微调,PAI-Diffusion模型支撑多种轻量化微调算法,支撑用户在核算量尽可能少的情况下,完成模型的特定范畴、特定场景的微调。以下,咱们也给出两个轻量化微调的示例。

运用LoRA进行模型轻量化微调

PAI-Diffusion模型能够运用LoRA(Low-Rank Adaptation)算法进行轻量化微调,大幅下降核算量。调用开源脚本train_text_to_image_lora.py,咱们同样能够完成PAI-Diffusion中文模型的轻量化微调。练习指令示例如下:

export MODEL_NAME="model_name"
export TRAIN_DIR="path_to_your_dataset"
export OUTPUT_DIR="path_to_save_model"
accelerate launch train_text_to_image_lora.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --train_data_dir=$TRAIN_DIR \
  --resolution=512 --center_crop --random_flip \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --max_train_steps=15000 \
  --learning_rate=1e-04 \
  --max_grad_norm=1 \
  --lr_scheduler="cosine" --lr_warmup_steps=0 \
  --output_dir=$OUTPUT_DIR

其间,MODEL_NAME是用于微调的PAI-Diffusion模型称号或途径,TRAIN_DIR是练习集的本地途径,OUTPUT_DIR为模型保存的本地途径(只包含LoRA微调参数部分)。当模型LoRA轻量化微调结束之后能够运用如下示例代码进行文图生成:

from diffusers import StableDiffusionPipeline
model_id = "model_name"
lora_path = "model_path/checkpoint-xxx/pytorch_model.bin"
pipe = StableDiffusionPipeline.from_pretrained(model_id)
pipe.unet.load_attn_procs(torch.load(lora_path))
pipe.to("cuda")
image = pipe("input text").images[0]  
image.save("result.png")

其间,model_path即为微调后的模型保存的本地途径(只包含LoRA微调参数部分),即前一过程的OUTPUT_DIR;model_id为原始的没有经过LoRA微调的模型。

运用Textual Inversion进行模型定制化轻量微调

因为PAI-Diffusion模型一般用于生成各种通用场景下的图画,Textual Inversion是一种定制化轻量微调技能,使模型生成原来模型没有学会的、新的概念相关图画。PAI-Diffusion模型能够运用Textual Inversion算法进行轻量化微调。同样地,咱们能够运行脚本textual_inversion.py,练习指令示例如下:

export MODEL_NAME="model_name"
export TRAIN_DIR="path_to_your_dataset"
export OUTPUT_DIR="path_to_save_model"
accelerate launch textual_inversion.py \
  --pretrained_model_name_or_path=$MODEL_NAME \
  --train_data_dir=$TRAIN_DIR \
  --learnable_property="object" \
  --placeholder_token="<小奶猫>" --initializer_token="猫" \
  --resolution=512 \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --max_train_steps=100 \
  --learning_rate=5.0e-04 --scale_lr \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --output_dir=$OUTPUT_DIR

其间,MODEL_NAME是用于微调的PAI-Diffusion模型称号,TRAIN_DIR是前述练习集的本地途径,OUTPUT_DIR为模型保存的本地途径。其间placeholder_token是与新的概念相关的文本,initializer_token是与新的概念密切相关的字(用于初始化新的概念对应的参数),这儿咱们以小奶猫为例。当模型轻量化微调结束之后能够运用如下示例代码进行文图生成:

from diffusers import StableDiffusionPipeline
model_path = "path_to_save_model"
pipe = StableDiffusionPipeline.from_pretrained(model_path).to("cuda")
image = pipe("input text").images[0]  
image.save("result.png")

其间,model_path即为微调后的模型保存的本地途径,即前一过程的OUTPUT_DIR。注意在运用微调后的模型生成包含新的概念的图画时,文本中新的概念用过程二中的placeholder_token表示,例如:

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

可控的图画编辑功用

AIGC系列模型的潜在危险在于简单生成不可控的、带有违法信息的内容,影响了这些模型鄙人游事务场景中的运用。PAI-Diffusion中文模型支撑多种可控的图画编辑功用,允许用户对生成的图画内容作出约束,从而使得成果愈加可用。PAI-Diffusion中文模型对StableDiffusionImg2ImgPipeline做到彻底兼容,这一文本引导的图画编辑Pipeline允许模型在给定输入文本和图画的基础上,生成相关的图画,示例脚本如下:

from diffusers import StableDiffusionImg2ImgPipeline
pipe = StableDiffusionImg2ImgPipeline.from_pretrained("model_name").to("cuda")
image = pipe(prompt="input text", image=init_image, strength=0.75, guidance_scale=7.5).images[0]
image.save("result.png")

以下给出一个输入输出的示例:

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

场景定制化的功用支撑

除了用于生成艺术大图,经过对PAI-Diffusion中文模型进行继续预练习,咱们也能够得到高度场景化的中文模型。以下是PAI-Diffusion中文模型在美食数据上继续预练习后生成的成果,能够看出只需拥有高质量的事务数据,能够产出针对不同事务场景的Diffusion模型。这些模型能够进一步与LoRA、ControlNet等技能进行无缝结合,做到与事务更契合、更可控的图画编辑与生成。

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

模型的运用和下载

在开源社区运用PAI-Diffusion中文模型

为了便利开源社区运用这些模型,咱们将这两个模型接入了两个知名的开源模型分享社区HuggingFace和ModelScope。以HuggingFace为例,咱们能够运用如下代码进行模型推理:

from diffusers import StableDiffusionPipeline
model_id = "alibaba-pai/pai-diffusion-artist-large-zh"
pipe = StableDiffusionPipeline.from_pretrained(model_id)
pipe = pipe.to("cuda")
prompt = "雾蒙蒙的日出在湖面上"
image = pipe(prompt).images[0]  
image.save("result.png")

在ModelScope的运用接口示例如下:

from modelscope.pipelines import pipeline
import cv2
p = pipeline('text-to-image-synthesis', 'PAI/pai-diffusion-artist-large-zh', model_revision='v1.0.0')
result = p({'text': '雾蒙蒙的日出在湖面上'})
image = result["output_imgs"][0]
cv2.imwrite("image.png", image)

此外,咱们也在EasyNLP算法结构中开设了Diffusion算法专区(链接),提供各种PAI-Diffusio模型的运用脚本和教程。

在PAI-DSW运用PAI-Diffusion中文模型

PAI-DSW(Data Science Workshop)是阿里云机器学习平台PAI开发的云上IDE,面向不同水平的开发者,提供了交互式的编程环境(文档)。在DSW Gallery中,提供了各种Notebook示例,便利用户轻松上手DSW,建立各种机器学习运用。咱们也在DSW Gallery中上架了运用PAI-Diffusion中文模型的Sample Notebook,欢迎咱们体验!

PAI-Diffusion中文模型全面升级,海量高清艺术大图一键生成

免费领取:阿里云机器学习平台PAI为开发者提供免费试用额度,包含DSW、DLC、EAS多款产品。free.aliyun.com/?pipCode=le…

未来展望

在这一期的工作中,咱们对PAI-Diffusion中文模型的作用和功用进行了大幅扩展,使得图画生成质量的大幅提高、风格多样化。一起,咱们支撑包含LoRA、Textual Inversion等多种精细化模型微谐和编辑功用。此外,咱们也展现了多种场景化定制方案,便利用户在特定场景下练习和运用自己的Diffusion中文模型。在未来,咱们方案进一步扩展各种场景的模型功用。

阿里灵杰回顾

  • 阿里灵杰:阿里云机器学习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%以上