AI稳定生成图工业链路打造
前沿
这篇文章会以比较轻松的方式,跟大家交流下如何控制文本生成图片的质量。
要知道如何控制文本生成质量,那么我们首先需要知道我们有哪些可以控制的参数和模块。要知道我们有哪些控制的参数和模块,我们就得知道我们文本生成图片的这架机器或者这个系统,包括了哪些部件和模块。同时需要知道这些部件和模块会如何影响生成的图片质量,如此我们才能更好的去协调和控制生成图片质量。
有了图片生成机器或系统,这就相当于有了一架很牛逼的生产引擎。围绕着生产引擎必然可以配置更多的转化部件,才能让这台机器更加牛逼。但是增加哪些部件呢,又为什么要增加这些部件呢,这必然是和生产的piepleline关联的,我们的生产工序和生产工艺决定了我们该如何假设我们的piepleline。
如此我们会从以上三个层次去介绍可以如何控制图片生成。
1.该如何工业化的稳定的设计我们生产工艺和链路
2.围绕生产工艺和链路该配备哪些生产组件和部件配合我们强大生产引擎组合出牛逼生产系统
3.改如何设置好参数让我们生成引擎达到产出图质量稳定,性能优良
生产引擎——stablediffusion

如上图所示,我们的生产引擎stablediffusion引擎,主要有4大部分:
1.图输入
2.文字输入
3.生成模型
4.输出部分
图输入部分又包括两部分:图片(随机噪声、约束图片)、图片编码器(vae encode)
文字输入部分包括两部分:描述文字(prompt优化)、文字编码器(clip)
生成模型:把图编码、文编码作为原料,经过不同生成模型(生产步数、生成器ddim、sde、euler...)

输出部分:经过生成模型产出图,可以是单步也可以是多步
生产集成车间——stablediffusion_webui
webui看起来就是一张皮,或者是把各个模块串接起来的链路,感觉没什么高科技;然而这东西像插线板一样的把各个模块连接自由组合的东西,却让stablediffusion产生出强大的生成力和可能的创造力。
这东西就像是一个生产集成车间,把各种的机器设备放到了一起,并且把各组件可能需要的连接组合都预先提供转接工具。从虚线来讲就是让各种生产工序可能的串接方式和组合排序方式产生可能。
image2image是个很好工序的转接头,可以让生成的图转入到其它风格的sd模型做进一步生成,也可以转到lora控制的光照、纹理、色彩层做进一步生成。
lora也是一个很好的转接头,每个lora层可以训练控制模型的小风格:光照、色系、质感、纹理;sd基底模型不变,上面换lora层让图片经过一道一道的lora加工达到最后要的效果。
现有的生产工艺
辅助工序
编辑、修改、mask、outpaint、inpaint
Embbeding
这改变的输入部分
1.文本输入,让输入的prompt更优化,是否可能通过把人输入prompt转换成这个训练数据集的标注数据
2.文本转embbeding,是否可以用自己图文数据集合来finetune clip编码器
3.图编码,是否可以选用更适合自己数据集合的编码器vae
4.图约束,是否可以输入图结构
5.图文输入,用Dreambooth方式生成指代符代表输入embbeding,保证生成图片一致
textual investor
在大多数文本到图像模型的文本编码阶段,第一阶段涉及将提示转换为数字表示。这通常是通过将单词转换为标记来完成的,每个标记相当于模型字典中的一个条目。然后将这些条目转换为“嵌入”——特定标记的连续向量表示。这些嵌入通常作为训练过程的一部分进行学习。在我们的工作中,我们发现了代表特定的、用户提供的视觉概念的新嵌入。然后将这些嵌入链接到新的伪词,这些伪词可以像任何其他词一样合并到新句子中。从某种意义上说,正在对冻结模型的文本嵌入空间进行反演,称这个过程为“文本倒置”。

