Datawhale X 魔搭 AI夏令营

165 阅读8分钟

Datawhale X 魔搭 AI夏令营 Task03学习笔记

今天我学习了夏令营的第三课内容。和之前不同的是,这次并没有一个很明确的课程目标————比如生成图片————更多的是自由探索新工具的功能。

1.认识新工具:ComfyUI

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

跟随教程,我了解到COmfyUI的基础功能是以StableDiffusion模型,通过文本生成图像。而在开发中,它也逐渐有了视频生成,声音生成等功能。

ComfyUI有三个核心模块:CheckpointLoader,CLIP和VaeModel。Checkpointloader是加载最基础文件模型的部分,包括Model,CLIP、和VAE三个小部分;CLIP部分的作用是把使用者的输入变成模型可以理解的latentSapaceEmbedding电脑语言;最后的vae模块的作用是把电脑语言通过模组转化成图像。

comfy1.png

comfy2.png

此处的contro_after_generate功能是我比较在意的,这个参数代表每次迭代后的变化————我初步理解为这个参数有关于整个模型的精细度。

其他说明:名词“噪声”,个人理解为图片中的老式电视雪花点。噪声越高,图片越不清晰。

然后我了解到sampler处理器中一个叫做“SD过程”的东西。简单来说,这个过程会不断减少预设图片“predicted noise”中的噪声,每一次减少都被称为一次”迭代“ 。随着迭代次数的增加,图片中的噪声会不断被减去,直到生成一张清晰的图片。

另一件有趣的事情则是,每一次迭代减少的噪声会随迭代次数的增加而减少,用图像表达就是类似于反比例函数,如图所示:

comfy迭代噪声减少反比例函数示意图.png

不仅是每一次减少的噪声在下降,每次迭代对原图片的处理“步长”也在减小。这样的特性更有利于SD过程中后期对图片的精细化操作调整。

接着主讲人进行了对比操作:分别改变randomseeds和prompt的参数。结果是显而易见的,改变prompt参数对SD过程和结果的影响更大。也许在我自己实操的时候可以根据这个特性,适当选择改变的参数,来达到预期的修改效果。

教程中后续还提到了一些处理方法,最经典的莫过于使用欧拉求解器。不过这方面内容需要搭配同系列其他课程使用,暂时我只能了解一个大概。理论部分的最后主讲人还为我们总结了sampler的使用技巧总结,简单明了,适合新手。

comfy sampler使用总结.png

2.实践操作:在model scope中部署ComfyUI

First:与lora无关的版本

根据流程我在魔搭社区部署了GPU的实例(并且记住了Ctrl+v是黏贴)。等待十分钟第一次启动ComfyUI。

不过这时ComfyUI还不能生成图片。接下来我根据教程把一段新的代码编入原来的文件————第一次我使用的是与lora无关的脚本,没有变动关键词以外的参数得到了这组图片:(后附关键词)

UI生成 白毛老登.png

UI生成 翅膀美女.png

UI生成 狼.png

UI生成 女巫.png

UI关键词组1.png

眼见运行一次UI的时间比baseline快多了,我想着完全可以进行一些别的探索。首先我自己总结出了一些UI关键词对应意义:

cinematic(电影的) illustration(适合想象力丰富的图片) photography(普通图片) anime screencap of....(二次元风格)

若想一次性生成多张图片,用|分割。

首先我输入中文来检测这个模型是否只认可英文。很遗憾,好像事实如此。不过此时出现了一个很有趣的现象:我只输入了一组关键词,最后却得到两张图像。

我日!两张图!.png

我询问了通义千问得到了这个回答:

通义千问:啥 两张图.png

不过目前我也不清楚这几个设置在哪,而且图片数量对我的操作影响不大。所以我决定先不管这个事,转而换了一个scheduler看看效果:

换个scheduler看看效果.png

这次的结果就更偏向魔幻电影的风格?总之我很喜欢,并且记住了这个scehduler的名字。接下来我又尝试了几个别的scheduler的效果如下:

继续换scheduler.png (这一次我不清楚为什么还生成了一个白发贵族女性。可能多了一张图的原因真的是UI在尝试不同风格吧)

再换个scheduler.png

我尼玛继续换.png

这下我很确定多一张图是UI的风格尝试了。不仅如此,我还尝试了修改seed和contro_after_generate等参数,得到了这些作品:

换点参数.png

Second:有关lora的尝试

跟随教程我输入了与lora有关的脚本重启了ComfyUI。不过这次我的ComfyUI报错了,只能重新从头下载,花了不少时间,所以并没有非常仔细地体验这部分内容。

此时我遇到了一个错误:

错误.png

检查过后我确定错误原因是脚本文件路径错误。排查以后我输入不同关键词得到了这些作品:

换换换.png

3.理论学习:lora微调的优势

lora模型本身便具有许多优点,微调的模型也是。其中最显著的一点则是简洁明了,易于上手。比如通过修改几个阿拉伯数字就能对生成图片的过程进行精细调整。下面这个表格列出了其中几个可修改参数的含义:

lora参数.png

接着我了解了Unet,VAE和文本编码器之间的关系:

  • UNet:负责根据输入的噪声和文本条件生成图像。在Stable Diffusion模型中,UNet接收由VAE编码器产生的噪声和文本编码器转换的文本向量作为输入,并预测去噪后的噪声,从而生成与文本描述相符的图像
  • VAE:生成模型,用于将输入数据映射到潜在空间,并从中采样以生成新图像。在Stable Diffusion中,VAE编码器首先生成带有噪声的潜在表示,这些表示随后与文本条件一起输入到UNet中
  • 文本编码器:将文本输入转换为模型可以理解的向量表示。在Stable Diffusion模型中,文本编码器使用CLIP模型将文本提示转换为向量,这些向量与VAE生成的噪声一起输入到UNet中,指导图像的生成过程

只有这三者紧密配合才能得到最终的图像。不过在此之前,一个高质量的训练素材图集是必不可少的。

选择训练图集时,我们首先要明确自己的需求和目标。比如我们生成数据的运用场景?最后数据的质量和数量?这些都是影响我们数据集选择的重要因素。

确定了数据集的类型后就可以开始落实了。数据集的来源大致可以分为以下几种:公开的数据平台(如魔搭,ImageNet等);需要API或爬虫获得的数据(如unsplash);数据合成或增强;以及私人订制。使用者可以根据自己实际需要来选择数据来源。

4.感想与总结

到这里AI夏令营的正式内容就算结束了。我在三课的学习中受益良多,不仅认识了两种Ai文生图程序,更是了解到了通义千问,modelscope等优秀工具。它们无疑可以在我大学生涯中帮到我许多。

然而我认为最大的收获还不是这些工具,而是:面对新课题时如何去好奇,去思考,去提问。作为零基础学习者,每一次的Task对我来说都是极具挑战的,别人两个小时能搞定的事情也许我需要五六个小时————不过这其中也包括我自主思考,探究的时间。每一次课题之外的探索都是很有意义的,虽然很多时候我并不能完全得到一个令自己满意的成果(比如Task02中的尝试将素材和关键词绑定),但在不断地摸索中我所获得的灵感,才是最珍贵的,

夏令营虽然结束了,但我的Ai探索之旅才将将开始。在今后的学习生活中,我会努力善用各类AI工具来提高我的效率,并且在传统课堂的基础上加上我自己的创意,开发出有我个人特色的工具。本次夏令营更像是为我拉开了一场精彩旅程的序幕————更多的惊喜仍等待着我自己去探索!