前言
从零入门AI生图原理&实践 是 Datawhale 2024 年 AI 夏令营第四期的学习活动(“AIGC”方向),基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展的实践学习。
第四期学习接近尾声很感谢Datawhale给我提供的学习机会我会再接再厉,接下来我给大家分享一下个人跑通task3的一些经验和方法。
正文
背景引入
一、文生图的历程与基石
首先,通过社区提供的学习资料和PPT,对文生图的历程与基石进行了快速的了解,以下为梗概:
二、文生图基础知识
prompts (提示词)提示词为模型生成图像提供引导,通常包含主体描述、细节描述、修饰词、艺术风格、艺术家等,在给出prompts的同时也可给出负向prompts。 LoRA
Low-Rank Adaptation (LoRA),即低秩适应。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用于对预训练好的大模型进行针对性微调,以实现对特定主题、风格或任务的精细化控制。
论文链接:https://arxiv.org/abs/2106.09685 ComfyUI
一个工作流工具。通过直观的界面和集成的功能,用户可以轻松地进行模型微调、数据预处理、图像生成等任务,从而提高工作效率和生成效果。
链接:https://github.com/comfyanonymous/ComfyUI ControlNet
一种可附加到预训练的扩散模型(如Stable Diffusion模型)上的可训练神经网络模块,通过引入额外的空间条件控制(例如边缘图、人体骨架、分割图、深度图等),来实现更细粒度的空间控制。
论文链接:https://arxiv.org/abs/2302.05543
二、文生图的内容:
(1)文生图主要以SD系列基础模型为主,以及在其基础上微调的lora模型和人物基础模型等。
(2)提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家。
举个例子
【promts】A movie photo of a teenager playing basketball, an illustration of a rabbit dressed as a police officer, a picture of a kitten watching a movie, an illustration of a blonde girl
【负向prompts】(lowres, low quality, worst quality, low contrast, cropped
(3)Lora:Stable Diffusion中的Lora(LoRA)模型是一种轻量级的微调方法,它代表了“Low-Rank Adaptation”。Lora不是指单一的具体模型,而是指一类通过特定微调技术应用于基础模型的扩展应用。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用来对预训练好的大模型进行针对性优化,以实现对特定主题、风格或任务的精细化控制。
(4)ComfyUI 是一个工作流工具,主要用于简化和优化 AI 模型的配置和训练过程。通过直观的界面和集成的功能,用户可以轻松地进行模型微调、数据预处理、图像生成等任务,从而提高工作效率和生成效果。在ComfyUI平台的前端页面上,用户可以基于节点/流程图的界面设计并执行AIGC文生图或者文生视频的pipelinetask3启动
part1.认识了解comfyUI
GUI 是 "Graphical User Interface"(图形用户界面)的缩写。简单来说,GUI 就是你在电脑屏幕上看到的那种有图标、按钮和菜单的交互方式。
ComfyUI 是GUI的一种,是基于节点工作的用户界面,主要用于操作图像的生成技术,ComfyUI 的特别之处在于它采用了一种模块化的设计,把图像生成的过程分解成了许多小的步骤,每个步骤都是一个节点。这些节点可以连接起来形成一个工作流程,这样用户就可以根据需要定制自己的图像生成过程。
1.1 ComfyUI图片生成流程
ComfyUI的优势
模块化和灵活性:ComfyUI 提供了一个模块化的系统,用户可以通过拖放不同的模块来构建复杂的工作流程。这种灵活性允许用户根据自己的需求自由组合和调整模型、输入、输出、和其他处理步骤。
可视化界面:ComfyUI 提供了直观的图形界面,使得用户能够更清晰地理解和操作复杂的 AI 模型和数据流。这对没有编程背景的用户特别有帮助,使他们能够轻松构建和管理工作流程。
多模型支持:ComfyUI 支持多个不同的生成模型,用户可以在同一平台上集成和切换使用不同的模型,从而实现更广泛的应用场景。
调试和优化:通过其可视化界面,ComfyUI 使得调试生成过程变得更简单。用户可以轻松地追踪数据流,识别并解决问题,从而优化生成结果。
开放和可扩展:ComfyUI 是一个开源项目,具有高度的可扩展性。开发者可以根据需要编写新的模块或插件,扩展系统功能,并根据项目需求进行定制。
用户友好性:尽管其功能强大,但 ComfyUI 仍然保持了用户友好性,即使对于复杂任务,也能以相对简单的方式完成,使其成为生成式 AI 工作流程管理的有力工具。
快速跑通ComfyUI教程
首先,我们依旧选择使用魔搭社区提供的Notebook和免费的GPU算力体验来体验ComfyUI。
接下来,下载脚本代码文件
下载安装ComfyUI的执行文件
和task1中微调完成Lora文件
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors_test_comfyui.git
mv kolors_test_comfyui/* ./
rm -rf kolors_test_comfyui/
mkdir -p /mnt/workspace/models/lightning_logs/version_0/checkpoints/
mv epoch=0-step=500.ckpt /mnt/workspace/models/lightning_logs/version_0/checkpoints/
具体操作如图
然后,进入ComfyUI的安装部署文件一键执行安装程序并且跑通代码
进入预览界面
当执行到最后一个节点的内容输出了一个访问的链接的时候,点击链接到浏览器中访问
PS:如果链接访问白屏,或者报错,就等一会再访问重试,程序可能没有正常启动完毕然后我们会看到注意:到这里还不能生成图片哦,要完成接下来的操作才可以。
请下载工作流脚本
需加载到刚刚安装的comfyUI上面
这里的Lora是我Task1微调训练出来的文件
链接是:/mnt/workspace/models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt
大家如有有其他的Lora文件,可以在下面截图Lora文件地址区域更换成自己的地址
加载工作流
最后,生成图片到这里,我们的图片就好了。
Part2:Lora微调
Lora简介
LoRA (Low-Rank Adaptation) 微调是一种用于在预训练模型上进行高效微调的技术。它可以通过高效且灵活的方式实现模型的个性化调整,使其能够适应特定的任务或领域,同时保持良好的泛化能力和较低的资源消耗。这对于推动大规模预训练模型的实际应用至关重要。
1.1Lora微调的原理
LoRA通过在预训练模型的关键层中添加低秩矩阵来实现。这些低秩矩阵通常被设计成具有较低维度的参数空间,这样它们就可以在不改变模型整体结构的情况下进行微调。在训练过程中,只有这些新增的低秩矩阵被更新,而原始模型的大部分权重保持不变。
1.2Lora微调的优势
快速适应新任务
在特定领域有少量标注数据
的情况下,也可以有效地对模型进行个性化调整
,可以迅速适应新的领域或特定任务。
保持泛化能力
LoRA通过微调模型的一部分,有助于保持模型在未见过的数据上的泛化能力
,同时还能学习到特定任务的知识。
资源效率
LoRA旨在通过仅微调模型的部分权重,而不是整个模型,从而减少所需的计算资源和存储空间。
1.3Lora详解
现在我们来针对可图比赛中的微调代码进行一个深入的了解。
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \ # 选择使用可图的Lora训练脚本DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \ # 选择unet模型
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \ # 选择text_encoder
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \ # 选择vae模型
--lora_rank 16 \ # lora_rank 16 表示在权衡模型表达能力和训练效率时,选择了使用 16 作为秩,适合在不显著降低模型性能的前提下,通过 LoRA 减少计算和内存的需求
--lora_alpha 4.0 \ # 设置 LoRA 的 alpha 值,影响调整的强度
--dataset_path data/lora_dataset_processed \ # 指定数据集路径,用于训练模型
--output_path ./models \ # 指定输出路径,用于保存模型
--max_epochs 1 \ # 设置最大训练轮数为 1
--center_crop \ # 启用中心裁剪,这通常用于图像预处理
--use_gradient_checkpointing \ # 启用梯度检查点技术,以节省内存
--precision "16-mixed" # 指定训练时的精度为混合 16 位精度(half precision),这可以加速训练并减少显存使用
""".strip()
os.system(cmd) # 执行可图Lora训练
至此,我们就跑通了task3,接下来不要忘记打卡哦。
总结
### 文章总结**文章标题**:从零入门AI生图原理&实践——个人学习经验分享
**背景**:
本文是Datawhale 2024年AI夏令营第四期(“AIGC”方向)的学习总结,基于魔搭社区的“可图Kolors-LoRA风格故事挑战赛”实践活动。作者分享了跑通task3的经验和方法。
**主要内容**:
1. **文生图的历程与基石**:
- **引言与定义**:文生图涉及拟合数据分布、生成模型、传输方程等基本概念。
- **发展历程**:从VAE、GAN到Flow-based Models,再到Diffusion Models的演进。
- **扩散模型**:详细介绍了正向过程、逆向过程、最终学习目标,以及SDE形式表示方式和条件扩散模型(包括Classifier-guidance和Classifier-free-guidance)。
- **Stable Diffusion**:在VAE压缩后的latent空间进行建模,以及模型加速技术(DPM-Solver、Consistency Model)。
- **Vision-Language Model(VLM)+文生图**:利用VLM进行更详细的标注,提升生成准确性。
2. **文生图基础知识**:
- **Prompts(提示词)**:提供模型生成图像的引导,包括主体描述、细节描述、修饰词、艺术风格、艺术家等。
- **LoRA(Low-Rank Adaptation)**:在Stable Diffusion中用于对预训练模型进行微调,实现对特定主题、风格或任务的精细化控制。
- **ComfyUI**:工作流工具,通过直观界面和集成功能,简化模型微调、数据预处理、图像生成等任务。
- **ControlNet**:可附加到预训练扩散模型上的神经网络模块,通过引入额外空间条件控制,实现更细粒度的空间控制。
3. **文生图实践内容**:
- **基础模型**:以SD系列模型为主,以及基于其微调的Lora模型和人物基础模型。
- **提示词写法**:包括主体描述、细节描述、修饰词、艺术风格、艺术家等。
- **Lora应用**:Stable Diffusion中的Lora模型用于精细化控制生成图像。
- **ComfyUI实践**:
- **GUI与模块化设计**:通过拖放不同模块构建工作流程。
- **优势**:模块化、灵活性、可视化界面、多模型支持、调试优化、开放可扩展性、用户友好性。
- **快速跑通流程**:使用魔搭社区提供的Notebook和GPU算力,下载并执行ComfyUI脚本,加载工作流,生成图片。
4. **Lora微调**:
- **原理**:在预训练模型关键层添加低秩矩阵,通过更新这些矩阵实现微调。
- **优势**:快速适应新任务、保持泛化能力、资源效率高。
- **代码示例**:展示可图Lora训练脚本的详细参数和命令执行。
**结论**:
通过本次学习,作者掌握了文生图的基本原理和实践方法,特别是在Stable Diffusion、LoRA、ComfyUI等工具的应用上取得了显著进展。最后,提醒读者完成打卡任务。