Stable Diffusion文生图模型训练入门实战(完整代码)

Stable Diffusion 1.5(SD1.5)是由Stability AI在2022年8月22日开源的文生图模型,是SD最经典也是社区最活跃的模型之一。

以SD1.5作为预训练模型,在火影忍者数据集上微调一个火影风格的文生图模型(非Lora方式),是学习SD训练的入门任务。

在这里插入图片描述

显存要求 22GB左右

在本文中,我们会使用SD-1.5模型在火影忍者数据集上做训练,同时使用SwanLab监控训练过程、评估模型效果。

1.环境安装

本案例基于Python>=3.8,请在您的计算机上安装好Python;

另外,您的计算机上至少要有一张英伟达显卡(显存大约要求22GB左右)。

我们需要安装以下这几个Python库,在这之前,请确保你的环境内已安装了pytorch以及CUDA:

swanlab
diffusers
datasets
accelerate
torchvision
transformers

一键安装命令:

pip install swanlab diffusers datasets accelerate torchvision transformers

本文的代码测试于diffusers0.29.0、accelerate0.30.1、datasets2.18.0、transformers4.41.2、swanlab==0.3.11,更多库版本可查看SwanLab记录的Python环境

2.准备数据集

本案例是用的是火影忍者数据集,该数据集主要被用于训练文生图模型。

该数据集由1200条(图像、描述)对组成,左边是火影人物的图像,右边是对它的描述:

在这里插入图片描述

我们的训练任务,便是希望训练后的SD模型能够输入提示词,生成火影风格的图像:

在这里插入图片描述


数据集的大小大约700MB左右;数据集的下载方式有两种:

  1. 如果你的网络与HuggingFace连接是通畅的,那么直接运行我下面提供的代码即可,它会直接通过HF的datasets库进行下载。
  2. 如果网络存在问题,我也把它放到百度网盘(提取码: gtk8),下载naruto-blip-captions.zip到本地解压后,运行到与训练脚本同一目录下。

3.准备模型

这里我们使用HuggingFace上Runway发布的stable-diffusion-v1-5模型。

在这里插入图片描述

模型的下载方式同样有两种:

  1. 如果你的网络与HuggingFace连接是通畅的,那么直接运行我下面提供的代码即可,它会直接通过HF的transformers库进行下载。
  2. 如果网络存在问题,我也把它放到百度网盘(提取码: gtk8),下载stable-diffusion-v1-5.zip到本地解压后,运行到与训练脚本同一目录下。

4. 配置训练可视化工具

我们使用SwanLab来监控整个训练过程,并评估最终的模型效果。

如果你是第一次使用SwanLab,那么还需要去https://swanlab.cn上注册一个账号,在用户设置页面复制你的API Key,然后在训练开始时粘贴进去即可:

在这里插入图片描述

5.开始训练

由于训练的代码比较长,所以我把它放到了Github里,请Clone里面的代码:

git clone https://github.com/Zeyi-Lin/Stable-Diffusion-Example.git

如果你与HuggingFace的网络连接通畅,那么直接运行训练:

python train_sd1-5_naruto.py \
  --use_ema \
  --resolution=512 --center_crop --random_flip \
  --train_batch_size=1 \
  --gradient_accumulation_steps=4 \
  --gradient_checkpointing \
  --max_train_steps=15000 \
  --learning_rate=1e-05 \
  --max_grad_norm=1 \
  --seed=42 \
  --lr_scheduler="constant" \
  --lr_warmup_steps=0 \
  --output_dir="sd-naruto-model"

上面这些参数的含义如下:

  • --use_ema: 使用指数移动平均 (EMA) 技术,该技术可以提高模型的泛化能力,在训练过程中使用模型参数的移动平均值进行预测,而不是直接使用当前模型参数。
  • --resolution=512: 设置训练图像的分辨率为 512 像素。
  • --center_crop: 对图像进行中心裁剪,将图像的中心部分作为训练样本,忽略图像边缘的部分。
  • --random_flip: 在训练过程中对图像进行随机翻转,增加训练数据的多样性。
  • --train_batch_size=1: 设置训练批次大小为 1,即每次训练只使用一张图像。
  • --gradient_accumulation_steps=4: 梯度累积步数为 4,即每进行 4 次训练才进行一次参数更新。
  • --gradient_checkpointing: 使用梯度检查点技术,可以减少内存使用量,加快训练速度。
  • --max_train_steps=15000: 设置最大训练步数为 15000 步。
  • --learning_rate=1e-05: 设置学习率为 1e-05。
  • --max_grad_norm=1: 设置梯度范数的最大值为 1,防止梯度爆炸。
  • --seed=42: 设置随机种子为 42,确保每次训练的随机性一致。
  • --lr_scheduler="constant": 使用常数学习率调度器,即在整个训练过程中保持学习率不变。
  • --lr_warmup_steps=0: 设置学习率预热步数为 0,即不进行预热。
  • --output_dir="sd-naruto-model": 设置模型输出目录为 “sd-naruto-model”。

