打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
社区供稿 | AI 生成图 — 打造工业化链路

AIFat有话对你说

近期,ChatGPT持续发酵。究竟“炒作”还是“机会”,我相信“真相”永远属于“智者”——善于发现和学习的人。本篇文章笔者是拥有10+年码龄,从事人工智能领域的爱好者和分享者。主要内容是如何利用文本控制图像生成,这堪称是文本和图像融合的最最最...前瞻性技术。

引言

ChatGPT之所以“火”,是因为具有某种神奇的“生成能力”或一定的“创造力”。本篇文章笔者希望和大家分享的内容就是上述所说的“生成能力”在文本和计算机视觉融合领域的应用——教大家如何借助现有AI工具用文本来控制图片生成的方法。

我们先通过两幅图看看现有技术能达到什么程度?

(图片摘自其他媒体资源)

利用“文本-图片生成器”或“文本-图片生成系统”(后续我们统称),我们可以实现文本到目标图片的转化,或者简短文本+图片向目标图片的转化。如果将“图片”比作“产品”,那么,“图片生成系统”就是“生产车间”要想得到优质的图片,我们就必须清楚图片在生产车间加工时需要经过哪些流程和工序?期间,需要什么样的机器?这些机器有哪些零部件?具体到生产过程中,针对某种“特定需求的图片”,我们又该如何调整这些机器的零部件和参数以达到最佳效果?

我们将从以下5个层次去介绍控制整个图片生成过程以确保稳定生成高质量的图片。前4个部分带大家了解控制文本生成图的框架和内部工序。最后一部分带大家介绍“控制文本生成图片”的实现步骤。

  1. 生产引擎 。 图片生成系统核心部件。

  2. 影响生产引擎的其他工序 通过影响数据或特征生成等方式辅助生产引擎,使得生产引擎能发挥更大作用。

  3. 网络结构。网络结构是生产引擎的内部网络,其架构影响图片最终生成效果。

  4. 生成链路。

  5. 实现步骤/工序。

1

生产引擎

— stablediffusion

图片生产引擎是整个“文本-图片生成器”的最核心部分。它是实现数字化媒体图片制作的软件,通常具有可视化编辑界面(stablediffusion_webUI),可以用于制作图片,比如最近火到差点被艺术家举报的stablediffusion ,就是强大的生产引擎。

图1. 生产引擎 (stablediffusion)

图片生产引擎包括4个部分

1. 图片输入。包括图片(随机噪声、约束图片)、图片编码器(vae encode)

2. 文字输入。又涉及描述文字(prompt优化)、文字编码器(clip)

3. 生成模型。即把图编码、文编码作为原料,塞进不同生成模型中。此过程可能会影响最终效果的方法或参数有:生产步数、生成器ddim、sde、euler...如图2所示。

4. 输出部分。经过生成模型输出最终效果图,可以是单步或多步生成图。

图2. 生成模型部分使用的不同采样器

生产集成车间

那么,我们通过什么方式将各种模块组合起来?这里我们使用stablediffusion_webUI实现各种模块自由组合,它的作用犹如面包板,如图3所示,它既可以用作插板,也可以用作转接头。下面我们给大家介绍2种可以用作转接头的工具:

(1).  image2image. 它是个很好工序的转接头,可以让生成的图转入到其它风格的sd模型做进一步生成,也可以转到lora控制的光照、纹理、色彩层做进一步生成。

(2). lora. lora也是一种非常不错的转接头,每个lora层可以训练控制模型的小风格:光照、色系、质感、纹理;sd基底模型不变,上面换lora层让图片经过一道一道的lora加工达到最后要的效果。

webUI界面化操作大大降低图片生产引擎系统的使用门槛,使其发挥更强大的生成能力和创造能力,如图4所示。

图3. 面包板

图4. webUI(该图片来自AIFat社区)

2

影响生产引擎的其他工序

要让生产引擎生成图片的效果达到最佳状态,就需要其他工序辅助。比如,对原始图片编辑、修改、mask、outpaint、inpaint,也可以通过Embbeding、textual inversion、Dreambooth、VAE等方法来改变数据特征从而大幅度提升最终图片生成效果。

(1) Embedding

生产引擎Input输入数据可以是文本和图片两种形式。将非结构的文本和图片转为计算机可理解的过程又分:

1.文本直接转化。让输入的prompt更优化,可通过把人输入prompt内容转换成这个训练数据集的标注数据。

2.文本转Embedding。可用自己图文数据集合来finetune clip编码器。

3.图编码。可选用更适合自己数据集合的编码器VAE。

4.图约束。可输入图结构。

5.图+文输入。用Dreambooth方式生成指代符代表输入embbeding,保证生成图片一致。

(2) Text Inversion

