共计 6361 个字符,预计需要花费 16 分钟才能阅读完成。
作者:段忠杰(终劫)、刘冰雁(伍拾)、汪诚愚(熊兮)、黄俊(临在)
背景
以 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 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 模型(https://github.com/alibaba/EasyNLP),并且在 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 示意,例如:
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 中文模型在美食数据上持续预训练后生成的后果,能够看出只有领有高质量的业务数据,能够产出针对不同业务场景的 Diffusion 模型。这些模型能够进一步与 LoRA、ControlNet 等技术进行无缝联合,做到与业务更符合、更可控的图像编辑与生成。
模型的应用和下载
在开源社区应用 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 为开发者提供收费试用额度, 蕴含 DSW、DLC、EAS 多款产品。https://free.aliyun.com/?pipCode=learn
将来瞻望
在这一期的工作中,咱们对 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% 以上