stable diffusion打造自己专属的LORA模型

news2024/9/23 21:18:35

通过Lora小模型可以控制很多特定场景的内容生成。

但是那些模型是别人训练好的,你肯定很好奇,我也想训练一个自己的专属模型(也叫炼丹~_~)。

甚至可以训练一个专属家庭版的模型(family model),非常有意思。

将自己的训练好的Lora模型放到stableDiffusion lora 目录中,同时配上美丽的封面图。

lora

(plen_me、plen_vivi,这两个是我训练的和家里人的模型~_~)

这样就可以将你的Lora模型和其他Lora模型融合使用了。

再配上Controlnet基本可以,将自己的pose+特征融入到其他任何lora模型中。

【1】
下面我们看下如何训练自己的模型。

(我的炼丹炉配置,win10+i7F+4080 )

首先,Lora模型可以通过lora-scripts 脚本进行训练。

仓库地址:https://github.com/Akegarasu/lora-scripts

找个目录拉下来,先安装sd-scripts子项目,然后安装lora-scripts项目。

(敲黑板)重点看下sd-scripts 子项目:
https://github.com/kohya-ss/sd-scripts/tree/b5c60d7d62d6bb4a174ac09327dc517fc4446523

要严格按照作者给的步骤安装。(要不然会有很多奇怪的问题)

如果顺利的话大概安装需要30min左右。(需要kexue上网应该就不用多介绍了)

【2】
接下来准备需要训练的图片。

根据最后的生成效果,要找头像清晰的,脸部轮廓清楚的,背景最好是白色的。

然后就需要我们将图片进行预处理。

先将图片放在一个文件夹里,然后定一个预处理之后的文件夹名字。

然后在stablediffusion中找到【训练】【图像预处理】模块

lora

按照说明,填入预处理图片路径和目标目录,然后选择【Deepbooru生成标签】。然后点击【Preprocess】,等处理完成。

到目标目录下,看下生成的标签信息。

lora

lora

这些标签就是训练模型的图片特征了,基本上生成出来的标签还是要check下。

如果某个重要的标签丢失,或者识别错误(girl识别成boy ~_~)会直接影响炼丹质量。

【3】
将预处理目标文件夹复制到lora-scripts脚本的主目录的train目录中。(如果没有就创建一个)

如果你有多个训练集合可以在train中创建一个目录,然后放到这个目录中。

训练自己的专属模型,需要依赖一个主模型。真人特征的模型貌似用 chilloutmix_NiPrunedFp32Fix 比较流行(这个模型很强大,你懂的!)。

模型地址:
naonovn/chilloutmix_NiPrunedFp32Fix at main

将下好的模型文件复制到lora-scripts->sd-models文件夹中。

【4】

准备工作差不多了,我们编辑下训练脚本。

lora-scripts目录中的train.ps1 脚本文件。

# Train data path | 设置训练用模型、图片
$pretrained_model = "./sd-models/chilloutmix_NiPrunedFp32Fix.safetensors" # base model path | 底模路径
$train_data_dir = "./train/test" # train dataset path | 训练数据集路径

$pretrained_model:就是我们下载的训练模型的基础模型,把名字换掉。
$train_data_dir:训练数据目录。

    # Train related params | 训练相关参数
    $resolution = "512,512" # image resolution w,h. 图片分辨率,宽,高。支持非正方形,但必须是 64 倍数。
    $batch_size = 2 # batch size
    $max_train_epoches = 20 # max train epoches | 最大训练 epoch
    $save_every_n_epochs = 2 # save every n epochs | 每 N 个 epoch 保存一次

$resolution:如果你的图片预处理的时候没有调整过,这里就保持默认。
$batch_size、$max_train_epoches:如果你的卡不是很强,这里的参数可以小一点。(这两个参数主要控制训练的次数和显存加载的张量数据集)。

    # Output settings | 输出设置
    $output_name = "meoutput" # output model name | 模型保存名称

$output_name:用默认的也行,最好自定义一个名字,避免重复生成覆盖原来模型。

保存,然后右键 【使用PowerShell运行】。

(这里还是要祈祷下,不一定能一次成功。~_~)

脚本在运行过程中会出现一些'triton'加载失败的错误。

lora

lora

但是其实不影响模型的训练(我查了下好像是windows电脑就不支持这个模块)。

这里的错误如果不能正常执行,大概率是前面敲黑板的地方你没有仔细看。

