Task3:进阶上分-实战优化
part1:工具初探一ComfyUI应用场景探索
ComfyUI概述
ComfyUI是一个功能强大、高度模块化的Stable Diffusion图形用户界面和后端系统,它允许用户通过链接不同的节点来构建复杂的图像生成工作流程。这些节点可以包括各种任务,如加载检查点模型、输入提示、指定采样器等。ComfyUI的用户手册提供了全面的指南,帮助用户快速入门并深入探索ComfyUI的功能。
ComfyUI的核心模块
ComfyUI 是一个基于 Stable Diffusion 的图形用户界面,它提供了多种功能模块和核心节点,使用户能够通过节点链接构建复杂的图像生成工作流程。以下是一些核心模块和节点的概述:
-
Load Checkpoint 节点:用于加载预训练的大型模型,如 sd1.0、sd1.5、sd2.0、sd3.0、sdXL 等,是开始图像生成的基础 。
-
Load Checkpoint with config 节点:这是一个高级节点,允许加载大型模型并同时应用配置文件中的设置 。
-
CLIP Set Last Layer 节点:用于对 CLIP 模型进行微调,通过设置最后一层的输出数据来提高模型在特定任务上的表现 。
-
CLIP Text Encode (Prompt) 节点:输入正反向提示词,通过 CLIP 模型编码形成引导模型扩散的条件信息 。
-
KSampler 节点:用于逐步减少潜在空间图像中的噪声,改善图像质量和清晰度 。
-
VAE Decode 节点:将潜在空间图像解码到像素级图像,通常与 VAE 模型一起使用 。
-
Save Image 节点:保存生成的图像,通常保存在 ComfyUI 的输出目录中 。
-
ComfyUI Manager:一个自定义节点工具,提供了一系列管理功能,包括安装、移除、禁用和启用 ComfyUI 的各种自定义节点 。
-
ComfyUI-Workspace-Manager:工作流程和模型管理器扩展,可在一个地方组织和管理所有工作流程、模型和生成的图像 。
-
AIGODLIKE-COMFYUI-TRANSLATION:ComfyUI 的多语言翻译插件,实现了界面和功能的本地化 。
这些核心模块和节点为 ComfyUI 的使用者提供了强大的功能,允许他们进行高效的图像生成和编辑。通过这些模块和节点的组合使用,用户可以实现包括人像生成、背景替换、图片动画化等多种创意效果。随着 ComfyUI 的不断发展,其功能和模块也在不断扩展和更新,为用户提供了更多的创作可能性。
浅尝ComfyUI工作流
利用下面八个文生图话剧,尝试生成话剧图片:
现代风,清新校园,一个文静的中国女学生,坐在明亮的教室里,专注地看着黑板,上半身,穿着整齐的白色校服,手中拿着笔记本,沉浸在学习的氛围中。
现代风,温馨午后,这位中国女学生头轻轻靠在书桌上,上半身,穿着舒适的校服,周围是轻轻翻书的声音,她已经悄然入睡。
现代风,梦幻旅途,这位中国女学生站在繁忙的街道旁,全身,穿着休闲的牛仔裤和T恤,手中拿着一杯咖啡,眼神中透露出对未来的憧憬。
现代风,豪车邂逅,一位风度翩翩的中国绅士驾驶着豪车而来,全身,穿着精致的西装,与女学生的目光相遇,两人似乎有着不言而喻的默契。
现代风,咖啡馆对话,这位中国女学生和绅士坐在咖啡馆的窗边,上半身,她手中拿着一本书,绅士则专注地听着她讲述,两人的交流充满了愉悦和轻松。
现代风,城市漫游,这位中国女学生与绅士一同在豪车中穿梭于城市的街道,全身,她穿着优雅的连衣裙,两人享受着城市的繁华与宁静。
现代风,梦醒时分,这位中国女学生从梦中醒来,上半身,穿着简单的T恤,脸上带着微笑,似乎对刚才的梦境感到满足。
现代风,回归日常,这位中国女学生回到书桌前,全身,穿着休闲的家居服,手中拿着笔,继续她的学习生活,眼中闪烁着对知识的渴望。
不带Lora
带Lora
这两组图片都是利用ComfyUI生成的,都较为符合上面的文字描述。每一张图片准确地表现了文字描述中的场景和情绪。
Part2:Lora微调
Lora(Low-Rank Adaptation)是一种微调大型神经网络模型的技术,特别是在深度学习领域中对于像Stable Diffusion这样的大型语言模型或图像生成模型。Lora通过在模型的特定部分引入低秩结构来进行微调,这样可以在不显著增加计算负担的情况下,调整模型的行为以适应新的任务或数据集。
以下是使用Lora进行微调的一些关键步骤:
-
选择模型部分:确定在模型的哪些部分引入Lora。通常,这些是模型中已经处理相关任务的层,例如文本处理或图像处理层。
-
设置Lora参数:
- Lora Rank:这是Lora中的秩参数,决定了微调的精细程度。较低的秩意味着更粗糙的调整,而较高的秩可以提供更细致的调整。
- Lora Alpha:这个参数控制了Lora层的缩放,影响微调的强度。
-
训练模型:使用你的数据集和配置好的微调参数来训练模型。监控训练过程,确保模型正在学习并适应新数据。
-
评估模型:在微调过程中和训练完成后,使用验证集或测试集来评估模型的性能。
-
保存和部署:一旦模型微调完成并且性能满意,保存模型的参数,并将其部署到实际应用中。
Lora微调是一种高效的技术,尤其适用于大型模型,因为它可以在不显著增加计算负担的情况下,实现模型的快速适应和改进。
对baseline中Lora微调的代码进行简单分析:
import os
cmd = """
python DiffSynth-Studio/examples/train/kolors/train_kolors_lora.py \
--pretrained_unet_path models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors \
--pretrained_text_encoder_path models/kolors/Kolors/text_encoder \
--pretrained_fp16_vae_path models/sdxl-vae-fp16-fix/diffusion_pytorch_model.safetensors \
--lora_rank 16 \
--lora_alpha 4.0 \
--dataset_path data/lora_dataset_processed \
--output_path ./models \
--max_epochs 5 \
--center_crop \
--use_gradient_checkpointing \
--precision "16-mixed"
""".strip()
os.system(cmd)
--pretrained_unet_path
: 指定预训练的U-Net模型的路径。--pretrained_text_encoder_path
: 指定预训练的文本编码器的路径。--pretrained_fp16_vae_path
: 指定预训练的变分自编码器(VAE)模型的路径,这里使用的是16位混合精度。--lora_rank
: 设置Lora方法中的秩,这影响模型的表达能力和训练效率。--lora_alpha
: 设置Lora方法中的alpha值,这影响参数调整的强度。--dataset_path
: 指定用于训练的数据集的路径。--output_path
: 指定模型输出的路径。--max_epochs
: 设置训练的最大轮数。--center_crop
: 启用中心裁剪,通常用于图像预处理以减少边界效应。--use_gradient_checkpointing
: 启用梯度检查点技术,这有助于节省内存。--precision "16-mixed"
: 指定训练时使用的精度,这里使用的是混合16位精度。
这里简单对比了一下epoch = 1和3的微调效果“
epoch为1
美学打分:6.455353379249573
epoch为3:
美学打分:6.362172365188599
虽然两者在美学评分上的差异并不显著,但当训练周期(epoch)为1时,生成的图像四明显描绘了一位女士,这与文本描述并不完全吻合。此外,在训练周期为1的情况下,主人公的眼神看起来都非常相似。这些观察结果表明,增加训练周期对于提高图像生成的准确性和多样性是非常必要的。
Part3 如何准备一个高质量的数据集
高质量的数据集是深度学习成功的基石,它决定了模型训练的有效性和最终模型的泛化能力。理想情况下,数据集应该包含多样化的样本,以确保模型不会对特定类型的数据产生偏见,同时也能够处理现实世界中的多变情况。这些数据需要真实地反映模型预期应用的环境,以提高模型在实际使用中的准确性和可靠性。
数据集的组织结构应该清晰,使得数据易于访问和处理,这样可以在训练过程中节省大量时间。数据集的规模也不容忽视,一般来说,数据量越大,模型的泛化能力越强。然而,也需要在数据量和训练成本之间找到平衡点。在收集和处理数据的过程中,还必须考虑到数据的合法性、隐私性和伦理问题,确保数据集的合规使用。
利用社区和公开数据平台:
例如魔搭平台就有大量的数据集用于训练。
使用专门数据集:针对特定需求,使用如ImageNet、OpenImages、Flickr、CelebA和LSUN等公开数据集,这些数据集在视觉识别和图像描述等任务中非常有用。
API和网络爬虫获取:如果需要特定类型的内容,可以通过API从图库网站如Unsplash、Pexels等抓取图片。同时,使用网络爬虫技术从互联网上抓取图片,但要特别注意版权和合法性问题。
数据合成:使用图形引擎(如Unity、Unreal Engine)或特定软件生成合成数据,这在训练如自动驾驶车辆、游戏NPC行为等模型时非常有用。
数据增强:对于数据量较小的数据集,可以通过数据增强技术如旋转、翻转、缩放、颜色变换等来增加数据多样性,提高模型的泛化能力。
这些方法提供了从寻找现有资源到创造新资源的多种途径,以构建适合特定AI任务的高质量数据集。在准备数据集的过程中,始终要关注数据的多样性、平衡性、准确性和合法性。