第一次尝试训练 Stable Diffusion 模型

最近更新于 2025-05-25 22:43

前言

第一次玩 Stable Diffusion 还是 2023 年 12 月的时候,当时用了 4 年半的轻薄本的独显还是坏的,就纯纯用 CPU 慢慢跑,512×512 的图片至少都要画十几分钟。

2024 年 1 月底的时候又买了一台 4060 Laptop 8G 的笔记本电脑,第一次体验到最快十几秒就能出一张图,可能就玩了不到一个月。

直到前段时间,我频繁写小工具,为了给软件“设计” Logo,我又用起了 Stable Diffusion,简单描述特征就能给我画出图来,不需要艺术设计。前两天又突然心血来潮,想着自己训练模型,那就可以更彻底的定制风格了。

—— 2025年5月24日

测试环境

  • Windows 11 24H2
  • Python 3.12.10
  • RTX 4060 Laptop 8G

第一次练 LoRA 路线

准备数据

我是从抖音下载的某个博主的图片,整理出来 356 张图片
file

Birme 裁剪为 512×768 的图像(也可以不用裁剪的)

然后创建下面结构的文件夹,furong 是我取的博主的网名的拼音(这层文件夹名不要使用中文)
file

image 下放置不同分类的图片,我这里只 1 个分类,命名文件夹采用 数字_名称 的方式,名称自己定,可以区分就行,前面的数字代表这个分类的图片需要学习的次数。
file

我解释一下这个分类的意义,比如在一个 LoRA 模型中实现人物特征、服装特征、背景特征的控制,就创建 3 个文件夹分别放置不同的学习数据。放置人物特征的文件夹下的所有图片的标注都加上一个特殊的提示词,假设加上 pperson,放置服装的文件夹下的图片标注都加上 cclothes,这样使用这个训练出来的 LoRA 绘图的时候,加上提示词就会匹配到对应的特征。这个命名的时候最好不要使用现有特殊意义的词汇,比如我举例用的 pperson,前面一个字母给重复了一下。要是用 person,那么 AI 可能就不知道你说的 person 是普遍意义上的 person,还是这里训练的独特特征的 person。

我这里不需要区分不同特征,只需要博主的总体特征就行,就只创建了一个文件夹,每张图片学习 10 次就命名为 10_FuRong 了,然后把所有的图片都放进这个文件夹里了。

打标签

打标签使用的 Stable Diffusion Webui 配合插件:https://github.com/picobyte/stable-diffusion-webui-wd14-tagger
这个插件从图生成特征的效果比较好,且支持批量生成。

填下图片所在目录,生成标签文件在图片同目录下。
然后下面有一个附加标签,我这里就填的 FuRong。
这个附加标签会添加到每张图片的标签里,不同分类打标签的时候填不同的标签,同一个分类都有同一个标签,这样就可以把不同分类的特征关联到不同的提示词上了。
file

每个图片会生成同名的文本文件,里面保存的就是生成的标签
file

训练

训练我使用的 Kohya_ss:https://github.com/bmaltais/kohya_ss
安装看 README 的说明就行,启动后在浏览器打开页面

底模我用的 chilloutmix
file

自己取生成模型文件的名字
file

图片路径,注意是填 image 这一层,而不是地下分类的文件夹
file

存储精度我选的 float,即 32 位的单精度浮点数
file

模型保存路径就填前面创建的 models
file

日志路径填前面创建的 log,可以使用 tensorbord 实时查看训练情况
file

展开 Parameters 标签
file

LoRA type 选的 LoCon,这种 LoRA 适合融合不同风格的(我这里的数据里人物着装风格各式各样)
file

Max train epoch 是限制最多训练多少轮的,Max train steps 是用来限制最多训练多少步的,前者优先级更高,这里都设置为 0.不限制,而是由实际参数控制
file

Train batch size 是同时处理多少张图片,我显卡性能一般,显存也小,就默认一张一张的学习。
Epoch 是训练的轮数,我设置的 7.
这样总的步数=FuRong分类图片数量356 × FuRong分类学习次数10 × 学习轮数7 = 24920
如果有多个分类,则每个分类每轮学习的步数就是,对应分类下图片数量×该分类的学习次数,再把多个分类加起来得到每轮所有分类共要学习的步数
file

默认是每轮训练会保存一次最新训练的模型
file

训练不是直接使用图片文件,而是要先转换成一总专用的格式,训练的时候可能要多次尝试调整参数重新训练,每次寻来你都重新转换一次会额外消耗时间,所以可以勾选 Cache latents to disk缓存到硬盘,这样下次可以直接读取。
而 Cache latents 是缓存到内存,可以一定层度节省显存
file

Max resolution 是最大分辨率,图片超过这个分辨率会自动缩放,我图片已经提前裁剪到 512×768 了,这里可以不勾选 Enable buckets。如果没有裁剪就勾选这个,训练的时候会把图片根据大小进行分类,同种分辨率大小的图片可以放在一起训练,后面设置这个分类支持的最小最大分辨率
file