这个应该是在文本输入端编码器上做文章。Textual Inversion 训练为了 embeddings,embeddings 为 Ai 提供处理过的输入数据,告诉这个角色“具体是什么”,训练特殊的人物,角色会更好。
Dreambooth
用Dreambooth方式生成指代符代表输入embbeding,保证生成图片一致,做角色、单物体多样化很有效果。
AI生图已经进入商用落地阶段,ChatGPT也实现了通用智能对话能力,未来一段时间AI将是新一轮淘金热潮的风口。而且不像区块链比特币,AI目前国内还是十分宽松,短期内也没有一刀切的风险,合法合规赚钱相对国外还更简单。
1. 生成漂亮头像

Dreambooth模型算法生成漂亮头像
2. 角色扮演

Dreambooth模型算法角色扮演
3. 动物创意图

Dreambooth模型算法动物创意图
4. 动漫二次创作

Dreambooth模型算法动漫二次创作
5. 商品展示图

Dreambooth模型算法 商品展示图
6. 风格化模型

Dreambooth模型算法风格化模型
以上是Dreambooth的能力示范,每个能力都可以落地成不同的商业服务场景。
vae
VAE (Variational Auto-Encoder 变分自动编码器)模型有两部分,分别是一个编码器和一个解码器,常用于AI图像生成

在潜在扩散模型(Latent Diffusion Models)组成中就有VAE模型的身影。
其中编码器(encoder)被用于把图片转换成低维度的潜在表征,转换完成后的潜在表征将作为U- Net 模型的输入.
反之,解码器(decoder)将把潜在表征重新转回图片形式.
在潜在扩散模型的训练过程中,编码器被用于取得图片训练集的潜在表征(latents),这些潜在表征被用于前向扩散过程(每一步都会往潜在表征中增加更多噪声).
在推理生成时,由反向扩散过程生成的 denoised latents 被VAE 的解码器部分转换回图像格式.
所以说 ,在潜在扩散模型的推理生成过程中我们只需用到VAE的解码器部分.
WebUI中的VAE
那些比较流行预训练的模型一般都是内置了训练好的VAE模型的,不用我们再额外挂载也能做正常的推理生成(挂载后生成图像的效果会有一点点细微的区别),此时VAE pt文件的作用就像HDR ,增加一点点图片色彩空间之类的一些自定义模型
可如果一些预训练模型文件不内置VAE(或训练他们自己的VAE,此时通常会在他们的模型发布说明中告诉你从哪得到他们的VAE)。我们就必须给它找一个VAE挂载上去,用来将推理时反向扩散最后生成的 denoised latents 转换回图像格式,否则webui里最后生成输出给我们的就是类似彩噪的潜在表征(latents),此时VAE pt文件的作用就像解压软件 ,为我们解压出肉眼友好可接受的图像.
做了张图来直观地说明展示下

网络模型
hypernetwork
Hypernetworks 会对超网络的改动,与 embeddings 不同,Hypernetworks 会对模型进行微调,所以泛化效果更加好,训练画风会更好。
网络merge fix
有多个风格的网络,是否可以通过权重方式组合出介于a、b风格之间的风格
分层融合
如--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)
!python tools/merge_unet_blocks.py ./ckpt_models/xxx1.safetensors ./ckpt_models/xxx2.ckpt \
--base_alpha 0.5 \
--dump_path ./ckpt_models/merged.safetensors
你也可以,以相同的比例合并整个unet层:
链路
instruct pix2pix
instruct-pix2pix作者团队提出了一种通过人类自然语言指令编辑图像的方法。他们的模型能够接受一张图像和相应的文字指令(也就是prompt),根据指令来编辑图像。作者团队使用两个预训练模型(一个是语言模型GPT-3, 另一个是文本到图像模型Stable Diffusion) 生成大量编辑图像的样例数据,然后基于这些数据训练出InstructPix2Pix模型,能够在推理过程中适用于真实图像和用户提供的指令。由于它在前向传播中执行编辑并且不需要对每个示例进行fine-tine或 inversion,模型仅需几秒钟就可快速完成图片的编辑。