在大多数文本到图像模型的文本编码阶段,第一阶段,涉及将提示转换为数字表示。这通常是通过将单词转换为标记来完成的,每个标记相当于模型字典中的一个条目。第二阶段,将这些条目转换为“词嵌入”——特定标记的连续向量表示。这些词嵌入通常作为训练过程的一部分进行学习。在我们的工作中,我们发现了代表特定的、用户提供的视觉概念的新嵌入。然后将这些嵌入链接到新的伪词,这些伪词可以像任何其他词一样合并到新句子中。从某种意义上说,是对冻结模型的文本嵌入空间进行反演,称这个过程为“文本倒置”。

图5. Text Inversion

(3) Dreambooth

Dreambooth主要功能是让用户在现有图像中添加各种视觉效果和特效,它可以提供一系列的滤镜、边框、贴纸和文字效果,使用户可以对图像进行编辑和加工,使其变得更有趣、更富创意和更具表现力,也能提供一些高级功能,自动去除图像背景、替换背景、调整颜色和对比度等,以及对图像进行剪裁和旋转等基本编辑操作。

采用Dreambooth方式生成指代符代表输入embedding,保证生成图片一致,做角色、单物体多样化很有效果。[图6-图11]是Dreambooth的演示效果。

图6. 漂亮的大头贴

图7. 造型切换/角色扮演

图8. 萌宠创意

图9. 动漫创作

图10. 盆栽/商品陈列

图11. 多种风格模式

(4) VAE

VAE (Variational Auto-Encoder 变分自动编码器) ,由编码器和解码器组成,常用于AI图像生成,也可以通过改变embedding层影响图片生成效果。

在潜在扩散模型(Latent Diffusion Models)组成中就有VAE模型的身影。其中,编码器(encoder)被用于把图片转换成低维度的潜在表征,转换完成后的潜在表征将作为U-Net 模型的输入。而解码器(decoder)则将把潜在表征重新转回图片形式。

在潜在扩散模型的训练过程中,编码器被用于取得图片训练集的潜在表征(latents),这些潜在表征被用于前向扩散过程(每一步都会往潜在表征中增加更多噪声)。在推理生成时,由反向扩散过程生成的 denoised latents 被VAE 的解码器部分转换回图像格式。

所以,在潜在扩散模型的推理生成过程中我们只需用到VAE的解码器部分。

图12. VAE

3

网络结构

网络结构也是影响文本控图效果的因素之一。下面我们介绍3种网络结构:

(1) Hypernetworks

Hypernetworks 会对超网络进行改动,与embedding不同,Hypernetworks 会对模型进行微调。因此,泛化效果更加好,训练画风也会更好。

(2) 网络merge fix

如果有多个风格的网络,是否可以通过权重方式组合出介于a、b风格之间的风格。

!python tools/merge_unet_blocks.py ./ckpt_models/xxx1.safetensors ./ckpt_models/xxx2.ckpt \--base_alpha 0.5 \--dump_path ./ckpt_models/merged.safetensors

(3) 分层融合

--input_blocks '0:0.3',0是input层序号,0.3是第二个权重的占比,多层描述之间以英文逗号分隔,层内以英文冒号分隔。这里的权重比例指的是第二个权重的占比。如不需要融合middle_blocks,可以直接删除--middle_blocks这一行。支持safetensors格式和ckpt格式权重的融合与保存(根据文件格式自动判断)。

!python tools/merge_unet_blocks.py ./ckpt_models/xxx1.safetensors ./ckpt_models/xxx2.safetensors \--input_blocks '0:0.5, 1:0.5, 2:0.5, 3:0.6, 4:0.5, 5:0.5, 6:0.5, 7:0.5, 8:0.5, 9:0.5, 10:0.5, 11:0.5' \--middle_blocks '0:0.5, 1:0.5, 2:0.6' \--output_blocks '0:0.5, 1:0.5, 2:0.5, 3:0.6, 4:0.5, 5:0.5, 6:0.5, 7:0.5, 8:0.5, 9:0.5, 10:0.5, 11:0.5' \--out '0:0.5, 2:0.3' \--time_embed '0:0.5, 2:0.3' \--dump_path ./ckpt_models/merged.ckpt# 以上这段等价于只为特别层指定融合时的比例,其他层融合时共用基础比例--base_alpha 0.5

4

生成链路

生成链路指的是从数据输入到图片生成全链路。以下我们会介绍instruct pix2pix链路以及一种打造生产链路的重要工序Lora.

(1) instruct pix2pix

