当前位置:   article > 正文

AIGC从入门到精通_aigc教程

aigc教程

目录

1. 概述

2. 一键起飞 

2.1 webui

2.2 基础用法​​​​​​​​​​

2.3 必装插件

2.4 ComfyUI

2.5 Fooocus

2.6 diffusers

3 LoRA

3.1 原理

3.2 训练流程和准备

3.3 上手训练

4. 深入原理

4.1 使用教程

4.2 原理

4.3 训练阶段

4.4 采样阶段​​​​​​​

4.5 采样器 

4.6 大模型微调

5. 部署

6. 商业价值​​​​​​​

        美观性、风格化和可控性是时下流行的 文成图 面临的三座大山,所谓美观性,指的是符合美学规则,不能有脸部畸变、 手指扭曲等瑕疵;所谓风格化,指的是能生成动漫、二次元等多种多样的风格;所谓可控性,指的是可以自由的控制生成图片中人物的性别、年龄、质态、种族、服装以及场景、光线等的能力. SDXL​​​​​​​在图像生成的精细度、真实性、提示词忠实度和准确性上都有显著的提高,而且再也不需要冗长的咒语才能生成差强人意的图片;LoRA仅需要数十张目标人物的图就可以高质量的生成特定人物;ControlNet大幅提升了对于姿态、线条等的控制能力. 一批批现象级应用涌现了出来,具体参见最全盘点!2023中国诞生了哪些AIGC应用产品

sd-webui​​​​​​​界面,新手建议使用

Fooocus
ComfyUI 简体中文版
ComfyUI 简体中文版

1. 概述

Stable Diffusion,简称SD,通过引入隐向量空间(而不是在像素空间扩散)来解决 Diffusion 速度瓶颈,除了可专门用于文生图任务,还可以用于图生图、特定角色刻画,甚至是超分或者修复任务。文生图模型参数量比较大,基于pixel的方法限于算力往往只能生成64x64大小的图像,比如OpenAI的DALL-E2和谷歌的Imagen,然后再通过超分辨模型将图像分辨率提升至256x256和1024x1024; 而基于latent的SD是在latent空间操作的,它可以直接生成256x256和512x512甚至更高分辨率的图像。基于latent的扩散模型的优势在于计算效率更高效,因为图像的latent空间要比图像pixel空间要小,这也是SD的核心优势。Stable Diffusion不仅是一个完全开源的模型(代码,数据,模型全部开源),而且它的参数量只有1B左右,大部分人可以在普通的显卡上进行推理甚至精调模型。毫不夸张的说,Stable Diffusion的出现和开源对AIGC的火热和发展是有巨大推动作用的,因为它让更多的人能快地上手AI作画。

Note: SD对硬件要求普遍较高,即使推理最好也要有8G以上的显存,具体性价比参见​​​​​​​常见显卡AI跑图性能、性价比表

2. 一键起飞 

2.1 webui

可参考浅谈【Stable-Diffusion WEBUI】(AI绘图)的基础和使用

Windows下推荐使用一键启动包 ,模型下载stable-diffusion-v1-5​​​​​​​, 推荐模型majicMIX realistic 麦橘写实 更多模型选择参见Stablediffusion模型与模型训练背后的事

Ai绘画模型Chilloutmix详尽解说,关于模型的超详细小知识​​​​​​​

  1. wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-py310_23.3.1-0-Linux-x86_64.sh \
  2. && sh Miniconda3-py310_23.3.1-0-Linux-x86_64.sh -b -p /opt/conda
  3. pip install diffusers transformers scipy ftfy accelerate
  4. ​git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
  5. cd stable-diffusion-webui
  6. 默认GPU运行
  7. #python launch.py --listen --api --xformers --enable-insecure-extension-access
  8. ./webui.sh --listen --api --xformers --enable-insecure-extension-access
  9. #如果没有GPU,也可以CPU运行
  10. ./webui.sh --listen --api --enable-insecure-extension-access --skip-torch-cuda-test --no-half --no-half-vae

默认参数出来的效果差强人意,需要加入较多的"咒语"才能调出,可以切换到Chilloutmix-Ni-pruned-fp16-fix模型,设置如下参数,或者后面加入不同的Lora提升效果(模型下载链接参看全网Stable Diffusion WebUI Model模型资源汇总)

2.2 基础用法​​​​​​​​​​

通用起手式 三段式表达

第一段: 画质tag,画风tag

第二段:画面主体,主体强调,主体细节概括。(主体可以是人、事、物、景)画面核心内容