等模型训练完。(我15张图,大概跑了10min左右。)

我们看下output目录输出的模型文件。

lora

这里的模型文件保存的个数,是train.ps1脚本文件里设置的。

最后我们要通过验证这些模型准确度,选用哪一个。

【5】

将这些模型文件全部复制到

E:\stable-diffusion-webui\extensions\sd-webui-additional-networks\models\lora

对应的扩展忙碌下。
如果还没有安装 sd-webui-additional-networks 扩展,记得先到扩展中安装。

也可以直接用git地址安装(有时候这个扩展查询有点问题)
https://github.com/kohya-ss/sd-webui-additional-networks.git

然后我们测试下这几个模型哪一个不错。

顺利安装插件之后,就可以在界面上看到 【Additional Networks】功能菜单。

lora

要测试自己的模型,基础模型还是要选用我们训练的 chilloutmix_NiPrunedFp32Fix 模型。

prompt可以用自己提取的标签作为测试。

批次可以适当多点,到时候可以选择。

lora

lora

这个过程大概需要个20min左右。(可以喝点茶等待创作了~_~)。

来一起见证AI的创作吧 ~~!

lora

图片的上方是每一个模型名称,左边是特征权重,组成的一个二维表格。

lora

有点那个意思 hhh。

下面这些就有点辣眼睛了 。

lora

lora

根据自己的眼光,我们挑选一个相对比较不错的模型。

整体觉得这个模型不错,我们记下模型的名字。

lora

将这个模型复制到 E:\stable-diffusion-webui\models\Lora 目录中。

lora

可以给你的模型配上一个封面,只要文件名和模型名一样就可以了。

【6】

有了自己的专属模型,就可以结合其他lora模型一起使用了。
我们试下水墨风格。

下载lora模型:Moxin_10
下载基础模型:dalcefoPainting_3rd.safetensors

(有些基础模型在C站没有,可以到huggingface上找找,再不行github上肯定有)

lora

点开这个红色的收缩面板。

lora

刷新一下,让lora模型文件重新加载下。

然后选择我们保存的lora文件,此时这个模型的prompt设置会在文本框里。

lora

然后再选择水墨风模型 Moxin。

调整下每一个模型的权重,此时可以将我们自己的模型特征调大些。

如果没啥问题,我们就去C站找这个lora比较好的prompt拿过来用。

lora

lora

lora


这张虽然有点辣眼睛,但是特征是有了。

lora


这一张比较像我女儿 ~_~。

最后,stablediffusion+lora等AIGC属于开挂技术,我们还是要遵纪守法做一个好同志!!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/810923.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【每天40分钟,我们一起用50天刷完 (剑指Offer)】第四十一天 41/50【异或】

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

自定义类型知识详解(结构体,位段,枚举,联合体)

目录 结构体 定义,初始化,自引用 内存对齐,修改默认对齐数 传参 位段 位段内存问题 跨平台及其应用问题 枚举 定义,初始化 实战举例使用及其优点 联合体 联合体定义 特点 大小计算问题 结构体 定义,初始化&#xff…

揭秘 ChatGPT:构建 AI 搜索的不同方法

作者:Sherry Ger 什么是 ChatGPT? 首先,ChatGPT 太棒了! 它可以帮助你更高效地工作 —— 从总结 10,000 字的文档到提供竞争产品之间的差异列表,以及许多其他任务。 ChatGPT 是最著名的基于 Transformer 架构的大型语…

SpringBoot读取配置文件顺序

文章目录 一、前言二、SpringBoot配置文件目录读取顺序源码解析 三、SpringBoot配置文件类型读取顺序源码解析 一、前言 本文通过源码分析 SpringBoot 加载配置文件目录的顺序,以及 properties、xml、yml、yaml文件的读取顺序 二、SpringBoot配置文件目录读取顺序…

前端学习——Vue (Day7)

vuex 构建 vuex [多组件数据共享] 环境 state状态 mutations状态 mapMutations actions mapActions getters 模块 module (进阶语法) 综合案例 - 购物车 axios报错解决方案 import axios from axiosexport default {namespaced: true,state () {return {list: []}},mutations…

用户体系之账户设计

文章目录 前言一、需求分析1、登录功能2、退出功能3、账号绑定功能3、其他注意事项 二、账户设计1、表设计2、QA 三、实践1、账户密码登录2、手机号登录3、第三方授权登录4、账户统一 前言 随着互联网的发展,越来越多的应用、网站需要用户进行登录才能使用。为了方…

LeetCode 刷题 数据结构 数组 283题 移动零

难度:简单 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0]示例 2: 输入:…

