task1: 传送门
task2: 传送门
task3: 传送门
目录
Task1
赛题内容
可图Kolors-LoRA风格故事挑战赛
baseline要点讲解(请配合Datawhale速通教程食用)
Step1 设置算例及比赛账号的报名和授权
Step2 进行赛事报名并创建PAI实例
Step3 执行baseline
Step4 进行赛题提交
lora 调参参数介绍及 SD 的基础知识点(拓展)
文生图基础知识介绍
提示词
Lora
出图指引(SD WebUI):
常见出图参数说明:
常见训练参数说明:
ControlNet
Task2
AI生图技术的背景与发展
重要性
历史概览
技术原理
相关知识点
实践案例与工具
实践案例
编辑
工具概述
AI生图的挑战
技术挑战
道德与伦理挑战
社会挑战
解决方案与展望
通义千问的使用
初步了解
编程和技术支持
使用技巧
在我们的学习中可以起到的辅助
通过通义千文给我们的提示词进行出图
拓展学习scepter webui
Task3
ComfyUI
速通ComfyUI
新建实例
执行git拉取项目等命令
一键执行安装程序(大约10min)
进入预览界面
配置工作流JSON文件
K采样器的参数说明
结束动作
LoRA微调
LoRA思路
1. 步数相关 repeat / epoch / batch_size
2. 速率/质量相关 Ir学习率 / Dim网络维度 / Optimizer优化器
3. 优化器(Optimizer)
Task1
从零入门AI生图原理&实践 是 Datawhale 2024 年 AI 夏令营第四期的学习活动(“AIGC”方向),基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展的实践学习。
Datawhale官方的速通教程链接:Task 1 从零入门AI生图原理&实践
接下来我将对跑通 baseline 的细节和涉及到的知识点进行一些介绍和记录。
赛题内容
-
参赛者需在可图Kolors 模型的基础上训练LoRA 模型,生成无限风格,如水墨画风格、水彩风格、赛博朋克风格、日漫风格......
-
基于LoRA模型生成 8 张图片组成连贯故事,故事内容可自定义;基于8图故事,评估LoRA风格的美感度及连贯性
样例:偶像少女养成日记
相关作品在比赛品牌馆讨论区
可图Kolors-LoRA风格故事挑战赛
baseline要点讲解(请配合Datawhale速通教程食用)
Step1 设置算例及比赛账号的报名和授权
- 开通阿里云PAI-DSW试用
链接:https://free.aliyun.com/?spm=5176.14066474.J_4683019720.1.8646754cugXKWo&scm=20140722.M_988563._.V_1&productCode=learn
请根据教程开通免费试用,新用户需要注册并实名账号,建议使用支付宝进行登录,可以减少一些基础信息的填写。
- 在魔塔社区进行账号授权
链接:https://www.modelscope.cn/my/mynotebook/authorization
需要注意的是新用户需要先注册和绑定阿里云账号
Step2 进行赛事报名并创建PAI实例
赛事链接:https://tianchi.aliyun.com/competition/entrance/532254
PAI实例:https://www.modelscope.cn/my/mynotebook/authorization
-
如果之前试用的额度已经过期,可使用魔搭的免费Notebook实例
在账号注册、授权及报名参赛的环节不多赘述,速通教程已有详细的步骤指南,记得点开图片仔细查看。
Step3 执行baseline
按照教程新建终端,粘贴命令回车执行,这一步是为了拉取远程的baseline文件,需要等待一段时间。相关科普博客:基础git命令使用方法
git lfs install
git clone https://www.modelscope.cn/datasets/maochase/kolors.git
拉取baseline后,可以在右侧文件中看到kolor文件夹,双击进入可以看到后缀.ipyhb的baseline文件,点击打开。
相关科普博客:
接下来执行运行环境的代码块,我们需要安装 Data-Juicer 和 DiffSynth-Studio
- Data-Juicer:数据处理和转换工具,旨在简化数据的提取、转换和加载过程
- DiffSynth-Studio:高效微调训练大模型工具
有些时候因为网络及代理的问题,环境的安装容易缺漏,建议多执行几次,代码不会重复安装
安装完成后,重启kernel,不重启容易爆显存影响baseline运行
接下来请依次执行下载数据集、数据处理
在这里留一个小问题:在模型训练之前,在数据集的处理上有没有更优的方法来让数据集更优质呢?是否需要进行一些转换、模块的引入及数据清洗呢?
接下来开始进行模型微调训练:
- 下载模型
- 查看训练脚本传入参数
- 开始训练
调参对于微调模型训练尤关重要,涉及到参数量、优化器类型、训练策略等等...一个好的参数配置可以让微调模型的效果出人意料。
在后面我会附上自己整理的 lora 调参参数介绍及 Stable Diffusion(SD) 的基础知识,感兴趣可以滑下文章尾部进行查看。
最后我们加载我们所微调的模型并进行输出
from diffsynth import ModelManager, SDXLImagePipeline
from peft import LoraConfig, inject_adapter_in_model
import torch
def load_lora(model, lora_rank, lora_alpha, lora_path):
lora_config = LoraConfig(
r=lora_rank,
lora_alpha=lora_alpha,
init_lora_weights="gaussian",
target_modules=["to_q", "to_k", "to_v", "to_out"],
)
model = inject_adapter_in_model(lora_config, model)
state_dict = torch.load(lora_path, map_location="cpu")
model.load_state_dict(state_dict, strict=False)
return model
# Load models
model_manager = ModelManager(torch_dtype=torch.float16, device="cuda",
file_path_list=[
"models/kolors/Kolors/text_encoder",
"models/kolors/Kolors/unet/diffusion_pytorch_model.safetensors",
"models/kolors/Kolors/vae/diffusion_pytorch_model.safetensors"
])
pipe = SDXLImagePipeline.from_model_manager(model_manager)
# Load LoRA
pipe.unet = load_lora(
pipe.unet,
lora_rank=16, # This parameter should be consistent with that in your training script.
lora_alpha=2.0, # lora_alpha can control the weight of LoRA.
lora_path="models/lightning_logs/version_0/checkpoints/epoch=0-step=500.ckpt"
)
调整prompt,设置你想要的图片风格,依次修改8张图片的描述
提示词也有一些讲究,比如优质的提示词、提示词的排序(越靠前的提示词影响比重越大)、提示词书写策略、Embedding 模型介入。这些对出图效果也同样重要。同样的,我也会在后面的介绍中讲到,让我们先继续跑baseline。
至此,微调训练和模型出图已经全部完成啦
Step4 进行赛题提交
将微调结果上传魔搭
链接:https://www.modelscope.cn/models/create
执行代码后,将模型文件和示例图下载到本地
mkdir /mnt/workspace/kolors/output & cd
cp /mnt/workspace/kolors/models/lightning_logs/version_0/checkpoints/epoch\=0-step\=500.ckpt /mnt/workspace/kolors/output/
cp /mnt/workspace/kolors/1.jpg /mnt/workspace/kolors/output/
点击魔搭链接,创建模型,中文名称建议格式:队伍名称-可图Kolors训练-xxxxxx
在提交过程的中的基础模型,是指你在训练过程及后续复现时使用的底模类型。一般来说SD XL的实现精度会更高,在训练过程中需要同步设置SD XL,在初步跑通 baseline 时使用基础即可,博主在提交的时候是选用的SD2.1,可参考选用。
点击创建提交就完成啦!恭喜你已经顺利跑通了baseline。
记得完成后及时关闭你正在运行的实例,别让算力偷偷溜走了
别忘记打卡&在群里接龙!
lora 调参参数介绍及 SD 的基础知识点(拓展)
文生图基础知识介绍
文生图主要以SD系列基础模型为主,以及在其基础上微调的lora模型和人物基础模型等。
接下来,我们简单了解下提示词、lora、ComfyUI和参考图控制这些知识点。
提示词
提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家
- 反向prompt推荐(会更推荐使用英文 prompt,因为底层调用 sd 时是输入 英文prompt的):
- text, word, cropped, low quality, normal quality, username, watermark, signature, blurry, soft, soft line, curved line, sketch, ugly, logo, pixelated, lowres, vase,
提高出图质量正向prompt推荐: a highly detailed European style bed room,elegant atmosphere,rtx lighting,global illuminations,a sense of understated sophistication,8k resolution,high quality,photorealistic,highly detailed,
Lora
Stable Diffusion中的Lora(LoRA)模型是一种轻量级的微调方法,它代表了“Low-Rank Adaptation”,即低秩适应。Lora不是指单一的具体模型,而是指一类通过特定微调技术应用于基础模型的扩展应用。在Stable Diffusion这一文本到图像合成模型的框架下,Lora被用来对预训练好的大模型进行针对性优化,以实现对特定主题、风格或任务的精细化控制。
那我们 lora 训练的最终目的是什么呢?训练的本质在于找出当前训练集的最优解,优素材取决于不同角度、不同形态、灯光、图片质量。
在Tag类型上,需要包括主题、动作、主要特征、视角、光影效果等其他,如果在训练过程中对某一个特征不打Tag,则将成为固定模型特征。
参考:Stable Diffusion Lora locon loha训练参数设置 - 知乎 (zhihu.com)
出图指引(SD WebUI):
描述内容prompt:主体、表情、服装、场景、环境、镜头、灯光、风格、画质、渲染器
靠前的Tag权重较高,适当运用括号法则、数字法则、混合
采样步数:数越高,细节多渲染慢,建议范围在20~40
采样器:karras去噪快
a噪点不居中,关键词识别度稍低,更具灵活度
DPM 建议使用DPM++SDE karras
文字相关度CFG scale : 建议在4~9
Seed 随机种子:-1随机,其他为已经完成出图的风格编号
常见出图参数说明:
batch_size 并行数量,如果增加bs,需要同步增加学习率对应 根号2 倍率
enable_bucket 开启bucket来支持不同长宽比的训练图片
resolution 训练时图片的分辨率
flip_aug 水平翻转数据增强,要求训练目标对左右方向不敏感
random_crop 随机裁剪数据增强
color_aug 颜色数据增强,要求训练目标对颜色不敏感
shuffle_caption 打乱文本描述
keep_tokens 保证最前面的几个 tag 不被打乱,默认为1
num_repeats 学习次数,每张图片在一个epoch内重复多少次,实物30~100,人像20~30
常见训练参数说明:
pretrained_model_name_or_path:
指向基底模型的路径,支持 .ckpt、.safetensors 和 Diffusers 格式。
output_dir:指定模型保存的路径
output_name:指定模型保存的文件名(不含扩展名)
save_model_as:模型保存格式,ckpt, safetensors, diffusers, diffusers_safetensors.
dataset_config:指向 TOML 配置文件的路径
max_train_steps:指定训练的steps数,lora总step在1500~6000,checkpoint在30000+
total optimization steps = Imag * repeat * epoch / batch_size
max_train_epochs:指定训练的epochs数,10~15,根据loss值
save_every_n_steps:每隔多少 steps 保存模型
save_every_n_epochs:每隔多少 epochs 保存模型
mixed_precision:使用混合精度来节省显存。
gradient_checkpointing:用于节省显存,但是会增加训练时间。
xformers / mem_eff_attn:用于节省显存。
clip_skip:使用 CLIP 的倒数第几层特征,最好与基底模型保持一致。
network_dim: 学习精细度,为Unet-lr的1/10~1/2,场景128,人物32~128
network_alpha:用于保证训练过程的数值稳定性,防止下溢,默认为1.
network_weights: 加载预训练的 LoRA 模型并继续训练。
network_train_unet_only:只训练 U-Net 的 LoRA
network_train_text_encoder_only:只训练 Text Encoder 的 LoRA
optimizer_type:选择优化器,推荐使用AdamW8bit le-4 , DAdaptation 1
AdamW8bit 对于显存小的用户更友好。Lion 优化器的使用率也很高,学习率需要设置得很小(如AdamW优化器下的 1/3,或者更小)
使用 DAdaptation 时,应当将学习率设置在1附近,text_encoder_lr 可以设置成1,或者小一点,0.5之类。使用DAdaptation 时,推荐将学习率调整策略调整为 constant 。
learning_rate:设置学习率,推荐le-4
unet_lr:对 U-Net 的 LoRA 单独设置学习率
一般可以设为 1e-4,覆盖--learning rate 的设置。
text_encoder_lr:为 Text Encoder 的 LoRA 单独设置学习率
一般可以设为 5e-5,覆盖--learning rate 的设置。
lr_scheduler / --lr_warmup_steps / --lr_scheduler_num_cycles / --lr_scheduler_power:设置学习率 scheduler、warmup. 学习率调度器,有以下几种
["cosine_with_restarts", "cosine", "polynomial", "constant", "constant_with_warmup", "linear"],推荐使用 cosine_with_restarts,它会使学习率从高到低下降,变化速度先慢后快再慢
小tip: 在后续进行微调参数的优化训练时建议将每一次的训练参数及效果记录下来,方便进行优化调参,可以很直观的看出训练效果的对比。示例如下:
完成baseline的同学们想过如何让出图变得更稳定一些呢?比如一些线稿?场景?人物动作?那么 ControlNet 可能可以帮到你
ControlNet
ControlNet是一种用于精确控制图像生成过程的技术组件。它是一个附加到预训练的扩散模型(如Stable Diffusion模型)上的可训练神经网络模块。扩散模型通常用于从随机噪声逐渐生成图像的过程,而ControlNet的作用在于引入额外的控制信号,使得用户能够更具体地指导图像生成的各个方面(如姿势关键点、分割图、深度图、颜色等)。
下面附上 ControlNet 导图,可以先了解一下。
Task2
从零入门AI生图原理&实践 是 Datawhale 2024 年 AI 夏令营第四期的学习活动(“AIGC”方向),基于魔搭社区“可图Kolors-LoRA风格故事挑战赛”开展的实践学习。
Datawhale官方的Task2链接:Task02
往期Task1链接:Task01
【学习者手册】:链接直达
【QA文档】:链接直达
【赛事官网】:链接直达
欢迎感兴趣的同学们加入我们的学习阵营来!
AI生图技术的背景与发展
重要性
AI生图技术,即AI生成图像技术,是人工智能生成内容(AIGC)领域的一个重要组成部分。随着AI技术的不断进步,AIGC已经成为了一个重要的发展趋势,并在多个行业中产生了深远的影响。对于不同的人群而言,了解AI生图技术有着不同的意义:
- 对于普通用户:了解AI生图技术可以帮助他们识别和避免被AI生成的内容所误导,同时也可以利用这些工具来进行简单的创意绘图。
- 对于内容创作者:AI生图工具可以帮助创作者快速提高工作效率,制作出所需的内容。
- 对于技术人员:掌握AI生图技术的能力和玩法有助于针对业务需求进行开发和优化,甚至攻克技术难题。
历史概览
AI生图技术的发展可以追溯到20世纪70年代,艺术家哈罗德·科恩(Harold Cohen)发明的AARON系统是一个早期的尝试,它可以通过机械臂输出绘画作品。进入21世纪,随着深度学习技术的兴起,AI生图技术迎来了突破性进展。
- 2012年:吴恩达等人训练出了第一个能够生成“猫脸”图像的模型,这是使用卷积神经网络(CNN)进行图像生成的里程碑事件。
- 2015年:谷歌推出的“深梦”(Deep Dream)图像生成工具进一步展示了深度学习在图像生成方面的潜力,能够将给定图片转换成极具艺术性的图像。
- 2021年:OpenAI发布了DALL-E模型,这是一个基于GPT-3语言处理模型的深度学习算法模型,它能够根据文本提示生成多样化的图形设计。DALL-E的出现被视为AI生图技术的一个重大进步,因为它能够生成高质量、多样化的图像,被认为有可能对设计行业产生重大影响。
技术原理
AI生图模型通常是多模态机器学习模型,它们通过深度神经网络学习大量的图像库和文本描述,以建立图像描述和图像特征之间的对应关系。这样的模型能够在接收到文本描述或其他类型的输入时,生成符合语义的图像。
相关知识点
- 恐怖谷效应:这是一个心理学概念,指的是随着仿真人形的仿真度增加,人们对它们的亲和力也随之增加,但当仿真度达到某个阈值时,人们的反应会突然变得负面,产生排斥、恐惧或困惑等情绪。AI生图技术在早期阶段很难被广泛接受,部分原因可能与恐怖谷效应有关。
- Deepfake技术:这是一种使用深度学习算法生成高度逼真的伪造媒体的技术,尤其是在视频和音频方面。虽然这项技术具有潜在的应用价值,但其滥用可能导致严重的伦理和社会问题,例如在政治领域制造假新闻或操纵舆论,以及在经济和法律领域造成误导。
科技是一把双刃剑,deepfake技术日渐成熟,deepfake检测技术也在日益受到重视
技术如若用于邪处,那是极其可怕的。你支持deepfake的研究吗?日益成熟的deepfake是好是坏呢? -
Kolors(可图)模型(点击即可跳转魔搭模型介绍页) 是快手开源的文本到图像生成模型,该模型具有对英语和汉语的深刻理解,并能够生成高质量、逼真的图像。
代码开源链接:https://github.com/Kwai-Kolors/Kolors
模型开源链接:https://modelscope.cn/models/Kwai-Kolors/Kolors
技术报告链接:https://github.com/Kwai-Kolors/Kolors/blob/master/imgs/Kolors_paper.pdf
魔搭研习社最佳实践说明:https://www.modelscope.cn/learn/575?pid=543
- 魔搭平台:这是一个汇集了大量AI模型和资源的平台,用户可以在此平台上学习和探索AI生图技术的最新进展。通过魔搭平台,开发者可以获得最新的模型、工具和教程,从而持续推动AI生图技术的发展。
实践案例与工具
实践案例
AI生图技术已经广泛应用于多个领域,从艺术创作到商业广告,再到教育和娱乐,都有着它的身影。这里有几个典型的实践案例:
- 艺术创作:艺术家们使用AI生图工具来辅助创作,比如生成初步的概念草图或者作为灵感来源。例如,艺术家可以输入一些关键词,AI就会生成与这些关键词相关的图像,这样可以帮助艺术家更快地构思出作品的大致方向。
- 商业广告:广告设计师利用AI生图技术快速生成多种设计方案,以供客户选择。这种方式可以大大提高设计效率,同时也能提供更多样化的设计方案。
- 教育:在教育领域,AI生图技术可以用来创建互动式的学习材料,比如生成与教学内容相关的插图或动画,帮助学生更好地理解和记忆知识点。
- 娱乐:在电影和游戏行业中,AI生图技术可以用于生成背景环境、角色设计等,减少手工制作的时间和成本。
在AI生图兴起的这段时间,其实各行各业都有所涉及,也诞生了许多工具可以帮助我们在日常生活及学习工作的某一些环节。例如前段时间爆火的小说配图抖音就是如此。
工具概述
AI生图技术的背后是一系列先进的工具和技术,这些工具不断发展,使得生成的图像越来越接近真实世界。以下是几个值得关注的工具:
- SCEPTER:这是一个开源的代码仓库,专注于生成模型的训练、微调和推理,涵盖了图像生成、转换和编辑等多个下游任务。SCEPTER整合了社区驱动的实现方法以及阿里巴巴集团同义实验室的专有方法,为研究人员和从业者提供了全面的工具包。
- DALL-E:由OpenAI发布的DALL-E模型,是一个深度学习算法模型,能够根据文本提示生成多样化的图像。它最初基于GPT-3语言处理模型,并经过改进,现在已经发展到了DALL-E 2,生成的图像质量显著提高。
- Diffusion Models:扩散模型是近年来图像生成领域的一个热门话题,它通过逐步添加噪声然后逐步去除噪声的过程来生成图像。这种方法在图像合成方面表现出了卓越的能力。
- GANs (Generative Adversarial Networks):生成对抗网络是AI生图领域最常用的模型之一,它通过两个网络(生成器和判别器)的对抗训练来生成高质量的图像。
AI生图的挑战
AI生图技术虽然取得了巨大的进步,但在实际应用中仍然面临着不少挑战。以下是一些关键的挑战和可能的解决方案:
技术挑战
-
理解语义:尽管AI模型能够根据文本描述生成图像,但它们在理解文本的深层含义和上下文方面仍有局限。例如,模型可能会误解某些比喻或隐喻表达,导致生成的图像与预期不符。为了改善这一点,可以进一步加强模型的语言理解能力,比如引入更多语境丰富的数据进行训练。
-
细节处理:早期的AI生图模型在处理复杂的细节时往往不尽人意,尤其是在描绘人体结构、纹理等方面。随着时间的推移,这一问题得到了一定程度的缓解,但仍然存在。一种可能的解决方案是采用更高分辨率的训练数据,并利用特定领域的知识来优化模型。
-
一致性问题:在生成一系列相关联的图像时,保持图像之间的一致性是一项挑战。例如,在生成连续场景或故事板时,确保角色和环境的一致性至关重要。这可以通过引入条件生成机制和更精细的控制机制来改善。
道德与伦理挑战
-
版权问题:使用AI生图技术生成的艺术作品可能涉及版权问题,特别是在使用现有艺术品作为训练数据的情况下。开发者和用户需要确保遵循相关的法律法规,并尊重原创作者的权利。
-
偏见与歧视:AI模型可能无意中学习到数据中的偏见,导致生成的内容带有偏见或歧视性的特征。为了避免这种情况,重要的是要确保训练数据的多样性和包容性,并且在模型训练过程中采用公平性评估指标。
-
隐私问题:AI生图技术在某些情况下可能会侵犯个人隐私,尤其是在未经同意的情况下使用个人肖像数据。因此,保护个人隐私和数据安全是非常重要的,这也需要通过严格的法律监管和技术手段来实现。
社会挑战
-
就业影响:随着AI生图技术的发展,一些传统的设计和创意行业可能会受到影响。一方面,技术进步可以提高效率,降低成本;另一方面,也可能导致一些岗位的消失。因此,有必要开展技能培训项目,帮助相关人员适应新技术环境。
-
可信度与验证:随着AI生成内容越来越难以与真人创作区分,辨别真伪变得更加困难。这不仅影响到艺术领域的原创性,还可能在其他领域造成信任危机。开发可靠的验证技术和标准变得尤为重要。
-
教育与普及:为了让公众更好地理解AI生图技术及其潜在影响,需要加强教育和普及工作。这有助于提高人们的媒介素养,减少误解和不必要的恐慌。
解决方案与展望
- 技术层面:继续推进算法和模型的创新,如采用更高效的数据增强技术、强化学习策略等,以提高模型的泛化能力和生成质量。
- 伦理指导:建立一套伦理指导原则,确保AI生图技术的健康发展。这包括制定明确的政策来指导数据收集、模型训练和应用部署。
- 公众参与:鼓励公众参与到AI技术的讨论和发展中来,通过举办研讨会、公开讲座等形式增加透明度,增进公众的理解和支持。
- 开源互助:在对AI工具进行开源的同时交流并引导正确的使用观念,并且研究对AI工具害的一面的预防。
通义千问的使用
通义千问是一款强大的AI助手,它不仅可以帮助用户解答各种问题,还能提供编程和技术支持。下面是如何充分利用通义千问的一些思考和建议:
初步了解
-
功能概览:首先,熟悉通义千问的基本功能。它不仅可以回答问题,还能进行编程和技术支持,提供文本创作、信息查询等多种服务。了解这些功能可以帮助我们更好地利用它。
-
自我介绍:通义千问通常会有一个简短的自我介绍,这有助于用户了解它可以做什么。例如,通义千问会强调其在编程方面的强大能力,这对我们使用它来解决问题特别有用。
编程和技术支持
-
代码解析:当遇到难以理解的代码段落时,可以向通义千问求助。它能够帮助我们理解代码的结构和逻辑,甚至可以为我们解释特定行的作用。例如,当我们面对一个复杂的文生图代码时,通义千问可以帮我们逐行解析代码,理解每一部分的功能。
-
实践指导:在进行具体的编程任务时,通义千问可以给出详细的步骤指导。例如,在进行AI生图任务时,通义千问可以告诉我们如何准备数据、如何设置模型参数,以及如何优化生成的图像。
使用技巧
-
清晰表述问题:在向通义千问提问时,确保问题描述得尽可能清楚。这样可以得到更准确的答案。例如,如果我们想要了解某个函数的工作原理,最好提供该函数的完整代码片段以及我们希望了解的具体方面。
-
逐步深入:如果一个问题涉及多个层面,可以考虑分步骤提出问题。先从基本的概念入手,然后逐渐深入到更具体的技术细节。
-
反馈和修正:如果通义千问的回答未能满足需求或者存在误差,可以向它反馈并请求修正。这种互动过程有助于改进答案的质量。
在我们的学习中可以起到的辅助
-
代码架构分析:假设我们有一个文生图的代码基线,通义千问可以帮助我们分析代码的整体架构。例如,它可以帮助识别哪些部分负责数据准备,哪些部分负责模型训练,以及哪些部分负责生成图像。
-
代码逐行解析:对于代码中的具体行,通义千问可以给出详细的解释。例如,如果我们在代码中看到一行涉及到模型预测的部分,通义千问可以解释这一行代码如何调用模型来进行预测,并解释预测结果的含义。
-
实战演练:通义千问还可以帮助我们完成一些实战任务。例如,如果我们正在做一个基于话剧的连环画项目,需要生成一系列相关的图像,通义千问可以提供如何编写合适的提示词的建议,以及如何利用现有的AI工具来生成这些图像。
通过通义千文给我们的提示词进行出图
首先我们将提示词进行替换,并且我自己也对反向提示词进行了拓充。
并且在其中可以看到,我将 torch.manual_seed() 方法进行了注释
torch.manual_seed()是设置CPU生成随机数的种子,方便下次复现实验结果。所以这个方法传参相当于设置了控制了出图。
把这一个方法注释掉就可以取消对种子的控制,做到随机出图
控制seed是为了让小白更容易去上手文生图的过程,容易复现调整,因为实际上可操作的参数还是很多的。在后续的学习会一步一步的拓展知识,跟着我们的学习一步一步来就可以啦,有兴趣也可以额外去学习一下。
下面是我最后出来的结果:
下面这次出图我增加了出图的 steps,让AI渲染的次数更深一些,但需要注意的是,过大的steps也会导致图片变得崩坏,要取适当的参数量。
拓展学习scepter webui
魔搭体验网址:传送门
我们可以通过scepter studio的平台来体验更完整的内容:
更多的出图参数设置,不熟悉这些参数的同学可以到我上一篇笔记中阅览。
设置ControlNet
咒语书所给的样例:
我们通过咒语书,来设定自己的出图提示词和参数,比如出一张开心的小狗狗:
再出一张我们DataWhale的吉祥物,在我们的提示词中可以适当的运用一些法则来达到更好的出图
换个3D风格我们再出一遍吧!
魔搭的模型微调的界面,但目前暂未开放。
魔搭社区提供的体验地址里面缺失了微调模型的功能,如果大家希望能使用secpter完整的功能,我们可以将其私有部署到我们自己的服务器。
github地址:https://github.com/modelscope/scepter
可以通过官方readme文件中的教程进行操作,该模块对基础有一定的要求,适合学有余力的同学
最后不知道大家是否有注意到,这次笔记的前两张图也是由通义千问生成的呢哈哈!
Task3
Datawhale官方的Task3链接:Task03
往期Task1、Task2链接:Task01, Task02
【学习者手册】:链接直达
【QA文档】:链接直达
【赛事官网】:链接直达
ComfyUI
ComfyUI是一个基于深度学习的图像生成软件,它通常被用于创建高质量的图像,特别是与AI艺术生成相关。该软件支持使用各种预训练的模型,用户可以通过简单的拖放操作来构建自己的图像生成流程。ComfyUI的特点包括直观的用户界面和强大的脚本功能,使得用户能够轻松地定制和优化图像生成过程。
ComfyUI的核心在于其节点编辑系统,用户可以通过组合不同的节点来构建复杂的图像生成脚本。这些节点可能包括模型加载器、图像处理模块、输出模块等。软件的一个显著优点是它能够支持多种模型和工具链,允许用户进行各种创意实验。
此外,ComfyUI经常更新,添加新功能和改进现有功能,以保持与最新技术的发展同步。它还具有一个活跃的社区,用户可以在这个社区中交流想法、分享预设以及获取支持。
参考手册:ComfyUI用户手册
速通ComfyUI
接下来我们来跑一下跟着教程速通一下ComfyUI:
新建实例
在这里,我们依旧选择使用魔搭社区提供的Notebook和免费的GPU算力体验来体验ComfyUI。
这里需要注意的是,不要使用 Task1 中的baseline实例来跑后面内容,会发生环境重叠出错。
执行git拉取项目等命令
等待实例启动,进入实例,新建终端执行命令
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/
一键执行安装程序(大约10min)
进入预览界面
PS:如果链接访问白屏,或者报错,就等一会再访问重试,程序可能没有正常启动完毕
待执行到最后一个代码块出现跳转链接时,可以点击跳转,也可以复制链接到浏览器中访问
这是我打开之后的工作流界面:
配置工作流JSON文件
先将task3教程中的两个JSON文件下载到本地:
在工作流中点击加载:
这里可能会显示爆红,这意味着前面的模型下载和配置没有做好:
回到jupyter中检查:
正常加载后界面如下,这是两个JSON文件的各个模块说明
K采样器的参数说明
接下来我将详细介绍出图参数调整模块(K采样器)的参数说明
Positive:
正向条件
Negative:
负向条件
latent_image:
将被去噪的潜在图像
seed:
用于创建噪声的随机种子
control_after_generate:
在每个提示后更改上述种子号的能力。节点可以randomize
、increment
、decrement
或保持种子号fixed
。
steps:
去噪过程中使用的步骤数。采样器允许进行的步骤越多,结果就越准确。但过大的steps会导致出图过爆,出现不好的画面。
cfg:
分类器自由引导(cfg)比例决定了采样器在实现提示内容方面的积极性。更高的比例强制图像更好地代表提示,但设置过高的比例会负面影响图像质量。
sampler_name:
使用哪个采样器
scheduler:
使用哪种计划
denoise:
通过噪声擦除多少潜在图像的信息
结束动作
出图完毕之后,记得保存修改并停止远程ComfyUI的连接,并关闭实例。
ComfyUI的丰富组件及搭配,给许多不同的独立场景工作流提供了可能,感兴趣的同学可以去了解下,下面推荐一位up主:赛博迪克朗的个人空间-赛博迪克朗个人主页-哔哩哔哩视频 (bilibili.com)
LoRA微调
低秩适应(LoRA)。LoRA是什么?它是如何工作的?与其他流行的微调方法相比如何?
LoRA思路
低秩适应(Low-Rank Adaptation)是一种参数高效的微调技术,其核心思想是对大型模型的权重矩阵进行隐式的低秩转换。
什么是低秩转换呢?
整体的想法和概念与主成分分析(PCA)和奇异值分解(SVD)有关,我们通过一个较低维度的表示来近似表示一个高维矩阵或数据集。
换句话说,我们试图找到原始特征空间(或矩阵)中少数维度的(线性)组合,能够捕捉数据集中大部分的信息。
如下图所示:
1. 步数相关 repeat / epoch / batch_size
- epoch多轮次比单轮次要好,通过设置可以每轮保存一组模型,多轮次说明有多组模型,得到好概率的可能是比单轮次就一个模型的概率是要高的,epoch一般设置5~10;
- batch_size要是高,一是可能显存带不动,二是值越高训练越快 越可能学得囫囵吞枣收敛得慢。
batch_size 从1到2,Ir就要*2
2. 速率/质量相关 Ir学习率 / Dim网络维度 / Optimizer优化器
学习率Ir,控制了每次参数更新的幅度,过低参数更新幅度小 训练收敛就慢 陷入局部最优解 训练时间增加,过低也会导致训练初期无法有效学习到特征;过高,参数更新幅度大 错过全局最优解附近的局部最优解 找不到稳定的收敛点,常用cos的学习率衰减策略,初始使用较大的学习率快读接近全局最优解,在随着训练的进行逐渐减小学习率,使得逐渐细化搜索空间,找到全局附近的局部最优解,提高收敛的稳定性。
前面提到的“bs提高,Ir也要提高”是因为bs较大时会导致参数更新的方差减小从而使得梯度更新幅度也减小,这时就需要Ir也相应地增大。我这里还在思考bs、Ir都提高了的话,训练速度是不是也会大幅度提高?chat告诉我不一定,因为bs大占用的内存和计算量也增加,Ir大模型容易不稳定不收敛,理论上肯定是会增加训练速度,但实际上还是要根据你的显卡来设置bs值,训练速度变向是看钞能力,跑起来才是王道,先优先考虑生成效果再训练速度吧~
3. 优化器(Optimizer)
Lion比AdamW8bit的优点是更快,总训练步数在3k-1w内都可以考虑选它。
图像这里居然不要很多,作者这里是考虑到耗费时间等因素,我觉得有道理,如果我训练效果不好,我将尝试将重新创建我的数据集,只选出质量最高的30来张图像来做训练。
loss值的最优区间0.07-0.09,但loss值只是一个参考,但更多的还是要通过XYZ测试来看模型的好坏,原图VS根据原图tag测试模型生成的图片。