第三段:画面场景细节,或人物细节,embedding tag。画面细节内容

第二段一般提供人数,人物主要特征,主要动作(一般置于人物之前),物体主要特征,主景或景色框架等

质量词→前置画风→前置镜头效果→前置光照效果→(带描述的人或物AND人或物的次要描述AND镜头效果和光照)*系数→全局光照效果→全局镜头效果→画风滤镜

画质词:(masterpiece:1.2), best quality, highres,extremely detailed CG,perfect lighting,8k wallpaper,
真实系:photograph, photorealistic,
插画风:Illustration, painting, paintbrush,
二次元:anime, comic, game CG,
3D:3D,C4D render,unreal engine,octane render,

负面词:NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)),((grayscale)), skin spots, acnes, skin blemishes, age spot, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.5), (too many fingers:1.5), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit,bad hands, missing fingers, (((extra arms and legs))),

实例: 

Prompt:masterpiece,beat quality,1girl

Negative Prompt:nsfw,blush,lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name,bad feet,big head,fused body,multiple hands,multiple legs,multiple hands,multiple breast,multiple lower legs,multiple thighs,fused body,twist body

Steps: 40, Sampler: Euler a, CFG scale: 10

 

粗略的介绍一下对于大量prompt情况下的权重控制 - 哔哩哔哩

1.权重的用法涉及到构图和添加更多元素,如果有想要调整画面元素构成比的人,一定要先在prompt配置好权重方便后续调整。
2.不要出现拼写错误,比如:(extreme detailed night sky,:1.5)
3.如果括号包含了多内容,AI只关心末尾部分prompt权重,比如(crystal_plant,flower:1.3)实际上等效crystal_plant,(flower:1.3),而并不能把他们全都包含起来一起处理,正确的块处理方式是((promptA,promptB,promptC):1.1), 用括号把他们包起来当做结构块处理。

4.颜色决定了构图,所以涉及颜色的权重最好固定死 或者不要有大幅度的改动,同样的,迭代次数也会影响色彩分布,有时候低迭代和高迭代会有构图的区别。
5.取值可以稍微的不合理,但是最好合理,比如身上的可爱蝴蝶大翅膀。
6.高的权重prompt并不会替代低权重prompt,只决定了你让AI更加去注意哪点。

7.prompt靠前的也会提高权重,这和输入顺序以及神经网络构成相关,并没有详细的计算等值 

SD出来图的经常出现脸部畸变、手指异位、模糊等瑕疵,对于要求不高的地方还能勉强使用,对于要求高的场景需要反复调试,这很考验经验和耐心,目前总结出的一些方法如下

  1. Adetailer治愈脸崩​​​​​​​
  2. adetailer adetailer​​​​​​​
  3. stablediffusion手指修复方法 各种手势姿态调整​​​​​​​
  4. Stable diffusion生成细节度拉满的超高分辨率画面

2.3 必装插件

  1. 双语对照 bilingual-localization、localization-zh_CN
  2. C站助手 Civitai-Helper
  3. prompts-all-in-one 自动翻译、收藏提示词

    4.​​​​​​​图片管理工具​​​​​​​、stable-diffusion-webui-images-browser

    5. animatediff 文生视频

    6.controlnetControlNet原理解析作用就是能够控制扩散模型,生成更接近用户需求的图,可以做到对线稿的上色以及照片转二次元人物等效果

ControlNet不同模型作用
ControlNet模型命名规则 版本号_基础模型_预处理器

        ControlNet原理就是将模型原始的神经网络锁定,设为locked copy,然后将原始网络的模型复制一份,称之为trainable copy,在其上进行操作施加控制条件。然后将施加控制条件之后的结果和原来模型的结果相加获得最终的输出。

controlnet的原理

        7.姿势编辑 openpose editor

        8.真实人像写真 EasyPhoto SDWebui艺术照插件 ​​​​​​​妙鸭相机平替EasyPhoto教程

        9. Additional Network对比不同LoRA模型效果

2.4 ComfyUI

ComfyUI全球爆红,AI绘画进入“工作流时代”?做最好懂的Comfy UI入门教程:Stable Diffusion专业节点式界面新手教学

ComfyUI-ZHO-Chinese: 简体中文版 ComfyUI

  1. git clone https://github.com/ZHO-ZHO-ZHO/ComfyUI-ZHO-Chinese
  2. cd custom_nodes
  3. git clone https://github.com/ZHO-ZHO-ZHO/ComfyUI-Manager-Zh-Chinese
  4. git clone https://github.com/florestefano1975/comfyui-portrait-master
  5. git clone https://github.com/ZHO-ZHO-ZHO/comfyui-portrait-master-zh-cn