QGraphicsView实现简易地图2『瓦片经纬度』

前文链接:QGraphicsView实现简易地图1『加载离线瓦片地图』 地图采用GCJ02 Web 墨卡托投影,最小坐标:(-180.00000000000000,-85.05112877980655),最大坐标:(180.00000000000000,85.05112877980655)。瓦片地图单张图片像…

如何通俗理解扩散模型?

扩散模型(Diffusion Model)是一类十分先进的基于扩散思想的深度学习生 成模型。生成模型除了扩散模型之外,还有出现较早的 VAE ( Variational Auto- Encoder,变分自编码器) 和 GAN ( Generative Adversarial Net ,生成对抗网络) 等。 虽然它们…

Cpp学习——类与对象(2)

思维导图: 一,构造函数 1.定义 对于构造函数首先就要知道构造函数怎么写,构造函数怎么写呢?你要知道如下两点: 1.构造函数的函数名要与类名相同 2.构造函数是没有返回值的,但可以有参数。 因为这第二点&am…

ubuntu目录分析

在Ubuntu根目录下,以下是一些常见文件夹的含义: /bin:存放可执行文件,包含一些基本的命令和工具。 /boot:存放启动时所需的文件,如内核和引导加载程序。 /dev:包含设备文件,用于与硬…

关于计算机视觉的Open3D简介

一、说明 Open3D 是一个开源库,使开发人员能够处理 3D 数据。它提供了一组用于 3D 数据处理、可视化和机器学习任务的工具。该库支持各种数据格式,例如 .ply、.obj、.stl 和 .xyz,并允许用户创建自定义数据结构并在程序中访问它们。 Open3D 广…

【雕爷学编程】MicroPython动手做(16)——掌控板之图片图像显示

知识点:什么是掌控板? 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED…

进程_PCB 的理解

目录 一. PCB 的概念 1. 为什么需要PCB 2. PCB的属性 二. task struct 1. task struct 介绍 2. 查看进程指令 3. PID 4. PPID 父进程是什么? 为什么要有父进程? 5. fork 创建子进程 1) fork 后的现象 为什么会打印两次? 2) 的返…

用C语言实现插入排序算法

1.设计思路 用插入排序对长度为n的待排序数组A进行排序的伪代码(在代码中,A中元素的数目n用A.length来表示)。 伪代码如下: INSERTION-SORT(A) for j2 to A.length:keyA[j] //将A[j]插入已排序序列A[1..j-1]ij-1while i>0…

【MTI 6.S081 Lab】Copy-on-write

【MTI 6.S081 Lab】Copy-on-write The problemThe solutionImplement copy-on-write fork (hard)实验任务Hints解决方案问题解决思考uvmcopykfreekallockpagerefcow_handlertrap 虚拟内存提供了一定程度的间接性:内核可以通过将PTE标记为无效或只读来拦截内存引用&a…

Quartz项目搭建与任务执行源码分析

数据库准备 准备一个MySQL数据库,版本为8.0,然后创建一个库,并从quartz官方的版本包中找到名称为tables_mysql_innodb.sql的脚本执行进去(脚本内容文后也有提供)。 项目依赖说明 创建一个Maven项目,引入…

Python方式实现简易弹道计算机

1 问题 本周无意间刷到了德国豹2A5坦克的火控介绍,想自己编写一个不考虑空气阻力以及测风影响的简易弹道计算机(大口径火炮)。 2 方法 由高中物理知识了解到,炮弹出膛之后基本就是抛物线列个抛物线方程就好了; 百度得火炮的弹道方…

【Django学习】(十六)session_token认证过程与区别_响应定制

一、认识session与token 这里就直接引用别人的文章,不做过多说明 网络应用中session和token本质是一样的吗,有什么区别? - 知乎 二、token响应定制 在全局配置表中配置 DEFAULT_AUTHENTICATION_CLASSES: [# 指定jwt Token认证rest_framew…

python_day17_多线程

threading模块 import timedef sing():while True:print("唱歌~~~~~~~~~~~~")time.sleep(1)def dance():while True:print("跳舞############")time.sleep(1) if __name__ __main__:sing()dance()此时为单线程 import threading import timedef sing(…