
不用找启动器也不是什么新番资源包这轮分享的是一个我自己从零训完的 LoRA 模型名字叫dragonballz_e235-2。简单说这个项目做的事就是用 Stable Diffusion 的 LoRA 方案把《龙珠Z》的经典角色风格复刻进本地生成模型里。e235 不是别的就是训练跑到第 235 个 epoch 时保存下来的检查点-2 是那一轮里第二次存档的版本。如果你的目标跟我一样不是想要一张两张二次元壁纸而是想让模型稳定产出“一看就是龙珠Z原作味道”的角色立绘、战斗场景甚至是跨界联动图这篇复盘可以帮你少走不少弯路。我把整个项目的来龙去脉、参数设计、数据怎么处理、训练过程中踩过的坑以及最后怎么用这组权重全部摊开写在这里。后面的内容不会像论文一样绕来绕去全是实际操作时的判断和取舍。1. 项目整体设计与思路拆解1.1 这个项目到底做了什么先把这个项目的边界说清楚。dragonballz_e235-2 是一个基于 LoRA 的轻量模型训练项目目标很单一让文生图模型能够理解并生成《龙珠Z》的角色特征。包括悟空、贝吉塔、弗利萨这些经典角色的脸型、发型、肌肉线条、道服细节甚至波及到原作里那种高饱和赛亚人气场的色彩倾向。如果只是翻车后拿张参考图去垫图那其实不需要训练任何东西直接图生图加 ControlNet 就能凑合但那只适合单张定制不适合批量出图。我需要的是一套可复用的能力——输入一句 prompt模型就知道该怎么画“超级赛亚人状态下的悟空”而不是画出某个陌生人套了橘色武道服。为了实现这一点就必须给模型做针对性训练。LoRA 有个好处它不像全量微调那样需要动整个大模型的参数。你得到的产物是一个几百 MB 甚至几十 MB 的权重文件训练时吃什么显存、推理时怎么挂载都很轻量。这个项目最终产出的 dragonballz_e235-2.pt 文件大小也就是 144MB 左右跑起来毫无压力。也正是因为这种轻量特性我可以在同一个基础模型上反复试不同版本不满意就删掉重来成本比全量微调低了一个量级。1.2 为什么选择 LoRA 而不是全量微调说实话最初我也犹豫过要不要直接全量微调毕竟那样对画风的控制力最强。但真正想清楚训练成本后LoRA 几乎是唯一合理的选择。全量微调一个大模型哪怕只是二次元领域的 SD 模型也需要一张 24GB 以上的显卡而且要准备足够多的高质量图片和漫长的训练时间。更关键的是全量微调很容易把模型原有的多样性破坏掉遇到龙珠Z之外的主题时能力会退化得不偿失。LoRA 的核心原理是给原有模型的权重矩阵加了一个低秩的旁路分支训练时只更新这个旁路的参数原本的核心权重保持不变。这样做既能让模型在某些风格或角色上“特化”又保留了通用能力。如果你接触过 adapter 这个概念LoRA 就类似给模型装了一个可拆卸的专用模块想用的时候挂上不想用就摘掉。好处非常直观训练时间短、显存占用低、可以多个 LoRA 叠加。这个项目的训练脚本跑在常规的 kohya_ss 框架上实际训练一轮完整数据的时间大约 40 分钟。如果换成全量微调同样的数据和硬件时间会拉到几十个小时而且失败成本极高。所以我的结论很清楚做单风格或单角色的定制LoRA 是正确的路。1.3 版本号 e235-2 的来历顺手解释一下项目名。我训练模型时有保留检查点的习惯每训练几个 epoch 就存一个中间结果方便回溯。dragonballz_e235-2 里的e235 表示第 235 个 epoch-2 表示在这个 epoch 内保存的第二份权重文件。很多人第一次训练 LoRA 时会忽略检查点策略觉得跑完最后一步就万事大吉。但实际上后面跑着跑着 loss 反而升高、画风发生漂移的情况非常常见这时早期检查点反而是最可用的版本。e235-2 不是最终 step 的产物而是我在观察验证集表现之后特意回退选中的一个中后期权重。这个细节后面在参数优化部分还会展开讲。2. 训练前准备环境、数据与基础模型2.1 硬件配置与显存核算先聊硬件因为很多人是被这一步卡住的。训练 LoRA 并不需要顶配 GPU但要跑得舒服显存至少 8GB 起步。我这台机器实际配置是 RTX 3070 8GB 显存搭配 64GB 内存。在 SD1.5 底座模型上加 LoRA 训练batch size 设为 1 或 2 是可以顺利跑起来的。如果你用的是 SDXL 系列底座建议上 12GB 以上显存否则只能把 batch size 压到 1训练速度会明显下降。关于显存计算简单记一个公式思路显存占用大致由模型参数、激活值、优化器状态、batch size、图像分辨率共同决定。同样一张 1024x1024 的训练图和一张 512x512 的训练图相比激活值占用的内存呈平方级增长。我用 SD1.5 底座的时候统一把训练分辨率设在 768x768显存占用大概在 6.5GB 左右如果上调到 10248GB 的卡就会非常紧张。训练时建议给 GPU 留出至少 1GB 的余量否则跑一个多小时之后才爆显存前面的时间全部白费。我在项目初期就吃过这个亏当时用 1024x1024 的分辨率裸跑训练到第四步直接 OOM。后来降低分辨率、把 cache latents 打开才稳定跑完。2.2 基础底座模型的取舍训练 LoRA 不能脱离底座模型单独看因为 LoRA 只是叠在底座上的“风格补丁”。同一个 LoRA放在不同底座上生成效果差异很大。这次训练 dragonballz_e235-2 的时候我选择的是基于 SD1.5 架构的二次元特化底座。原因很简单龙珠Z的画风本身是赛璐璐手绘风格线条硬朗、色彩明快底座的二次元基础能力越强我训练时越省力。你要是有自己的偏好也可以用 Anything V5、Counterfeit 这类常见的动漫模型做底座效果区别主要在皮肤质感和线条粗细上。以我的经验选底座时不要贪“通用”和“全能”而是要选跟目标风格最接近的。如果底座本身跟目标画风相关度太低LoRA 要在更深层的特征上“掰方向”训练集得更大、轮数得更多效果还不一定好。另外还需要注意一点LoRA 训练出来的权重文件是和底座架构绑定的。你拿 SD1.5 结构的 LoRA 去挂 SDXL 底座是挂不上去的。保存检查点之前要看清楚训练脚本里预设的 base model 路径别搞混。2.3 数据集的采集、裁剪与打标很多人以为训练素材越多越好这个想法在 LoRA 场景下不完全正确。项目最终采用的是约 300 张图像的数据集覆盖了《龙珠Z》原作中各个篇章的角色。这个数量对单角色或单一风格来说足够再多反而容易让模型混淆不同角色的特征。数据准备的三个关键步骤是采集、裁剪、打标。采集阶段尽量找无字幕、无水印、无背景干扰的原图偏向人物特写和半身构图这样 LoRA 才能学到脸部与服装细节。如果截图里人物占画面比例太小模型学到的是场景氛围而不是角色特征。裁剪阶段我自己不太喜欢用一键脚本因为自动化工具容易把人脸切到画面边缘导致训练时人物不完整。这次项目里大部分图是我手动框选后切成 1:1 的正方形然后 resize 到 768x768。这里面有个小技巧宁可图中人物稍微“顶天立地”也不要让背景太空因为龙珠Z的角色体态本身就是辨识度的一部分。打标是决定最终效果的重头戏。使用 WD14 Tagger 之类的自动打标工具生成标签然后一定要人工过一遍。我打标的逻辑是保留角色名、发型、服装颜色、姿势等描述性标签删掉那些容易让模型混淆的模糊标签。比如“solo”“1girl”这类标签如果误打会直接影响角色性别特征需要逐张核对。下面是打标处理的一个典型对照示例处理阶段示例标签自动生成anime, dragon ball, goku, blue eyes, orange clothing, solo, upper body, black hair, male人工清理后goku, blue eyes, orange gi, spiky black hair, upper body删除 “solo” 是避免模型把所有龙珠角色都理解成单人构图删除 “anime” 这类通用词则可以避免弱化角色特定特征。打标不是越详细越好和模型学习重点无关的标签反而会稀释有效信息。3. LoRA 训练核心参数解析与调优3.1 网络结构与关键参数训练 LoRA 时最先碰到的是 network dim 和 network alpha 这两个参数。你可以把它们理解成旁路矩阵的“宽度”和“权重”。network dim维度决定旁路矩阵能容纳多少信息维度越高理论上可以学习的特征越丰富但副作用是文件变大、训练变慢、过拟合风险增加。network alpha缩放系数则控制旁路结果最终叠加到原模型上的幅度alpha 越低模型原始风格保留得越多。这次项目我用的配置是 network dim 64、network alpha 32。这个组合是我在多次试错后确定的平衡点。dim 64 足够捕捉龙珠Z里繁多的角色风格特征alpha 32 则保证了训练出的风格不会把底座的通用能力覆盖得太狠。如果你想从零开始我的建议是先抄这个配置跑一轮dim 64、alpha 32然后根据结果再调整。如果要追求更高还原度可以把 dim 提到 128alpha 保持在 64 或 32如果发现模型生成的角色千篇一律就把 dim 降回 32。3.2 学习率与优化器的选择学习率是 LoRA 训练里最容易翻车的参数没有之一。设置太大会导致模型学成“四不像”设置太小则训练几小时后风格变化依然不明显。项目里我给不同模块分别设置了学习率Unet 部分学习率 1e-4tetext encoder部分学习率 5e-5采用 cosine 退火策略。text encoder 负责理解 prompt 语义它更新幅度过大容易破坏模型的语言理解能力所以学习率反而要比 Unet 低一些。用生活化类比来解释Unet 像是一个画师学习率是画师改变画风的速度text encoder 像是一个听话的助理学习率是助理理解新指令的速度。画师可以在短时间内培养新风格但助理如果变化太快就会把你说的每一句话都误解得离谱。所以给助理的“学习速度”要更慢、更谨慎。优化器我选了 AdamW8bit而不是普通的 AdamW。原因有两个8bit 版本显著降低显存占用同时在 LoRA 小规模训练上几乎没有精度损失。项目跑完后 loss 从初始的 0.15 左右逐步下降到 0.07 附近整个过程没有出现 loss 剧烈波动。3.3 过拟合判断与检查点保存策略LoRA 训练最常见的问题就是过拟合。模型训练过度后生成的角色会无限接近训练集中的某几张图动作、表情、视角都变得极其单一。判断过拟合的方法很简单训练过程中每隔几个 epoch 生成一组验证图对比角色多样性表现。我在项目里设置每 5 个 epoch 保存一次检查点同时额外使用一个验证集 prompt 列表包含“悟空正面”“贝吉塔战斗姿势”“弗利萨飞行”等不同描述。每次保存后立刻用同一组 prompt 跑一遍生成观察效果。如果发现第 120 轮的角色形态比第 200 轮更多样心里就要有数——后面可能是过拟合区。e235-2 这个最终版本就是在第 235 轮保存的两份权重里挑出来的。当时第 235 轮的第一份权重已经出现面部模式固化第二份却保持了比较好的多样性所以我把第二份单独抽出重命名。这也算是我个人排查时的经验文件名不能随便存每份权重需要附加上 epoch 和验证集得分否则后期根本找不到该回退到哪个版本。4. 实操过程从训练到推理验证4.1 训练命令与日志解读这部分直接给一份我实际跑过的可参考命令基于 kohya_ss 的 LoRA 训练流程。命令并不复杂难的在于每个参数怎么理解。以 sd-scripts 风格命令为例实际跑的是 GUI 前端但底层逻辑完全一致accelerate launch train_network.py \ --pretrained_model_name_or_path./models/sd15-anime-base.ckpt \ --train_data_dir./datasets/dbz/训练集 \ --output_dir./output/dragonballz \ --output_namedragonballz_e235 \ --resolution768,768 \ --train_batch_size2 \ --learning_rate1e-4 \ --unet_lr1e-4 \ --text_encoder_lr5e-5 \ --network_dim64 \ --network_alpha32 \ --max_train_epochs250 \ --save_every_n_epochs5 \ --mixed_precisionbf16 \ --save_precisionbf16 \ --optimizer_typeAdamW8bit \ --lr_schedulercosine参数的解释resolution768,768输入图统一缩放分辨率。train_batch_size2每批次训练图数量8GB 显存上限比较安全。network_dim64和network_alpha32LoRA 网络的维度与缩放系数。max_train_epochs250最大轮数。实际我在训练到约 235 轮时发现验证效果最优不等 250 轮结束就手动停止并挑权重。save_every_n_epochs5每 5 轮存一个中间检查点方便回退。训练日志里最有价值的字段是 loss 值和 step 耗时。loss 值下降速度如果在前 20 轮内非常快说明数据集标签质量不错如果 loss 一直居高不下那大概率是标签有冲突或者采集的图像风格太杂。step 耗时则能帮你验证当前硬件设置是否可持续跑完。我这边每个 step 大约 1.2 秒训练一条完整 epoch 约 40 分钟235 轮累计时长约 160 小时中间断过几次重新续训后继续跑完。4.2 推理验证与效果评估训练完成后的验证阶段我习惯用 WebUI 的 LoRA 插件直接加载权重文件做测试。关键步骤是把 LoRA 存到models/Lora目录然后在 prompt 里写上lora:dragonballz_e235-2:0.8这样的触发语句。这里有一个很关键的权重参数LoRA 权重比例weight。这个值不是固定的也不是越高越好。我测试了几个档位结果如下权重值效果表现0.4角色有一点龙珠风味但五官和服装仍偏向底座默认画风0.8角色特征鲜明头发质感和肌肉线条都接近原作推荐值1.2角色特征过于强烈出现面部模式固化背景也带出龙珠动画滤镜感所以我在项目记录里习惯把 0.8 作为默认调用值。实际场景中你还要考虑提示词的搭配如果提示词里已经有很强的风格化描述weight 可以适当下调到 0.6 左右。验证时可以重点看三类 prompt单一角色特写、多角色互动、非龙珠主题的跨界图。前两类验证的是风格还原度第三类验证的是 LoRA 会不会把原模型能力带偏。我发现 e235-2 在跨界图上表现很不错比如让悟空穿现代卫衣模型能保留角色脸型但换掉道服这说明 LoRA 学到的是角色核心特征而不是简单复制画面。4.3 组合使用与其他角色 LoRA 叠加dragonballz_e235-2 还可以和其他 LoRA 一起叠加使用这是 LoRA 玩法里特别有意思的一点。叠加的原理其实是在原模型上按顺序挂载多个旁路模块互相增补特征。我实际试过的组合方案是“dragonballz_e235-2 特定动态姿势 LoRA”。只用龙珠 LoRA 时模型生成的角色多是站姿或标准战斗姿势动作变化比较有限。叠加一个动态姿势 LoRA 后同样 prompt 下生成的角色能出现跳跃、挥拳、瞬间移动等更丰富动态画面。组合使用时要注意权重分配。两个 LoRA 的权重都过高会导致画面过度风格化甚至互相“打架”。我的经验是主动 LoRA龙珠风格权重保持在 0.8辅助 LoRA 权重降到 0.5 左右整体画面会比较自然。这类组合调试没有唯一答案建议固定一个 LoRA 的权重不变只调另一个小步快跑最后找到你的“甜点区间”。5. 常见问题与排查实录5.1 训练中的坑先说训练过程中最常遇到的三个问题也算是给我自己踩过的坑做个记录。第一个坑是爆显存。刚开始把分辨率调到 1024 后直接 OOM后来通过两个手段解决一是把分辨率降回 768二是启用 cache latents。cache latents 的作用是提前把训练图像编码成 latent 向量缓存起来训练时不再重复跑 VAE 编码过程显存和训练时间都能省下来。如果你遇到 OOM优先检查这两项而不是急着换卡。第二个坑是 loss 变成 NaN。出现这种情况九成是学习率过高或者训练数据里有损坏的图片。排查步骤很简单先调低学习率再逐条检查数据集里是否有奇怪的 RGB 图片。我之前有一张非常暗的截图导致计算时梯度异常删掉这张图之后就恢复正常了。第三个坑是风格不集中。训练完发现模型有时画出龙珠脸有时画出普通动漫脸这种“人格分裂”现象通常是数据集打标不一致造成的。比如同样一张悟空图一张标签是 “spiky black hair”另一张却是 “black hair”模型就不知道该学哪种发型特点。解决办法是统一打标词表把相似描述合并成一个标准词。5.2 推理时的坑训练完成只是第一步推理阶段的坑同样不少。最典型的是 Lora 权重没被正确加载。很多人把文件放进models/Lora之后在 WebUI 里找不到模型名原因多半是文件名后缀不对。SD1.5 底座通常用.pt或.safetensors但某些管理框架只认.safetensors如果你手头只有.pt文件需要手动转换。还有一个容易忽略的问题是触发词。LoRA 训练时如果打标里没有统一保留某个角色名推理时即使把 LoRA 挂载上模型也可能不会主动触发角色特征。所以训练阶段必须在所有相关图片里添加统一角色名标签比如goku。推理时 prompt 里同时写入goku和lora:dragonballz_e235-2:0.8才能稳定激活。5.3 效率提升建议最后给几个效率提升方向适合已经跑通训练流程的人。如果你有大量同类 LoRA 训练需求建议搭建一个小型提示词模板库把所有验证 prompt 保存为模板。每次训练完直接一键跑出多组验证图不用再去手动输入。配合批量生成脚本可以快速对比不同 epoch 权重节约时间。如果手头有多张显卡可以尝试用多卡并行训练。即使没有多机分布式环境单机双卡也能明显加快速度。kohya_ss 支持在启动时指定多卡参数配置成本很低。另外数据集 tag 文件建议放在独立目录用版本管理工具管理。我自己的数据集 tag 每次修改都会保留 git 记录这样当训练效果不对劲时可以轻松查看到底是哪些标签变化导致的。6. 训练过程中的一点额外心得说到最后还是想分享一点不太好量化、但对结果影响很大的经验。训练 LoRA 这件事数据质量永远比训练时长重要。你在网上找 1000 张随机截图不如精挑细选 300 张高质量原画。很多人在数据准备阶段“得过且过”然后把问题归结为参数不好我只能说这种判断顺序是反的。先把数据集打标做得干净准确再谈调参否则就是在沙滩上盖楼。另外不要迷信固定的训练轮数。200 轮、300 轮只是参考值判断时机靠的是观察验证效果。我后面几次又跑过类似的风格模型有些 80 轮出效果最好有些需要跑到 300 轮以上。真正可靠的方式是设定一个覆盖范围为 250 轮的检查点计划每隔 5 轮存一次权重最终在一堆检查点里手动挑选最合适的整个流程比一次性跑到底更高效。如果你也准备训练一个动漫风格 LoRA我特别建议你在训练前先想清楚一个问题你希望模型“学到的东西”到底是什么。是某个具体角色的脸是整部作品的画风还是角色在不同场景里的气质想清楚这个问题后再去决定数据集标签的取舍和参数设置方向会明确很多。dragonballz_e235-2 这个名字看着简单里面装的确实是一个完整项目积累下来的所有尝试。