Datawhale X 魔搭AI夏令营 第四期-AIGC文生图lora方向 Task3笔记

task2中我们对baseline代码进行了精读,task3将要接着熟悉一个文生图的工作流平台工具ComfyUI,来实现一个更加高度定制的文生图,并学习了解微调的基本原理,对微调的各种参数有一个清晰的认知。

一、工具初探一ComfyUI应用场景探索

1.初识ComfyUI

1.1 什么是ComfyUI

        GUI 是 "Graphical User Interface"(图形用户界面)的缩写。简单来说,GUI 就是你在电脑屏幕上看到的那种有图标、按钮和菜单的交互方式。

        ComfyUI 是GUI的一种,是基于节点工作的用户界面,主要用于操作图像的生成技术,ComfyUI 的特别之处在于它采用了一种模块化的设计,把图像生成的过程分解成了许多小的步骤,每个步骤都是一个节点。这些节点可以连接起来形成一个工作流程,这样用户就可以根据需要定制自己的图像生成过程。

可以观看此视频更详细的了解1 万字系统剖析ComfyUI | Stable Diffusion:GUI全盘点 | ComfyUI系统性教程原理篇04 | Ai+建筑_哔哩哔哩_bilibili

总结对ComfyUI的认识:

1. ComfyUI的背景与发展历史

        ComfyUI是一款基于节点的图形用户界面(GUI),最初由开发者comfyanonymous在2023年创建,旨在简化和增强图像生成的流程。它不仅局限于Stable Diffusion,还扩展支持其他模型,如Stable Video Diffusion和Audio LDM等。ComfyUI在短时间内迅速发展,受到了广大用户的喜爱。随着开发者团队的扩展,包括新的合作者如mcmonkey4eva等,ComfyUI的功能和应用范围得到了进一步增强。团队目前正专注于将ComfyUI发展成为最好的开源AI模型推理平台​ (OpenAI Journey)​ (ComfyUI blog)。

2. ComfyUI的技术架构

        ComfyUI的核心是其模块化设计和节点系统。用户通过将不同的节点连接在一起,构建个性化的图像生成或编辑工作流程。这种设计允许用户根据需要选择和组合不同的模型、输入、输出和其他处理步骤。与其他常用的图像生成UI(如Automatic1111)相比,ComfyUI具有更高的灵活性和扩展性,尽管这也使其学习曲线更为陡峭。用户可以利用ComfyUI中的自定义节点库,进一步扩展其功能和应用场景​ (Replicate)​ (Design Input Studio)。

3. 使用案例与应用场景

        ComfyUI的应用场景广泛,从基本的图像生成到更复杂的任务如图像增强、3D视图生成、对象移除与修复等。其灵活的节点系统使得用户能够进行高度定制的图像处理,例如调整图像的亮度、对比度、饱和度,甚至可以将图像转换为音频或生成颜色调色板。由于这些功能的存在,ComfyUI不仅适用于艺术创作,还可以应用于建筑设计、游戏开发等领域​ (Design Input Studio)。

4. 用户体验与反馈

        尽管ComfyUI强大的功能吸引了大量用户,但其复杂的操作界面也给初学者带来了不小的挑战。相比于一些更为简单的界面工具,ComfyUI需要用户具备一定的技术背景。然而,这种复杂性也正是其灵活性和强大功能的来源。通过持续的社区支持和开发者的更新,ComfyUI正在逐步优化用户体验,使得其在未来能够更容易上手​ (OpenAI Journey)​ (Replicate)。

1.2 ComfyUI核心模块
核心模块有模型加载器、提示词管理器、采样器、解码器。

1.模型加载器:Load Checkpoint用于加载基础的模型文件,包含了Model、CLIP、VAE三部分,如下图:

这里选用的是kolors和chatglm3的模型,精度选择的是fp16


2.CLIP模块将文本类型的输入变为模型可以理解的latent space embedding作为模型的输入

如下图:

3.解码器:VAE模块的作用是将Latent space中的embedding解码为像素级别的图像


4.采样器:用于控制模型生成图像,不同的采样取值会影响最终输出图像的质量和多样性。采样器可以调节生成过程的速度和质量之间的平衡。
如下图:

可以看到这里有很多参数,分别是

width--像素图片的宽度   height--像素图片的高度

seed--控制噪声产生的随机种子

control_after_generate--控制seed在每次生成后得变化(这里设置为fixed固定不变)

steps--降噪的迭代步数,数值越大则信号越精准,随之生成时间增加

cfg--叫做classifier free guidance,决定prompt对生成图像的影响程度,数值越大,prompt的表现越明显

scheduler--降噪参数

denoise_strength--被噪声覆盖的内容大小

具体内容可点击查看:Docs(魔搭官方教程)

1.3 ComfyUI图片生成流程

Step1:选择模型

从可用的 AI模型列表中选择合适的模型,例如 Stable Diffusion 或其他文本到图像模型。

Step2:构建工作流

在 ComfyUl的图形界面上拖拽节点,并将它们连接起来以形成一个完整的图像生成或编辑流程。

输入必要的参数,如文本提示、图像文件等。

Step3:执行生成

运行构建好的工作流,观察生成的结果。

Step4:调整与优化

如果需要,可以根据生成的结果调整参数或修改工作流,直至获得满意的效果。

1.4 ComfyUI的优势:

模块化和灵活性:

ComfyUI 提供了一个模块化的系统,用户可以通过拖放不同的模块来构建复杂的工作流程。这种灵活性允许用户根据自己的需求自由组合和调整模型、输入、输出、和其他处理步骤。