如果你的模型或数据集用的是上面的网盘下载的,那么你需要做下面的两件事:

第一步:将数据集和模型文件夹放到训练脚本同一目录下,文件结构如下:

|--- sd_config.py
|--- train_sd1-5_naruto.py
|--- stable-diffusion-v1-5
|--- naruto-blip-captions

stable-diffusion-v1-5是下载好的模型文件夹,naruto-blip-captions是下载好的数据集文件夹。

第二步:修改sd_config.py的代码,将pretrained_model_name_or_pathdataset_name的default值分别改为下面这样:

    parser.add_argument(
        "--pretrained_model_name_or_path",
        type=str,
        default="./stable-diffusion-v1-5",
    )
    parser.add_argument(
        "--dataset_name",
        type=str,
        default="./naruto-blip-captions",
    )

然后运行启动命令即可。


看到下面的进度条即代表训练开始:

在这里插入图片描述

6. 训练结果演示

我们在SwanLab上查看最终的训练结果:

在这里插入图片描述

可以看到SD训练的特点是loss一直在震荡,随着epoch的增加,loss在最初下降后,后续的变化其实并不大:

在这里插入图片描述

我们来看看主观生成的图像,第一个epoch的图像长这样:

在这里插入图片描述

可以看到詹姆斯还是非常的“原生态”,迈克尔杰克逊生成的也怪怪的。。。

再看一下中间的状态:

在这里插入图片描述

在这里插入图片描述

经过比较长时间的训练后,效果就好了不少。

比较有意思的是,比尔盖茨生成出来的形象总是感觉非常邪恶。。。

详细训练过程看这里:SD-Naruto - SwanLab

至此,你已经完成了SD模型在火影忍者数据集上的训练。

7. 模型推理

训练好的模型会放到sd-naruto-model文件夹下,推理代码如下:

from diffusers import StableDiffusionPipeline
import torch

model_id = "./sd-naruto-model"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")

prompt = "Lebron James with a hat"
image = pipe(prompt).images[0]  
    
image.save("result.png")

相关链接

关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

对于0基础小白入门:

如果你是零基础小白,想快速入门AI绘画是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画!

需要的可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

1.stable diffusion安装包 (全套教程文末领取哈)

随着技术的迭代,目前 Stable Diffusion 已经能够生成非常艺术化的图片了,完全有赶超人类的架势,已经有不少工作被这类服务替代,比如制作一个 logo 图片,画一张虚拟老婆照片,画质堪比相机。

最新 Stable Diffusion 除了有win多个版本,就算说底端的显卡也能玩了哦!此外还带来了Mac版本,仅支持macOS 12.3或更高版本

在这里插入图片描述

2.stable diffusion视频合集

我们在学习的时候,往往书籍代码难以理解,阅读困难,这时候视频教程教程是就很适合了,生动形象加上案例实战,一步步带你入门stable diffusion,科学有趣才能更方便的学习下去。

在这里插入图片描述

3.stable diffusion模型下载

stable diffusion往往一开始使用时图片等无法达到理想的生成效果,这时则需要通过使用大量训练数据,调整模型的超参数(如学习率、训练轮数、模型大小等),可以使得模型更好地适应数据集,并生成更加真实、准确、高质量的图像。

在这里插入图片描述

4.stable diffusion提示词

提示词是构建由文本到图像模型解释和理解的单词的过程。可以把它理解为你告诉 AI 模型要画什么而需要说的语言,整个SD学习过程中都离不开这本提示词手册。

在这里插入图片描述

5.AIGC视频教程合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