Lora
LoRA: Low-Rank Adaptation of Large Language Models 是微软研究员引入的一项新技术,主要用于处理大模型微调的问题。目前超过数十亿以上参数的具有强能力的大模型 (例如 GPT-3) 通常在为了适应其下游任务的微调中会呈现出巨大开销。 LoRA 建议冻结预训练模型的权重并在每个 Transformer 块中注入可训练层 (秩-分解矩阵)。因为不需要为大多数模型权重计算梯度,所以大大减少了需要训练参数的数量并且降低了 GPU 的内存要求。研究人员发现,通过聚焦大模型的 Transformer 注意力块,使用 LoRA 进行的微调质量与全模型微调相当,同时速度更快且需要更少的计算。
用于 Diffusers 的 LoRA
尽管 LoRA 最初是为大模型提出的,并在 transformer 块上进行了演示,但该技术也可以应用于其他地方。在微调 Stable Diffusion 的情况下,LoRA 可以应用于将图像表示与描述它们的提示相关联的交叉注意层。下图的细节 (摘自 Stable Diffusion 论文) 并不重要,只需要注意黄色块是负责建立图文之间的关系表示就行。

潜在扩散架构
Lora用作模型增量风格实例

2d风格图

lora做了光照、3d风格把2d转3d风格
生产工序
图片输入前前置处理工序(图片对齐、图片打标)
图片打标
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

图片经过几道引擎生产
图片后处理工序(图片质量打分、图片修改、)
aesthetic-gradients(根据美学权重优化图片)
插件项目地址

图片修改-loopback 迭代草图

(loopback还可配合inpaint进行修图、类似ps 美图秀秀里的修补功能)

工艺组合成piepleline
例子跟进,1周内更新一个版本
例子
https://github.com/idpen/finetune-stable-diffusion

相关文章:

AI稳定生成图工业链路打造
前沿这篇文章会以比较轻松的方式,跟大家交流下如何控制文本生成图片的质量。要知道如何控制文本生成质量,那么我们首先需要知道我们有哪些可以控制的参数和模块。要知道我们有哪些控制的参数和模块,我们就得知道我们文本生成图片的这架机器或…...

20230220华南金牌主板u盘启动
20230220华南金牌主板u盘启动 2023/2/20 10:29 百度搜索:华南金牌主板u盘启动 https://www.zhihu.com/question/498121895?utm_id0 华南金牌主板b85u盘启动怎么设置? 华南金牌主板b85u盘启动怎么设置 海的那边 上小学后才发现还是幼儿园好混…… 华南一般是F7和F1…...

测试团队都在用哪些不错的测试用例管理平台?盘点6大主流测试管理系统
测试团队使用的主流测试用例管理平台:1.PingCode ;2.TestRail;3.Testlink;4.ZephyrJira;5.TestCenter;6.飞蛾。目前市面上的测试用例管理工具有很多,但由于针对的项目、领域、目标用户ÿ…...

linux 系统编程之线程
线程 文章目录线程1 线程概念2 NPT安装线程 man page:查看指定线程的 LWP 号:3 线程的特点4 线程共享资源5 线程非共享资源6 线程的优缺点7线程常用操作1 线程号pthread_self函数:pthread_equal函数:参考代码2 错误返回值分析参考代码3 线程的…...
从0开始学python -35
Python3 File(文件) 方法 open() 方法 Python open() 方法用于打开一个文件,并返回文件对象。 在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。 注意:使用 open() 方法一定要保证关闭文件对…...
1.14 golang中的结构体
1. 结构体 Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 1.1. 类型别名和自定义类型 1.1.1. 自定义类型 在Go语言中有一些基本的数据类型,如string、整…...

原创不易,坚持更难
早上CSDN发消息,今天是创作满三年的纪念日,邀请写一篇博文,谈谈感受 开博原因 2020年是一个特殊的年份,疫情刚爆发第一年,也是第一次居家办公,从过完年就一直居家办公,一直居家了38天。2020年…...