Network Rank 是 LoRA 的秩数,粗略反映中间层神经元的数量,越大可以保留的信息越多,但占用显存越多,生成的 LoRA 文件越大。一般设置在 4-128,默认值 8,设置在 64 效果基本到顶。
file

点击 Start training 开始训练,点击 Start tensorboard 可以用 tensorboard 将日志文件转为图像
file

训练结果

带一串数字的就是过程生成的文件,不带数字的就是最终生成的,用时 10 个小时左右
file

查看 tensorboard,在第 4 轮(第14230步结束时的模型是平均 loss 最低的一轮,真正最低位置的时候没有保存模型文件),就拿 000004 的模型文件。
我觉得下次训练的时候分类文件夹的学习次数要调小,只有一个分类就写 1,学习多少次完全由 epoch 轮数控制,就避免拿不到 loss 最低时的模型文件,一轮里面学习次数多了,loss 最小的时候没有保存模型文件。
file

绘图测试

extremely detailed CG unity 8k wallpaper,(masterpiece),(best quality),(ultra detailed),(ultra realistic),(Best character details:1.36),nikon d750 f/1.4 55mm,dynamic angle,professional lighting, photon mapping, radiosity, physically-based rendering,
outdoors,looking at viewer,blush,(taut shirt), jeans,
1girl, solo, black hair, dress, bracelet, photo background, hair ornament, white footwear, jewelry, flower, hair flower, chinese clothes, sitting, outdoors, white dress, looking at viewer, china dress, architecture, full body, east asian architecture, water, hair bun, shoes
<lora:FuRong_fp32_20250524A:1>
Negative prompt: Multiple people,More than one person,2girl,
sketches,lowres,polar lowres,(worst quality:2),(low quality:2),(normal quality:2),((monochrome)),((grayscale)),blurry,cropped,mutation,deformed,text,error,signature,watermark,username,extra digit,fewer digits,jpeg artifacts,
skin spots, acnes, skin blemishes,
bad anatomy,bad anatomy,bad proportions,gross proportions,long neck,(bad hands),(bad eyes),cross-eyed,malformed limbs,blurred hands,fused fingers,poorly drawn face,poorly drawn hands,
(mutated hands and fingers:1.3),(mutated legs and foots:1.3),bad body,bad limbs,bad arms,bad hands,bad fingers,bad leg,bad feet,missing limbs,missing arms,missing hands,missing fingers,missing legs,missing footextra limbs,extra arms,extra fingers,extra leg,extra foot,
Steps: 28, Sampler: DPM++ SDE, Schedule type: Karras, CFG scale: 7.5, Seed: 1340860639, Face restoration: CodeFormer, Size: 512x768, Model hash: fc2511737a, Model: chilloutmix_NiPrunedFp32Fix, Lora hashes: "FuRong_fp32_20250524A: 0x96ab0a70f4", Version: 1.10.1

右边是训练数据里的原图,左边是用 LoRA 绘制的
file


2025.5.25
在抖音下载的另外一个博主的图片,整理出来七百多张图片,训练 20 轮,早上挂着练到下午,又整出一个 LoRA

extremely detailed CG unity 8k wallpaper,(masterpiece),(best quality),(ultra detailed),(ultra realistic),(Best character details:1.36),nikon d750 f/1.4 55mm,dynamic angle,professional lighting, photon mapping, radiosity, physically-based rendering,
outdoors,looking at viewer,blush,(taut shirt), jeans,
1girl, solo, denim, jeans, black hair, realistic, braid, pants, shirt, looking at viewer, midriff
<lora:XiaoYuanJiang_fp32_20250525A:1>
Negative prompt: Multiple people,More than one person,2girl,
sketches,lowres,polar lowres,(worst quality:2),(low quality:2),(normal quality:2),((monochrome)),((grayscale)),blurry,cropped,mutation,deformed,text,error,signature,watermark,username,extra digit,fewer digits,jpeg artifacts,
skin spots, acnes, skin blemishes,
bad anatomy,bad anatomy,bad proportions,gross proportions,long neck,cross-eyed,malformed limbs,blurred hands,fused fingers,poorly drawn face,poorly drawn hands,
(mutated hands and fingers:1.3),(mutated legs and foots:1.3),bad body,bad limbs,bad arms,bad hands,bad fingers,bad leg,bad feet,missing limbs,missing arms,missing hands,missing fingers,missing legs,missing footextra limbs,extra arms,extra fingers,extra leg,extra foot,
Steps: 28, Sampler: DPM++ SDE, Schedule type: Karras, CFG scale: 7.5, Seed: 672894124, Face restoration: CodeFormer, Size: 512x768, Model hash: fc2511737a, Model: chilloutmix_NiPrunedFp32Fix, Denoising strength: 0.4, Hires upscale: 1.5, Hires steps: 30, Hires upscaler: Latent (bicubic antialiased), Lora hashes: "XiaoYuanJiang_fp32_20250525A: 0x2376386d9c", Downcast alphas_cumprod: True, SGM noise multiplier: True, Version: 1.10.1

file

第一次尝试训练 Stable Diffusion 模型
Scroll to top
打开目录