<think>嗯,用户想了解Stable Diffusion文生的技巧。我需要先回忆一下相关的知识,确保信息准确。首先,Stable Diffusion是一种基于深度学习的文本到像生成模型,对吧?它通过扩散过程逐步去噪生成像。用户可能已经知道基本概念,但需要具体的技巧来提升生成效果。 接下来,得考虑用户的使用场景。可能是设计师、艺术家,或者普通用户想生成高质量片。他们可能遇到问题,比如生成的片不符合预期,细节不够,或者风格不统一。需要针对这些常见问题提供解决方法。 用户的需求是技巧,所以应该分步骤,结构清晰。可能需要包括提示词优化、参数调整、模型选择等方面。还要注意使用中文,避免专业术语过多,必要时解释术语。 第一个技巧可能是提示词设计,详细和具体的关键词。比如使用逗号分隔,组合不同元素。还有负面提示词的应用,排除不需要的内容。这部分很重要,因为提示词直接影响生成结果。 第二个可能是参数调整,比如采样步骤、CFG值、种子数。需要解释每个参数的作用和调整建议。比如CFG值过高可能导致过饱和,过低则偏离文本描述。 第三是模型和LoRA的使用,不同的预训练模型影响风格,LoRA可以微调特定特征。用户可能不知道这些资源,需要举例说明,比如现实风格或动漫风格的模型。 第四是迭代优化,可能需要多次生成,调整提示词和参数,或者使用后期处理工具。用户可能希望一次成功,但实际需要多次尝试。 第五是控制生成细节,使用附加控制网络,如边缘检测或深度。这部分可能对高级用户更有用,但简单提及可以帮他们了解可能性。 最后,注意事项,比如版权和计算资源。用户可能忽略这些,需要提醒。 需要检查结构是否清晰,分点列出,每个技巧有解释和例子。使用Markdown格式,但用户要求避免使用,所以用文字描述。确保LaTeX公式正确,但问题中可能不需要数学公式,不过系统指令里提到,如果有变量或方程的话要处理,但这里可能不涉及,所以可能不需要。 还要注意使用中文,保持口语化,避免生硬。可能需要举例说明,比如提示词组合,负面词的应用,参数设置的具体数值建议。 总结下来,组织成几个主要部分,每个部分有子点,逐步引导用户优化生成结果。确保信息准确,比如CFG值的范围,采样步骤的影响,这些都是关键点。最后提醒伦理和法律问题,确保回答全面可靠。</think>以下为Stable Diffusion文生的进阶技巧总结,采用分步式框架帮助您提升生成效果: 一、**提示词工程(Prompt Engineering)** 1. **关键词组合术** - 采用「主体+环境+风格+细节+画质」结构,例如: ```宇航员(主体) 站在发光水晶森林中(环境) 赛博朋克插画风格(风格) 8k细节(细节) Unreal Engine渲染(画质)``` - 使用权重符号`(word:1.5)`调节重点,如`(银河:1.3)背景` 2. **负面提示词应用** ```text 低分辨率, 模糊, 畸形手指, 比例失调, 水印, 文字 ``` 可叠加艺术风格负面词,如`避免印象派笔触`等 二、**参数调优指南** 1. **采样器选择** - 写实类推荐:DDIM/DPM++ 2M Karras - 艺术类推荐:Euler a/Heun - 试验步数范围:20-50步(过低导致细节缺失,过高可能过拟合) 2. **CFG Scale调节** - 常规范围:7-12 - 高创意需求:5-7(增强模型自由度) - 精准控制:12-15(需配合高质量提示词) 三、**模型协同策略** 1. **基础模型选择** - 真实系:Realistic Vision/Protogen - 动漫系:Waifu Diffusion/Anything V5 - 实验性:SDXL 1.0(需更高显存) 2. **LoRA微调技巧** - 权重叠加公式:`<lora:filename:0.8>` - 组合使用多个LoRA时,总权重建议≤1.5 四、**控制网络进阶** 1. **深度控制** ```text 通过Depth-to-Image模块实现: 1. 输入草或3D场景 2. 设置深度阈值0.3-0.7 3. 与提示词联合调节空间层次 ``` 2. **色彩约束** - 使用调色板插件限定主色 - HEX代码控制:`#FF5733作为主色调` 五、**迭代优化流程** 1. 首轮生成使用512x512分辨率测试构 2. 通过img2img进行局部重绘(遮罩笔刷调节) 3. 最终输出采用Hires.fix提升至1024x1024+ - 推荐超分模型:SwinIR/ESRGAN 六、**特殊场景处理** 1. **人物生成要点** - 添加`完美解剖结构`类提示词 - 使用ADetailer插件自动修复面部 2. **多主体控制** ```text 采用组合语法: [猫|狗]在草地上,使用BREAK分隔 配合Regional Prompter分区控制 ``` 注意事项: - 显存不足时启用`--medvram`参数 - 批量生成建议使用X/Y/Z表对比参数 - 商业用途需确认模型授权协议 通过上述技巧的组合运用,可显著提升像质量与控制精度。建议从基础参数开始逐步实验,建立个人工作流模板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值