工作流模板

2.5 Fooocus

  1. git clone https://github.com/lllyasviel/Fooocus.git
  2. cd Fooocus
  3. conda env create -f environment.yaml
  4. conda activate fooocus
  5. pip install -r requirements_versions.txt
  6. python launch.py --listen

​​​浏览器打开 IP地址:端口7860(如果是本地,具体为127.0.01:7860)即可​​​​​​​

2.6 diffusers

手写stable-diffusion - 知乎

  1. import torch
  2. from diffusers import StableDiffusionPipeline
  3. #初始化SD模型,加载预训练权重
  4. pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
  5. pipe.safety_checker = None
  6. pipe.requires_safety_checker = False
  7. #使用GPU加速
  8. pipe.to("cuda")
  9. #如GPU的内存少于10GB,可以加载float16精度的SD模型
  10. #pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", revision="fp16", torch_dtype=torch.float16)
  11. #接下来,我们就可以运行pipeline了
  12. prompt = "masterpiece, beat quality, 1girl"
  13. negative_prompt = "nsfw,blush,lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name,bad feet,big head,fused body,multiple hands,multiple legs,multiple hands,multiple breast,multiple lower legs,multiple thighs,fused body,twist body"
  14. image = pipe(prompt).images[0]
  15. image.save("test.png", "png")

LoRA Support in Diffusers

  1. from diffusers import StableDiffusionPipeline
  2. import torch
  3. model_path = "sayakpaul/sd-model-finetuned-lora-t4"
  4. pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4", torch_dtype=torch.float16)
  5. pipe.unet.load_attn_procs(model_path)
  6. pipe.to("cuda")
  7. prompt = "A pokemon with blue eyes."
  8. image = pipe(prompt, num_inference_steps=30, guidance_scale=7.5, cross_attention_kwargs={"scale": 0.5}).images[0]
  9. image.save("pokemon.png")
不同步数和cfg变化图

3 LoRA

3.1 原理

LoRA(大模型的 低秩 适配器)是一种使用少量图像来训练模型的方法,它冻结了预训练的模型权重,并将可训练的秩分解矩阵注入到 Transformer 架构的每一层,极大地减少了下游任务的可训练参数的数量。不是大模型全局微调不起,只是LoRA更有性价比,大模型参数量巨大,训练成本较高,当遇到一些下游细分任务时,对大模型进行全参训练性价比不高,同时这些下游细分任务的域比较好约束我们可以使用SD模型+LoRA微调训练的方式,只训练参数量很小的LoRA,就能在下游细分任务中取得不错的效果. LoRA 的精妙之处在于,它相当于在原有大模型的基础上增加了一个可拆卸的插件,模型主体保持不变。

不是大模型全局微调不起,而是LoRA更有性价比

LoRA 将权重变化的部分 ΔW 分解为低秩表示, 确切地说,它不需要显示计算 ΔW; 相反, LoRA 在训练期间学习 ΔW 的分解表示, 这就是 LoRA 节省计算资源的奥秘

如上所示,ΔW 的分解意味着我们需要用两个较小的 LoRA 矩阵 A 和 B 来表示较大的矩阵 ΔW。如果 A 的行数与 ΔW 相同,B 的列数与 ΔW 相同,我们可以将以上的分解记为 ΔW = AB。(AB 是矩阵 A 和 B 之间的矩阵乘法结果)

在使用 LoRA 时,我们假设模型 W 是一个具有全秩的大矩阵,以收集预训练数据集中的所有知识。当我们微调 LLM 时,不需要更新所有权重,只需要更新比 ΔW 更少的权重来捕捉核心信息,低秩更新就是这么通过 AB 矩阵实现的

        LoRA的训练逻辑是首先冻结SD模型的权重,然后在SD模型的U-Net结构中注入LoRA模块,将其并与crossattention模块结合,并只对这部分参数进行微调训练。其是由两个低秩矩阵的乘积组成。由于下游细分任务的域非常小,所以可以取得很小,很多时候我们可以取d=1。因此在训练完成之后,我们可以获得一个参数量远小于SD模型的LoRA模型。通常来说,对于矩阵,我们使用随机高斯分布初始化,并对于矩阵使用全初始化,使得在初始状态下这两个矩阵相乘的结果为。这样能够保证在初始阶段时,只有SD模型(主模型)生效。​​​​​​​

Step1: 冻结原模型(图中蓝色部分)

