【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调
首先我们继续推进网课进度。
https://space.bilibili.com/1069874770
传送门
WorldArt锦书产品介绍:
我属实是没想到这个产品居然还可以用作遗迹鉴定和名家笔记仿写这样的用途。
这些工作主要是针对英文字母在做变形,因为中文比较复杂,不适合整体变形。
同时还要配合后处理:
WordArt中文象形文字数据集:对单个汉字引入其意象进行变形。
从来没听说过的新奇数据集,有意思。
而且支持多语言文字变形,几乎囊括了东亚所有文体:这样感觉设计Logo会很方便,之前b站上我也刷到过一些教字体设计的短视频,很多需要把字的一部分用来变形或者抽象操作。
这里针对中文的变形还是局部变形效果比较好,因为中文比较复杂,整个全变了效果就比较差了。
文字仿写:相同风格文字扩充
名家的历史真迹可能样本很少,可以通过文字仿写来进行相同风格文字的扩充。
diffusion出来之前:GAN-based
文字纹理:
之前跟文字纹理相关的主要是纹理迁移的工作。
这里讲到ControlNet了,可以用不同的条件来进行控制。
三个主要难点:
文字分割:分割出带有透明通道的文字图片。
锦书体验页面:
https://www.modelscope.cn/studios/WordArt/WordArt
传送门
我玩了一下,是我打开方式不对吗?这啥啊???
个性字体:基于用户少量的手写字,来为用户生成一个完整的字体集。
需要按照模板在纸上写字然后拍照上传。
耗时比较久,15分钟以上。我自己写了一段狂草测试,他报错了……
这次效果好多了:
创意文字生成这个栏,如果勾选了改变形状,就是变形+纹理的级联(结合?);没有勾的话就只是文字纹理。
新春对联这个功能看着挺有意思,可以用名家字体写对联,也可以用自己的DIY字体来写对联。
然而这个功能现在好像没有了……
课后作业:
文字变形代码:
https://modelscope.cn/models/jyhe21/wordart_designer
文字纹理代码:
https://modelscope.cn/models/MorningsunLee/cv_sd_wordart-texttypo
虽然但是,我有点不明白,我该咋玩?我复制了链接里面的示例代码到新的实例里面跑,但是他报错说缺文件???
我暂时还没找到解决办法,先暂时搁置一下。
如果一个图像满足一个特定的人物风格和特定的人物ID,就可以认为是比较美和像。
当前大部分的人像写真工作都是基于线上训练的微调。
图生图人任务,这个也很神奇,为什么就能精准控制换脸呢?
FaceChain-Fact项目
高阶选项:实现进阶功能,比如姿态变化。
先改第一个人的,再改第二个人的。
只保留ID信息,不保留光照信息。
正常表情适配。
课后作业:
这个系列讲授的都是特别实用的AIGC前沿知识,我看完感觉知识要爆炸了,无数个github地址没有转人带根本不知道从哪下手。
另外我还刷到了Bzhan一个教调提示词工程的课程,把最后两课zero-shot和few-shot的看了一下,这两个词也是老出现在BOSS直聘和简历里面。
《【2024最新】从入门到提示词工程师:全网最通俗易懂Prompt-Learning提示词学习教程!学不会我退出IT圈!》:
https://www.bilibili.com/video/BV15jemeTEUD/?p=1&vd_source=cdfd0a0810bcc0bcdbcf373dafdf6a82
传送门
**零样本:**没有答案,但是有线索,经过已知条件推测得到答案。
**少样本:**新类别,例子很少,经过反复学习和改进掌握。
3.4虚拟试衣:介绍文生图在虚拟试衣领域的应用场景与方法:
1.模特的ID需要保留住。
2.服饰要能正确换上去。
3.避免身体的不同姿态导致褶皱发生错乱。
基于物理仿真更加传统,基于图像生成效果更好。还有一种方法是基于GAN来虚拟试衣。
Diffusion模型:建立文本与图像的对齐关系。
可控的图像生成。
截图最下方是体验链接。
可以帮助商家解决拍摄诉求。
在二次元动漫人物上依旧有很好的迁移效果。
还可以换衣之后让人物动起来:
课后作业:
VITON主要是半身像,训练要容易一些。DressCode偏向全身人像,稍微复杂一些。
不知道为什么,抱抱脸和他的官方链接都试运行不了……
3.5从图像生成到说唱数字人应用:
数字人可以分为3D的数字人和2D的数字人。
Talking Head 数字人头部技术。
轻定制数字人技术:直播场景。提前录制这个人的视频成本较高,还要进行模型训练。头部运动提前预置,容易出现不同步的情况。
依赖于底板视频:不用训练,根据新的音频局部修改面部和口型,会出现不同步。
基于单张图片生成:全局生成,更容易头部和嘴唇联动。我之前玩的一个Easy-Wav2Lip整合包应该就是这样的。
本质:嘴型和音频同步。只编辑嘴部。
vivaltalk:使用一张照片+3D表征(3D intermediate representation)来表示这个人的嘴型表情应该是什么样子+VQVQAE codebook头部运动。
还是会有误差、损失细节、不自然。
近年来技术栈从GAN逐渐换到Diffusion Model(优势:大规模文本图像数据集上pretrain)了。
实现单图驱动的数字人的关键:
ID一致性(ID preservation) 与 条件式生成模型(Conditional Generative Model) 有很强的关系。
GAN时期较为简单的图像生成:例如左上角MINIST数据集(老朋友了),输入label生成指定数字。
左下角ControlNet希望输入一些控制信息。比如Pose,Canny Edge(边缘信息)。
Tuning Base方法:右边的Dreambooth、Textual Inversion和Lora ——用一个很小很小的物体数据集(比如几张狗的图片) finetune一下diffusion的pretrained model。从而能通过一个文本的token让模型生成该对象的图片。
Animate Anyone,保持ID的很好方法Reference Net。控制信号不以ControlNet的方式加进来,而是另外与其平行的ReferenceNet。
diffusion参数初始化——通过cross attention进行连接。
cross attention空间变换能力强,能将空间上并不对齐的信号变换到跟目标信号和目标图像在空间上一致的能力。
还能保持referenced image本身的ID或语义层面的一致性(特征提取能力非常强)。
把SD的模型升级为Video的generative model。让一张图片能生成一段视频。
单图驱动的数字人:结合前面的Reference Net和Motion Module 提出的Emote Portrait Alive(简称:EMO)。
不希望出现头移出画面等badcase,采用face region,速度控制等弱控制信号。
真人√卡通√非人√动物√形象都支持。
emo复用了diffusion模型本身的VAE部分,VASA告诉我们其实可以不复用,自建一个新的autoencoder或者一个压缩的compressor模型。
解耦分别控制三部分的幅度。
课程作业:
这部分的内容比网上的PPT多。
网上的PPT资源只有这些:
Lora尝试:更换原神风格数据集
关于Lora模型微调这个事我之前一直没想好数据集用啥,但是我突然有了一个大胆的想法——
原神启动!肯定有人在网上已经做过了原神数据集,一搜果然有!这样就不用我自己拿b站上找的祖传包浆爬虫代码一顿操作猛如虎了。
https://aistudio.baidu.com/datasetdetail/188486
传送门
但这个数据集太大了,上传非常不方便,风格也不太一样,我最后没有用这个,而是自己上网手动存了原神的立绘。
经过我一顿操作猛如虎以后,更换数据集总算是成功了,下面让我们使用之前 Task02要求生成的古风少女微调提示词,看看是否变成了原神风格。
# 图片1
image1 = pipe(
prompt="原神,二次元,漫画,古风, 古色古香的学堂内,木质书桌椅排列整齐,墙上挂着几幅山水画,一盏油灯挂在一侧,散发着柔和的光芒。少女正聚精会神地聆听先生讲解,手执毛笔,准备记录,桌上摊开着一本古籍。少女身穿蓝色汉服, 黑色长发, 古典发髻, 梅花饰品, 清秀面容, 专注眼神, 古色古香的学堂, 木质书桌椅, 山水画, 油灯, 毛笔, 古籍, 上半身特写",
negative_prompt="写实风格,照片,现代服饰, 油画风格, 动作模糊, 背景杂乱, 灯光昏暗",
cfg_scale=4,num_inference_steps=50,height=1024,width=1024,
)
image1.save("原神1.jpg")
效果看起来倒像不像吧,眼睛我觉得很有原神那一套——这个眼睛给我一种旅行者荧+烟绯的混合体的感觉。
看看能不能刷新出不错的全身立绘?
# 立绘
image1 = pipe(
prompt="原神,二次元,漫画,古风, 立绘,全身图。少女身穿蓝色汉服, 黑色长发, 古典发髻, 梅花饰品, 清秀面容, ",
negative_prompt="写实风格,照片,现代服饰, 油画风格, 动作模糊, 背景杂乱, 灯光昏暗",
cfg_scale=4,num_inference_steps=50,height=1024,width=1024,
)
image1.save("原神立绘.jpg")
好像还差点意思。
我试试这个Lora后的模型学原神画风到什么程度了,把之前Task02要求生成的古风少女提示词去掉水墨风的部分,换成原神相关的提示词。
这模型学了谁,我不说,笑死。
最后看看成果吧,感觉是原神立绘作为数据集太少了,而且不是分了单一角色的很多图一起喂的那种,他不是很能学明白【原神】的画风。
所以这个结果不能说一模一样,大概率是毫不相干……
ComfyUI入门使用:
这部分的教程我非常好奇,之前就在Github上下载了ComfyUI的安装包,但是因为调不好电脑本地环境一直没能跑起来,也试过秋叶大佬的安装一键包,可惜电脑硬盘装不下了QAQ……好不容易遇到了个能白嫖的教程,我要存一下这些神奇的步骤。
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居然真的Run起来了!!!
小白第一次玩,不知道咋搞,就点了个Load按钮,然后把之前说要下载的俩模型随便选了一个确认。
然后就开始读条了!!!
但是不知道为什么,没出图???换了个模型也这样,看终端又没发现啥报错?
不死心返回文件目录,output目录下面也没有东西??
耐心等一会,出来啦~
BaseLine中的ComfyUI教程:
《1 万字系统剖析ComfyUI | Stable Diffusion:GUI全盘点 | ComfyUI系统性教程原理篇04 | Ai+建筑》:
https://www.bilibili.com/video/BV1ch4y1B7vp/?spm_id_from=333.1350.jump_directly&share_source=weixin&vd_source=cdfd0a0810bcc0bcdbcf373dafdf6a82
传送门
感觉这个视频更多是在进行大概科普,引入基础概念,不是具体的实操生成美图的教程。
目前主流的GUI一共有三种:第一种是使用范围最广的以窗口式为特征的WebUI。第二种是节点式工作流为特征且方便作为后端使用的ComfyUI。第三种只需关注提示词无需在乎各种复杂参数,就可以获得极高质量生成效果的Fooocus。
ComfyUI的工作流听这个视频描述感觉好NB,不但能画图,通过图片或者json分享工作流也很方便,还可以操作chatGPT、PPT啥的,
三种主流GUI之间并不是相互排斥和竞争的关系,他们各自的适用场景各不相同,可以根据不同的需求来使用。
我比较看好这个免费的Stable Diffusion Online,但是需要科学上网,而且页面广告有点多。
https://stablediffusionweb.com/
传送门
而且对提示词也有要求,目前好像只支持英文。
但是……不知道为什么我的Google账号登不上去,玩不了……
希望简单通过提示词生成高质量图像——选择Fooocus,省事省心。
觉得这个太基础简单需要CN等工具——选择MRE版本。
需要丰富好用的插件/更习惯图文框式的操作界面——WebUI
需要长线、定制化、自动化的专业使用——ComfyUI
想要ComfyUI的灵活性同时兼顾图文框式的操作界面——选择以ComfyUI作为后端的前端界面,如comfybox或者stableswarmUI等。
构造的过程——通过五个层级层层叠加达到最终想要的效果
ComfyUI工作区介绍:
1.模块区——添加和连线、组,按钮。
2.快捷键。
复制粘贴:Ctrl+(shift)+C/V
不加shift只复制模块和内部连线,加上以后会复制与其相关的所有连线。这样方便复制后直接使用而无需再次连线。
提示词语法、使用技巧与节点指南:
括号里写上提示词加冒号:
嵌套结构等于相乘。
仅使用括号:表示默认1.1
特别重要的一点——权重不需要手写,只需选中加权重的单词或者短语,按住ctrl加方向键的上或下就可自动出现括号,并且每次加减的幅度可以在设置里面调整。
支持提示词输入模块√多行文字输入模块√(比如note模块)
ComfyUI和WebUI 权重有所不同 ,WebUI有特殊平均化机制,可能比输入的要小,而ComfyUI输入多少就是多少。 这也是二者出图效果不同的一大关键因素。
ComfyUI有以WebUI权重输入的第三方节点。
两者使用不同的噪声生成,ComfyUI——CPU,WebUI——GPU。WebUI提供了和ComfyUI一样的生成方式。
**embedding语法:**只需要写上embedding模型的名称就行了。custom script语法会自动填充这一名称。
随机选择语法:大括号中竖线区隔的方式实现。每次运行随机选一个词执行。(注意同一批次的图选择的都是同一个)
框选住节点组,右键——save as templates,之后再用就右键——note template,便于搭建大型重复工作流。
条件的节点统一以编码之后的文本嵌入为输入。
易混的average和combine:
average:两个输入直接之间进行插值,0——第一个输入,1——第二个输入,0.5——两者中间。
combine:两个输入进行平均。
三个试验模块:
1.潜空间的保存与加载:对生成结果的复用非常方便(尤其是生成同一结果的不同变体)
2.使用Tome Patch Mode对token进行融合来提升速度的技术。适用于跑大量图和视频的用户。
3.average插值测试。比如下面这个从秋天到冬天的渐变过渡。但是差别较大的差值就容易出现突变。
4.unCLIP,revision,IP Adapter图像编码器特殊参数augmentation。发散参数,取值越高偏离原图越远越发散,直到和原图完全无关。
5.基于SDXL两款图像编码器对比。
ComfyUI工作流详解:
Task03教程:
https://datawhaler.feishu.cn/wiki/QHSTwBPFKiZxqfkA1INc1u4fn0f
添加链接描述
Lora微调:
教程中的B站视频链接:《通俗易懂理解全量微调和LoRA微调》
https://www.bilibili.com/video/BV1tthPeFEWb/?t=27.514817&spm_id_from=333.1350.jump_directly
传送门
为什么要微调?——模型在某些方面能力不够,所以通过一些训练的方法,希望把模型做一个更新,让他在之前的短板上面有提升。
基于数据和训练的方式,把原有的模型改造为新的模型。本质上是对模型参数的改动。
原有参数加上改动量产生新参数,本质上模型要学习的就是这个后面加上的新参数。
全量微调:所有参数改动的量都要找出来。
PEFT——用更少量的资源,高效微调。其中最常见的技术就是Lora。
微调——只希望改进模型的短板,其他的能力反而希望保留,所以不能把模型改动太多。不然原本的能力都消失了,也就是发生了**【模型的遗忘】。(AI版的邯郸学步是吧??)
线性代数应用:一个矩阵如果符合我们的要求,就把其用两个矩阵的乘积来替代。(100x100——100xk的矩阵乘另一个kx100的矩阵,这个k就是可变参数**,而且和矩阵的价值相关)
如果觉得这个矩阵价值没那么大,就选用小一些的k。
把W近似为A·B,需要学习的参数量从100x100变为了200+200。
而这个可随价值随地大小变的K,就是RanK。K越小越省事,一般也不会太大,多为8,16,32等。大模型参数多,K越小越节约显存空间和学习成本。
一句话总结:全量微调是学所有参数,现在只需要学习俩替代矩阵,一下子成本和需要学习的量就降下来了。
说实话,这三的关系整得我有点懵逼。应该是VAE和文本编码器输出给UNet。
补充学习部分:AIGC的应用
教程里展示了这么多应用场景总结,面试的时候可以吹牛了,赶快记下来。
视频相关的一些内容我前面的笔记有介绍,但是教程里面还有好多补充和总结的干货也不容错过!
最新图像生成技术方向:
画质修复增强:
艺术字生成:
虚拟试衣:
这篇论文的数学过程我看得很懵逼,就不多放细节赘述了。
从图像生成到说唱数字人应用
我之前用过的一个数字人整合包Easy-Wav2Lip,还挺厉害。我当时用了一张混元形意太极拳掌门人马老师的照片恶搞,让他娇滴滴地说“哇~你对我也太好了吧!”
最后就是教程的完结撒花!谢谢各位老师带来这么实用和详细的教程!