萨雷安の迦巴勒幻想大图书馆

    • 注册
    • 登录
    • 搜索
    • 版块
    • 最新
    • 标签
    • 热门
    • 用户
    • 群组

    为自己的角色制作LORA!

    永远少女亭
    1
    1
    3640
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • FairyScript
      FairyScript 最后由 编辑

      最新编辑日期: 23-03-10


      写在前面

      本文仅做技术归档,旨在将从安装依赖到最终生成lora的步骤进行说明记录.同时也涵盖了个人总结的经验积累.受限于本人的知识面与未来技术的发展,未免会有不准确与过时之处.

      必要的准备

      • Python 3.10 必须是3.10.x, 最好不低于3.10.8
      • 一些关于python操作的基础知识

      所涉及的工具

      本文中选取的工具来源于国人的整合包,故不会对具体的脚本编写做详细介绍.之前已经有现成工作链的读者可以移步 https://github.com/kohya-ss?tab=repositories

      以下工具请根据其附带的安装说明正确安装,具体的安装步骤这里不再赘述

      • sd-script整合包 https://github.com/Akegarasu/lora-scripts
      • 青龙训练脚本 https://www.bilibili.com/video/BV15j411F7nJ
      • tag编辑工具 https://github.com/starik222/BooruDatasetTagManager
      • 抠图工具 anime-segmentation (作者的名字有敏感词…自行Google)
      • webui,这里选择了秋叶启动器 https://www.bilibili.com/video/BV1ne4y1V7QU

      哈吉马路呦!

      准备训练环境 (此过程请参照 lora-scripts 的readme操作)

      1. clone训练整合包 git clone https://github.com/Akegarasu/lora-scripts
      2. 执行 install-cn.ps1
      3. 将下载好的青龙脚本放入根目录,之后我们只会使用到青龙的脚本

      准备训练集

      其实就是进游戏截图.最终的目的是获取15张左右(更多也可以,但会增加训练时长.根据硬件情况酌情选择)人物不同角度,不同光线环境的近身像.

      Tips:

      • 背景不建议离人物主体过近,尤其是光线条件不好的情况.会导致抠图效果差
      • 如果gpose截图. 不要开模拟景深!!! 人物边缘的模糊会导致抠图效果急剧下降,甚至会直接扣掉一只手之类的.
      • 如果不局限于一种表情/动作的话,建议不同表情/不同动作的图多来几张.不用担心图中只有一部分人物.ai会正确处理这种情况.
      • 同上,全身像,半身像,特写,背面. 训练集尽可能覆盖全面会让训练效果更好.
      • 直接截图还是gpose? 训练集的质量大于数量,所以尽可能保证图片的清晰度与可分辨性是最好的.我更加推荐gpose.但记得关掉景深等会导致人物与背景边界模糊的选项.

      最终我们得到了如下的一些截图

      ozjjP.png

      接下来我们处理图片

      首先将图片裁切成只有人物的部分(建议手动裁切,目前我还没有找到适合的裁切工具能够完整的裁切出人物主体).不需要顾忌长宽比.但最好能做到最小分辨率不小于512x512 (这也是为什么建议截图时选择近身像)

      ozpcN.png

      在 anime-segmentation 项目中新建两个文件夹 train 和 output 用于放置抠图的原图和结果
      然后将图片放入 anime-segmentation/train 中.
      执行python inference.py --net isnet_is --ckpt ./model/isnetis.ckpt --data ./train --out ./output --img-size 1024 --only-matted (如果启用了venv,需要在虚拟环境中执行)

      切好的图片就会在 output 文件夹中了

      ozTtF.md.png

      可以看到有一张图的手被切掉了,这就是开了景深的后果 😞 这也导致了我最后模型的左手效果很差,因为训练集中没有提供足够的信息.

      处理好的图就可以拖进webui进行打tag了,建议使用图示的配置,可以尽可能保留图片的内容不会被意外裁切

      o6V2t.png

      打完tag之后,就可以进行tag的编辑. 具体如何编辑tag请参照青龙的视频 https://www.bilibili.com/video/BV15j411F7nJ 其中的要点在于. 你需要将属于你的角色的tag删除 以我的角色举例,就是 白发 红色眼睛 粉色和服 等等.这样ai就可以将这些特征绑定到你的人身上,而不是绑定到大模型上.

      待tag编辑完之后,就可以进入正式的训练阶段了.

      我个人训练使用的底膜是 https://huggingface.co/Linaqruf/anything-v3.0/tree/main fp16版本.具体哪个底模效果更好我没有数据支撑.欢迎补充.

      按照青龙的说法,我们先使用 DA 算法进行训练测试. 拿到最高学习率数据之后,将最高学习率除以三,text学习率选择unet学习率/8 的数据,选择 Lion 模型进行正式训练.

      秋叶整合包中,默认没有安装DA 需要 pip install dadaptation才能运行

      此处建议先完整看一遍青龙视频再回来看文章

      如何获取学习率数据?

      1. 青龙脚本,只将优化器调整为 DAdaptation,其他参数不变(训练集位置等还是要调整的)
      2. 跑2个epoch,看到 epoch 2 结束了直接 ctrl + C终止.然后运行 tensorboard --logdir=logs 稍后他的命令行会输出一个url,打开url就可以看到刚刚训练的图表了.将图表下拉到 lr这一项,鼠标hover上去就可以看到对应的学习率数值.我们选取最高点.可以看到是 2.22e-4

      2,22e-4 = 2.22 * 10^-4 = 0.000222

      o6bpk.png

      将其除以三取接近值可得 74e-6, 再除8可得 9e-6

      o6rdv.png
      这样就得到了我们需要的学习率,将优化器改回 Lion 就可以进行实际的训练了(记得将之前训练的产物删掉,不确定不删除会发生什么)

      训练完成后,在output文件夹就可以训练好的模型了,一般来说直接选取最后一个即可.但也存在中间的效果会更好的情况,可以参考tensorboard 给出的loss数据来判断.

      成果

      o6gpF.md.png

      o6x9H.png

      原角色

      o6eNE.png

      可以看出模型还是存在一些问题的. 角没有了(这主要是tag处理的问题,况且ai对ff14这种不讲道理的穿模头处理效果真的不太好),衣服上的花偶尔会被ai当做场景贴上去(这是因为给的关键词太少了).但人物的基本特征保留的没有什么大问题.

      一些额外的…

      因为上文中切图意外将手切掉的问题,我后续又把带背景的图和不带背景的图混在一起训练了一次,但loss情况差了一倍(紫色为抠图数据)
      o6GHX.md.png

      这里面显然有数据集质量的问题,但如果不追求对特定场景重现的话.抠图或许是更好的选择?

      1 条回复 最后回复 回复 引用 1
      • First post
        Last post
      Powered by N(ode).B.B | Contributors
      粤ICP备20037988号