Step2: 训练微调两个小矩阵参数 A 和 B(图中橙色部分),可以理解为学习一个残差,只不过是通过矩阵分解的形式表达

Step3: 把模型参数矩阵相乘(BA)后,加到原来的模型参数上,形成新的模型 

        经过开源生态的持续验证,我们发现使用LoRA进行微调与SD模型全参微调的效果相差不大​​​​​​​。LoRA成为了AIGC时代的“残差模块”,SD模型的“得力助手”​​​​​​​​​​​​​​,LoRA大幅降低了SD模型训练时的显存占用,因为并不优化主模型(SD模型),所以主模型对应的优化器参数不需要存储。计算量没有明显变化,因为LoRA是在主模型的全参梯度基础上增加了“残差”梯度,同时节省了主模型优化器更新权重的过程​​​​​​​深入浅出LoRA,完整核心基础解析, 具体代码实现参见stable-diffusion-webui源码分析(8)-Lora 

LoRA具有如下优势:

  1. 与SD模型全参训练相比,LoRA训练速度更快,(几到几十分钟),使用少量图像(10多张),效果比较好。
  2. 非常低的算力要求。我们可以在2080Ti级别的算力设备上进行LoRA训练。
  3. 由于只是与SD模型的结合训练,LoRA本身的参数量非常小,最小可至3M左右。
  4. 能在小数据集上进行训练(10-30张),并且与不同的SD模型都能较好的兼容与迁移适配。
  5. 训练时主模型参数保持不变,LoRA能更好的在主模型的能力上优化学习。

但是需要注意

  • 可以加载多个不同的LoRA模型配合不同的权重叠加使用。
  • 目前SD-WEB UI还不能训练LoRA模型。
  • 适合训练人物, 训练人物特征时,需要不同角度、姿态的数据20-40张就可以了,如果要训练风格或者画风,则需要150-200张风格图片,如果是训练一个抽象概念,则数据多多益善
  1. 通用:任何网络结构都可以利用 LoRA 的思路来进行微调
  2. 可移植:微调结束后,只需要让原模型参数+新矩阵乘积,即可得到新模型。并且可以通过+/-的操作,直接进行 LoRA 的迁移
  3. 推理性能不变:模型总参数量不变,推理性能不变(相比 ControlNet 等新增参数的结构相比)

3.2 训练流程和准备

零基础入门“炼丹”,制作属于你的SD模型!模型微调原理分析教学

60分钟速通LORA训练!绝对是你看过最好懂的AI绘画模型训练教程!StableDiffusion超详细训练原理讲解+实操教学,LORA参数详解与训练集处理技巧_哔哩哔哩_bilibili

全网罕见的真人LoRA模型的训练要诀 及参数详解​​​​​​​

LoRA训练思维导图
LoRA训练流程图

LoRA训练个人经验总结与复盘LORA模型训练超入门级教程​​​​​​​

1. 确定目的 在训练LoRA模型之前,我们需要首先明确自己需要训练什么类型的LoRA,有的博主将模型分成了几个大类:人物角色、画风/风格、概念、服饰、物体/特定元素等

2. 收集素材 「大模型的选择」和「图片质量」都是收集素材的关键!在具象训练中并不是素材越多越好,一般建议20张左右即可;素材要求:不同角度,不同背景,不同姿势,不同服饰,清晰无遮挡的图片

3. 处理素材 主要包括统一素材尺寸、生成标签和优化标签

有两种生成标签的方式:BLIP即自然语言标签,比如“1个女孩在草地上开心的跳舞”;Deepbooru即词组标签(常用),比如“1个女孩,草地,跳舞,大笑”。

优化标签一般有两种方式:1)保留全部,不做删减,用此方法比较方便,但是需要用精准的关键词,才能还原想要的效果;2)删除部分特征标签,删减掉训练风格或者需要生成内容的相关。比如要生成「手绘插画」的LoRA模型,就需要保留图片素材中手绘插画风格相关的内容作为自带特征,那么就将与手绘插画相关的词语标签删除,增加触发词“shouhui或者chahua”。将“shouhui或者chahua”触发词与其风格相关的词关联,当你填写触发词后就会自带此风格

批量修改关键词的工具BooruDatasetTagManager,很多大佬推荐过,界面比较原始,好用的点是可以批量增删改查关键词,并且可以通过调整关键词位置来调整权重。当然你也可以使用VsCode,或者直接用txt调整都可以

4. 调整参数/开始训练

3.3 上手训练

脚本训练:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/111991

推荐阅读
相关标签
  

闽ICP备14008679号