计算机网络 | 谈谈TCP的流量控制与拥塞控制
文章目录一、TCP的流量控制1、利用滑动窗口实现流量控制【⭐⭐⭐】2、如何破解【死锁】局面❓二、TCP的拥塞控制1、拥塞控制的一般原理① 解决网络拥塞的误区② 拥塞控制与流量控制的关系【重点理解✔】2、TCP的拥塞控制方法① 接收窗口【rwnd】与拥塞窗口【cwnd】② 慢开始和拥…...
Flask入门(7):内置装饰器(钩子函数)
目录7.内置装饰器(钩子函数)7.1 before_request7.2 after_request7.3 before_first_request7.4 error_handlers7.5 template_filter7.6 template_global复习装饰器基础及其应用,可参考文章:闭包和装饰器 7.内置装饰器(…...
Java8新特性
✨作者:猫十二懿 ❤️🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 写在最前面 在企业中更多的都是使用 Java8 ,随着 Java8 的普及度越来越高,很多人都提到面试中关于Java 8 也…...
哈希表题目:设计哈希集合
文章目录题目标题和出处难度题目描述要求示例数据范围解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析题目 标题和出处 标题:设计哈希集合 出处:705. 设计哈希集合 难度 3 级 题目描述 要求 不使用任何内建的哈希表库设计一个哈希…...

java static关键字 万字详解
目录 一、为什么需要static关键字: 二、static关键字概述 : 1.作用 : 2.使用 : 三、static修饰成员变量详解 : 1.特点 : 2.细节 : ①什么时候考虑使用static关键字? ②静态变量和非静态变量的区别? ③关于静态变量的初始化问题 : ④关于静态变…...

光谱实验反射、透射光谱测量
标题反射、透射光谱测量的基本原理 暗背景/基线:Dark………………………………………………………………0% (空)白参考:Reference…………………………………………………………100% 样品反射/透射光谱:Sampl…...

【基础算法】之 冒泡排序优化
冒泡排序思想基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来(假设从小到大),即为较大的数慢慢往后排,较小的数慢慢往前排。直观表达,每一趟遍历,…...
Python | 线程锁 | 3分钟掌握【同步锁】(Threading.Lock)
文章目录概念无锁加锁死锁解决死锁概念 threading.Lock 同步锁,可以用于保证多个线程对共享数据的独占访问。 当一个线程获取了锁之后,其他线程在此期间将不能再次获取该锁,直到该线程释放锁。这样就可以保证共享数据的独占访问,…...

Linux下安装MySQL8.0的详细步骤(解压tar.xz安装包方式安装)
Linux下安装MySQL8.0的详细步骤 第一步:下载安装配置 第二步:修改密码,并设置远程连接(为了可以在别的机器下面连接该mysql) 第三步:使用Navicat客户端连接 搞了一台云服务器,首先要干的活就是…...

leaflet 绘制多个点的envelope矩形(082)
第082个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中如何根据多边形的几个坐标点来绘制envelope矩形。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共78行)安装插件相关API参考:专栏目标示例…...

CAJ论文怎么批量免费转换成Word
大家都知道CAJ文件吗?这是中国学术期刊数据库中的文件,这种文件类型比较特殊。如果想要提取其中的内容使用,该如何操作呢?大家可以试试下面这种免费的caj转word的方法,多个文档也可以一起批量转换。准备材料:CAJ文档、…...
面试必问: 结构体大小的计算方法
结构体大小的计算需同时满足以下几点 一、结构体成员的偏移量必须是当前成员大小的整数倍。(0是任何数的整数倍) 举一个例子 struct Test1{char a; // 当前偏移量为0,是char所占字节数1的整数倍 所以所占大小为1char b; …...
Java中super函数的用法
1 问题 Java中super函数有很多方法,在使用的时候我们应该如何正确区分? 2 方法 三种用法: 访问父类的方法。 调用父类构造方法。 访问父类中的隐藏成员变量。 class A{ int x,y; A(int x,int y){ System.out.println("A"); } } cla…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
第7篇:中间件全链路监控与 SQL 性能分析实践
7.1 章节导读 在构建数据库中间件的过程中,可观测性 和 性能分析 是保障系统稳定性与可维护性的核心能力。 特别是在复杂分布式场景中,必须做到: 🔍 追踪每一条 SQL 的生命周期(从入口到数据库执行)&#…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...