可视化界面:

ComfyUI 提供了直观的图形界面,使得用户能够更清晰地理解和操作复杂的 AI 模型和数据流。这对没有编程背景的用户特别有帮助,使他们能够轻松构建和管理工作流程。

多模型支持:

ComfyUI 支持多个不同的生成模型,用户可以在同一平台上集成和切换使用不同的模型,从而实现更广泛的应用场景。

调试和优化:

通过其可视化界面,ComfyUI 使得调试生成过程变得更简单。用户可以轻松地追踪数据流,识别并解决问题,从而优化生成结果。

开放和可扩展:

ComfyUI 是一个开源项目,具有高度的可扩展性。开发者可以根据需要编写新的模块或插件,扩展系统功能,并根据项目需求进行定制。

用户友好性:

尽管其功能强大,但 ComfyUI 仍然保持了用户友好性,即使对于复杂任务,也能以相对简单的方式完成,使其成为生成式 AI 工作流程管理的有力工具。

2.体验ComfyUI工作流程

2.1 安装ComfyUI

 1)进入魔搭平台体验试用实例  魔搭社区

2)安装打开ComfyUI

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/   

或者直接在launcher中打开

 粘贴命令行:

 找到这个文件,点击一键运行安装脚本文件

 Restart!

 可能遇到这种警告,可以忽略也可以更新下pip库,应该不影响。

刷出这个网址就点击进入或者复制链接到浏览器打开
如果一直没有刷出这个网址的话就多运行几次

这就是ComfyUI界面:

2.2 体验ComfyUI工作流

1)不带Lora的工作流样例

首先点击load加载模型文件

点击Queue Prompt生成图像,所有节点都可以拖动。

 2)带Lora的工作流样例

同理操作:

这里选择第二个文件

提示词:二次元,长发,少女,白色背景

提示词:二次元,乌黑靓丽长发,少女,蓝色背景,坐在公园边上,地上是大理石路面

二、LoRA微调


        一些背景:现在有很多大语言模型(GPT,BERT等)因为参数量十分巨大,对其进行微调一般都需要大量计算资源和存储空间。而在实际应用中,我们所拥有的资源往往是有限的,那么我们定制模型的成本将会耗费甚多。

        一些挑战:一些微调模型的方法通常是需要对所有参数进行更改,这就导致需要大量的计算资源和空间,稍有不慎还会导致模型过拟合,反而丧失了原有良好的泛化能力。

2.1 关于LoRA


        LoRA(Low-Rank Adaptation)是一种对大型预训练模型进行高效微调的方法。通过引入可训练的低秩矩阵在模型的每一层,LoRA可以在不改变原有模型权重的情况下对其进行微调。这种方法不仅节省了资源,而且让模型具有良好的泛化能力。故LoRA在大型预训练模型的领域中发挥着重要的作用。

2.2 LoRA的核心


         低秩矩阵:首先LoRA将原始模型的权重矩阵分解为低秩矩阵,方法很巧妙,它将低秩矩阵插入到模型的每一层中进行训练,这样在模型微调过程中只需要调整少量参数并且不影响原始权重。

        参数调整效率:通过使用低秩矩阵,相比于传统的微调方法,LoRA显著减少了微调的参数数量,降低显存占用和计算需求,即使在资源有限的情况下,依旧可以对大模型进行微调。

2.3 LoRA实现方法


矩阵分解:

        在每一层中,LoRA会将权重矩阵W分解为两个低秩矩阵A和B,故有W = A x B,A的维度是d x r, B的维度r x k,r是一个远小于d和k的数,这样就能保持低秩。

        微调过程中,LoRA只对两个低秩矩阵进行更新,原始矩阵W保持不变,在模型的前向传播中,使用LoRA的权重可用公式计算。

        微调公式:W=W0​+ΔW=W0​+α×(A×B),α是一个缩放系数,通常是超参数,通常是控制低秩矩阵对原始矩阵的影响。

插入LoRA模块:

        LoRA可以插入到任何线性层(自注意力机制中的投影层或全连接层),一般情况下,LoRA会针对Transformer模型中自注意力机的‘to_q(query)’,‘to_k(key)’,‘to_v(value)’,‘to_out’等位置进行插入操作。

        在每个目标层中插入的时候会利用两个低秩矩阵替换普通的线性层。

训练过程: 

        在微调开始之前,A和B的参数会设置为随机数(正态分布初始化)初始化,保证模型在初始状态时不会偏离预训练模型的表现。

        在训练过程中,标准的反向传播算法会同时更新A和B的参数,由于A和B的参数量小,效率也将高于全量微调。

        对于超参数α的调整也是重要的,通过调节α,可以控制低秩矩阵对原始矩阵的影响程度,甚至可以达到微调有效性和模型原始能力的平衡。

2.4 LoRA的优点


高效性:LoRA大大减少了微调所需要的计算资源和存储空间,微调更加轻量级

保留原始模型能力:原始权重将保持不变,LoRA也可以令模型灵活的适应新任务,拥有良好的泛化能力

模块化设计:LoRA可以应用于各种不同的预训练模型,不需要对每个模型进行非常大的结构调整

        总的来说,LoRA是一种非常比较高效且友好的微调方法,节省大量的计算资源和存储空间,即使在资源有限的情况下,依然对大型预训练模型的调整具有良好的效果,未来LoRA还可以与其他的模型或者微调技术融合,集成为更高效,更完善的应用技术。同时自动化的方法也可以自动调节LoRA的参数和选择优化方法,简化微调模型的过程。

  • 21
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值