instruct-pix2pix作者创立的团队提出了一种通过人类自然语言指令编辑图像的方法。他们的模型能够接受一张图像和相应的文字指令(也就是prompt),根据指令来编辑图像。该团队使用两个预训练模型(语言模型GPT-3和文本到图像模型Stable Diffusion)  生成大量编辑图像的样例数据,然后基于这些数据训练出InstructPix2Pix模型,能够在推理过程中适用于真实图像和用户提供的指令。由于它在前向传播中执行编辑并且不需要对每个示例进行fine-tine或 inversion,模型仅需几秒钟就可快速完成图片的编辑。如下组图1所示:

组图1. instruct-pix2pix

再来看一组放大版instruct pix2pix生成过程

组图2.  instruct-pix2pix

看到这里,是不是文本控制图片生成强大的功能顿生崇拜之心。

(2) Lora

LoRA(Low-Rank Adaptation of Large Language Models ):是微软研究员引入的一项新技术,主要用于处理大模型微调的问题。

目前超过数十亿以上参数的具有强能力的大模型 (例如 GPT-3) 通常在为了适应其下游任务的微调中会呈现出巨大开销。LoRA 建议冻结预训练模型的权重并在每个 Transformer 块中注入可训练层 (秩-分解矩阵)。因为不需要为大多数模型权重计算梯度,所以大大减少了需要训练参数的数量并且降低了 GPU 的内存要求。

研究人员发现,通过聚焦大模型的 Transformer 注意力块,使用 LoRA 进行的微调质量与全模型微调相当,同时速度更快且需要更少的计算。

用于 Diffusers 的 LoRA

尽管 LoRA 最初是为大模型提出的,并在 transformer 块上进行了演示,但该技术也可以应用于其他地方。在微调 Stable Diffusion 的情况下,LoRA 可以应用于将图像表示与描述它们的提示相关联的交叉注意层,如图所示。

图13. LoRA  (图片摘自 Stable Diffusion 论文)

说明:上图细节并不重要,只需要注意黄色块是负责建立图文之间的关系表示就行。

下面图14通过LoAR,依次做了光照、3D风格转化最终转化成3d风格色彩明亮的图15。是不是让图片顿时有了高级感、灵动性。

图14.

2d风格图

图15.

3d风格图

5

实现工序步骤

按照实现流程分,文本控制生成图全过程又分为:

  1. 图片输入前置处理工序,包括:图片对齐、图片打标。

  2. 工艺组合成piepleline,详见:https://github.com/idpen/finetune-stable-diffusion,后续我们将继续给大家更新例子。所以,请持续关心我们输出的内容哦~

  3. 图片生成后期工序,包括:图片质量打分、图片修改

(1) 图片输入前置处理工序—图片打标

- CodeFormer(pth权重文件)(图片&脸部修复)

  • 下载pth到对应文件夹下

- torch_deepdanbooru

  • 先在deepdanbooru的模型读取路径

  • 再把pt权重文件下到该路径即可

- deepbooru

  • 老黄历现在不需要了,只需准备上面torch_deepdanbooru的权重文件 deepbooru 分析图片的tag&自训练前对数据集的文本分析

  • 安装相应依赖 (注意依赖中包含tensorflow及tensorflow-io)

  • github 上下载 https://github.com/KichangKim/DeepDanbooru/releases/tag/v3-20211112-sgd-e28

  • 解压后放到models/deepbooru目录下即可

ESRGAN (图片修复)

  • 下载pth到对应文件夹下

- GFPGAN (用于三次元脸部修复的GAN)

  • 下载pth到对应文件夹下

- LDSR (用LDM来提升分辨率)

  • 下载pth到对应文件夹下并改名为model.ckpt

- SwinIR (另一种提升分辨率的模型)

  • 下载pth到对应文件夹下

mmdet (yolo实现的自动生成蒙版的插件的依赖存放路径)

- outpaint

数据集比例不一时、可以通过outpaint外绘来统一、避免裁掉很多细节.图: 9:16 -> 1:1。


图16. outpaint

(2) 图片生成后处期工序(图片质量打分、图片修改、)

举例:aesthetic-gradients

插件项目地址:
https://github.com/AUTOMATIC1111/stable-diffusion-webui-aesthetic-gradients

更具体的介绍在下一篇文章《【史上最全的入手教程】:打造AI作图studio之工具使用》中,喜欢本篇文章的朋友记得点赞、收藏、加关注哦~

本文转载自AI稳定生成图工业链路打造

文章链接:
https://blog.csdn.net/liangwqi?type=blog

在此,感谢作者的无私分享~

本文多数未加说明的图片选自互联网其他平台。

转载文章不代表官方立场和观点,特此说明。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
探索 StableDiffusion:生成高质量图片学习及应用
万字长文:Stable Diffusion 保姆级教程 | AI技术聚合
GAN简介及其常见应用
一文带你看遍深度学习发展的成就历程(一)
生成视频如此简单,给句提示就行,还能在线试玩
【AI绘画】:LoRA模型训练常见问题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服