SD之lora訓練

目錄

為什么要訓練自己的模型

SD模型微調方法

準備素材

1 確定要訓練的LoRA類型

2 圖片收集

3 圖片預處理

4 圖片標注

安裝Koyha_ss

訓練lora

1.準備參數和環境

2.啟動訓練

使用模型

1 拷貝訓練過的lora模型

2 啟動SD WebUI進行圖像生成


為什么要訓練自己的模型

訓練自己的模型可以在現有模型的基礎上,讓AI懂得如何更精確生成/生成特定的風格、概念、角色、姿勢、對象。

比如,你下載了一個人物的大模型checkpoint,但是你想生成特點的人物,比如迪麗熱巴,AI大模型是不知道迪麗熱巴長什么樣子的,這個使用lora就派上用場了。

要注意的是,對于一些基礎東西,比如長頭發、短頭發、黑色頭發、棕色頭發,這些AI 都是知道的,lora并不是做這個的。

SD模型微調方法

主要有 4 種方式:Dreambooth, LoRA(Low-Rank Adaptation of Large Language Models), Textual Inversion, Hypernetworks。它們的區別大致如下:

  • Textual Inversion?(也稱為 Embedding),它實際上并沒有修改原始的 Diffusion 模型, 而是通過深度學習找到了和你想要的形象一致的角色形象特征參數,通過這個小模型保存下來。這意味著,如果原模型里面這方面的訓練缺失的,其實你很難通過嵌入讓它“學會”,它并不能教會 Diffusion 模型渲染其沒有見過的圖像內容。
  • Dreambooth?是對整個神經網絡所有層權重進行調整,會將輸入的圖像訓練進 Stable Diffusion 模型,它的本質是先復制了源模型,在源模型的基礎上做了微調(fine tunning)并獨立形成了一個新模型,在它的基本上可以做任何事情。缺點是,訓練它需要大量 VRAM, 目前經過調優后可以在 16GB 顯存下完成訓練。
  • LoRA?也是使用少量圖片,但是它是訓練單獨的特定網絡層的權重,是向原有的模型中插入新的網絡層,這樣就避免了去修改原有的模型參數,從而避免將整個模型進行拷貝的情況,同時其也優化了插入層的參數量,最終實現了一種很輕量化的模型調校方法, LoRA 生成的模型較小,訓練速度快, 推理時需要 LoRA 模型+基礎模型,LoRA 模型會替換基礎模型的特定網絡層,所以它的效果會依賴基礎模型。
  • Hypernetworks?的訓練原理與 LoRA 差不多,目前其并沒有官方的文檔說明,與 LoRA 不同的是,Hypernetwork 是一個單獨的神經網絡模型,該模型用于輸出可以插入到原始 Diffusion 模型的中間層。 因此通過訓練,我們將得到一個新的神經網絡模型,該模型能夠向原始 Diffusion 模型中插入合適的中間層及對應的參數,從而使輸出圖像與輸入指令之間產生關聯關系。

總兒言之,就訓練時間與實用度而言,目前訓練LoRA性價比更高,也是當前主流的訓練方法。

準備素材

1 確定要訓練的LoRA類型

首先需要確定訓練什么類型的Lora,類型可以有風格,概念,角色,姿勢,對象等。本文以人物風格為例,講解如何訓練人物風格的LoRA模型。

2 圖片收集

對于訓練人物風格的LoRA,圖片收集的標準大致為:

  • 數量幾十張即可
  • 分辨率適中,勿收集極小圖像
  • 數據集需要統一的主題和風格的內容,圖片不宜有復雜背景以及其他無關人物
  • 圖像人物盡量多角度,多表情,多姿勢
  • 凸顯面部的圖像數量比例稍微大點,全身照的圖片數量比例稍微小點

(補充)圖片收集的渠道:

一般情況下,首先會想到去Google的圖片中進行搜索,但有時候搜索到的圖片分辨率較小,且質量也不是很高。這里Post其他博主推薦的一些圖片的網站,僅供參考:

  • 堆糖:https://www.duitang.com
  • 花瓣:https://huaban.com
  • pinterest:https://www.pinterest.com

優質訓練集定義如下

  1. 至少15張圖片,每張圖片的訓練步數不少于100
  2. 照片人像要求多角度,特別是臉部特寫(盡量高分辨率),多角度,多表情,不同燈光效果,不同姿勢等
  3. 圖片構圖盡量簡單,避免復雜的其他因素干擾
  4. 可以單張臉部特寫+單張服裝按比例組成的一組照片
  5. 減少重復或高度相似的圖片,避免造成過擬合
  6. 建議多個角度、表情,以臉為主,全身的圖幾張就好,這樣訓練效果最好

3 圖片預處理

這里主要介紹對于圖像分辨率方面的預處理。有些人也說,不用裁剪了,讓AI自己去適配。

收集的圖片在分辨率方面盡量大一些,但也不要太大。如果收集到的圖片過小,可以使用超分辨率重建的方式將圖片的方式擴大;然后將所有圖片都裁剪成512x512像素大小(雖然SD2.x支持了768x768的輸入,但考慮到顯存限制,這里選擇裁剪到512x512)。

對于超分辨率重建,可以使用SD WebUI中Extra頁面中進行分辨率放大。詳情請參考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/features/upscalers/

對于裁剪到固定尺寸,現提供如下的裁剪方法:

  • birme站點批量裁剪后批量下載,優勢是可以自定義選取
  • 使用SD WebUI自動裁切,或是手動裁切。詳情請參考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/training/prepare-training-dataset/

4 圖片標注

這里圖片標注是對每張訓練圖片加以文字的描述,并保存為與圖片同名的txt格式文本。

我們將使用神經網絡來為我們完成艱苦的工作,而不是自己費力地為每個圖片進行標注。這里用到的是一個名為BLIP的圖像標注模型。模型的標注并不完美,但后面經過人工的微調也足以滿足我們的目的。

標注工具可以使用SD WebUI中自帶的圖像標注功能。詳細使用請參考:https://ivonblog.com/posts/stable-diffusion-webui-manuals/zh-cn/training/prepare-training-dataset/中的預先給圖片上提示詞章節。

也可以使用一個工具:BooruDatasetTagManager

圖片標注完成之后,會在圖像文件夾里生成與圖片同名的txt文件。點擊打開txt文件,將覺得無關,多余的特征都給刪除掉。

強調:

每個txt中記得加上關鍵標記,如我這里是訓練迪麗熱巴,那我都加上關鍵詞dlrb,后面使用這個來觸發lora

至此,訓練數據集準備完成。

安裝Koyha_ss

目前網上有很多訓練LoRA的項目

1.koyha_ss_GUI:https://github.com/bmaltais/kohya_ss

2.LoRA_Easy_Training_Scripts:https://github.com/derrian-distro/LoRA_Easy_Training_Scripts

3.秋葉大佬的:https://github.com/Akegarasu/lora-scripts

本文介紹的是koyha_SS_Gui,windows的安裝

這個安裝簡單,照著git步驟來就可以了,目前代碼中默認torch是支持cuda118的,這個需要注意自己的顯卡了。

1.git clone https://github.com/bmaltais/kohya_ss.git
2.cd kohya_ss
3..\setup.bat
#選擇1,進行安裝

安裝過程可能報錯,哈哈,一步步來解決。

運行:

gui.ps1 --listen 127.0.0.1 --server_port 7861 --inbrowser --share

訓練lora

1.準備參數和環境

需要配置以下三個目錄:

  • image:存放訓練集
  • log:存放日志文件
  • model:存放訓練過的模型

首先在image文件夾中新建一個名為100_{{name}}的文件夾,100用來表示單張圖片訓練100次。然后將之前標注好的訓練數據都放入名為100的文件夾中。

由于之前準備的訓練數據集是真人風格的,故這里可以選擇真人風格的基座大模型:chilloutmix_NiPrunedFp32Fix.safetensors

詳細的配置如下:

隨后配置訓練參數:

系統提供了很多可以調節的參數,比如batchsize,learning rate, optimizer等等。大家可以根據自己實際情況進行配置。

2.啟動訓練

當路徑以及訓練參數都配置好之后,點擊入下圖所示的啟動按鈕即可啟動訓練。訓練的日志可在終端中查看。

使用模型

1 拷貝訓練過的lora模型

當訓練并測試完LoRA之后,就可以與基座大模型結合在一起進行特定風格的使用了。在使用之前需要先把訓練過的LoRA模型拷貝到SD WebUI對應的保存LoRA模型的文件夾中,對應的路徑為stable-diffusion-webui/models/Lora。

2 啟動SD WebUI進行圖像生成

1. 啟動SD WebUI界面,首先選擇基座大模型,由于本示例是寫實風,故這里選擇寫實風的基座大模型:chilloutmix_NiPrunedFp32Fix.safetensors

2. 輸入正向prompt,并在最后輸入 <lora:訓練的模型名稱:權重> 來調用訓練過的LoRA模型。這里記得加入dlrb,關鍵詞

3. 輸入反向prompt

4. 設定超參

5. Generate

即可使用訓練過的LoRA模型進行特定任務的圖像生成。

復制:全流程講解如何使用Kohya_ss自定義訓練LoRA - 知乎?,加入自己的理解和排版

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208746.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208746.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208746.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

webpack該如何打包

1.我們先創建一個空的大文件夾 2.打開該文件夾的終端 輸入npm init -y 2.1.打開該文件夾的終端 2.2在該終端運行 npm init -y 3.安裝webpack 3.1打開webpack網址 點擊“中文文檔” 3.2點擊“指南”在點擊“起步” 3.3復制基本安裝圖片畫線的代碼 4.在一開始的文件夾下在創建一…

【Android】使用Netty庫來實現Socket接收

在Android中使用Netty來實現Socket接收是可行的。Netty是一個高性能的網絡通信框架&#xff0c;支持多種協議&#xff0c;包括原生的Socket通信。 以下是一個簡單的示例代碼&#xff0c;演示如何使用Netty在Android中實現Socket接收&#xff1a; 首先&#xff0c;在你的Andro…

案例061:基于微信小程序的互助學習系統

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder X 小程序…

Flask template中使用iframe

Flaks template中使用iframe嵌套新的網頁&#xff08;new_page.html&#xff09;的網頁到歷史網頁&#xff08;old_page.html&#xff09;中&#xff08;減少新網頁的入口&#xff09; 1,增加iframe tag 在old_page.html中適當位置增加iframe入口標簽&#xff1a; <ifram…

django與數據庫交互關于當前時間的坑

背景 在線上服務中使用時間進行數據庫操作時發現異常&#xff0c;而在本地環境無法成功復現此問題&#xff0c;導致難以進行故障排查。 核心問題 view.py class XxxViewSet(viewsets.ModelViewSet):queryset Xxx.objects.with_status().order_by("status", &quo…

【數據結構】插入排序,希爾排序,選擇排序,堆排序,冒泡排序

1.插入排序 思路&#xff1a;插入排序將一個數插入一個有序的數組里面&#xff0c;將這個數和數組元素挨著比較&#xff0c;直到他插入到合適的位置。 動畫演示&#xff1a; 步驟&#xff1a;1.定義一個變量tmp保存要插入的數據 2.在循環中用tmp和有序數組中的元素比較&#…

談一談Linux下的進程和線程

文章目錄 進程線程進程與線程比較 進程 什么是進程&#xff1f; 概念上來說&#xff0c;進程是擔當OS資源分配的實體。通俗來說&#xff0c;進程是我們OS上一個在運行的程序。 我們的OS上不止有一個進程&#xff0c;當我們的某一個進程像是去磁盤上讀文件時&#xff0c;由于磁…

學習pytorch18 pytorch完整的模型訓練流程

pytorch完整的模型訓練流程 1. 流程1. 整理訓練數據 使用CIFAR10數據集2. 搭建網絡結構3. 構建損失函數4. 使用優化器5. 訓練模型6. 測試數據 計算模型預測正確率7. 保存模型 2. 代碼1. model.py2. train.py 3. 結果tensorboard結果以下圖片 顏色較淺的線是真實計算的值&#x…

國產化軟件突圍!懌星科技eStation產品榮獲2023鈴軒獎“前瞻優秀獎”

11月11日&#xff0c;2023中國汽車供應鏈峰會暨第八屆鈴軒獎頒獎典禮在江蘇省昆山市舉行。懌星科技憑借eStation產品&#xff0c;榮獲2023鈴軒獎“前瞻智能座艙類優秀獎”&#xff0c;懌星CEO潘凱受邀出席鈴軒獎晚會并代表領獎。 2023鈴軒獎“前瞻智能座艙類優秀獎” 鈴軒獎&a…

el-table 跨頁多選

步驟一 在<el-table>中:row-key"getRowKeys"和selection-change"handleSelectionChange" 在<el-table-column>中type"selection"那列&#xff0c;添加:reserve-selection"true" <el-table:data"tableData"r…

隊列排序:給定序列a,每次操作將a[1]移動到 從右往左第一個嚴格小于a[1]的元素的下一個位置,求能否使序列有序,若可以,求最少操作次數

題目 思路&#xff1a; 賽時代碼&#xff08;先求右起最長有序區間長度&#xff0c;再求左邊最小值是否小于等于右邊有序區間左端點的數&#xff09; #include<bits/stdc.h> using namespace std; #define int long long const int maxn 1e6 5; int a[maxn]; int n; …

阿里云磁盤在線擴容

我們從阿里云的控制面板中給硬盤擴容后結果發現我們的磁盤空間并沒有改變 注意&#xff1a;本次操作是針對CentOS 7的 &#xfeff;#使用df -h并沒有發現我們的磁盤空間增加 #使用fdisk -l發現確實還有部分空間 運行df -h命令查看云盤分區大小。 以下示例返回分區&#xf…

python3安裝redis

#!/usr/bin/python3import os import platform import argparse import shutil# 自定義變量 default_system "ubuntu" default_redis_version "6.2.6" default_install_path "/usr/local/redis" default_local_package_dir os.path.dirname(…

eve-ng鏡像模擬設備-信息安全管理與評估-2023國賽

eve-ng鏡像模擬設備-信息安全管理與評估-2023國賽 author&#xff1a;leadlife data&#xff1a;2023/12/4 mains&#xff1a;EVE-ng 模擬器 - 信息安全管理與評估模擬環境部署 references&#xff1a; EVE-ng 官網&#xff1a;https://www.eve-ng.net/EVE-ng 中文網&#xff1…

嵌入版python作為便攜計算器(安裝及配置ipython)

今天用別的電腦調試C&#xff0c;需要計算反三角函數時發現沒有趁手工具&#xff0c;忽然想用python作為便攜計算器放在U盤&#xff0c;遂想到嵌入版python 懶得自己配可以直接下載&#xff0c;使用方法見第4節 1&#xff0c;下載embeddable python&#xff08;嵌入版python&…

React中傳入props.children后, 為什么會導致組件的重新渲染?

傳入props.children后, 為什么會導致組件的重新渲染&#xff1f; 問題描述 在 react 中, 我想要對組件的渲染進行優化, 遇到了一個非常意思的問題, 當我向一個組件中傳入了 props.children 之后, 每次父組件重新渲染都會導致這個組件的重新渲染; 它看起來的表現就像是被memo包…

【1day】?萬戶協同辦公平臺 convertFile 任意文件讀取漏洞學習

注:該文章來自作者日常學習筆記,請勿利用文章內的相關技術從事非法測試,如因此產生的一切不良后果與作者無關。 目錄 一、漏洞描述 二、影響版本 三、資產測繪 四、漏洞復現

圖的鄰接鏈表儲存

噴了一節課 。。。。。。。、。 #include<stdio.h> #include<stdlib.h> #define MAXNUM 20 //每一個頂點的節點結構&#xff08;單鏈表&#xff09; typedef struct ANode{ int adjvex;//頂點指向的位置 struct ArcNode *next;//指向下一個頂點 …

C++ 內存分區模型

目錄 程序運行前 代碼區 全局區 程序運行后 new 在堆區開辟數據 delete釋放堆區數據 堆區開辟數組 內存分區模型 棧&#xff08;Stack&#xff09; 堆&#xff08;Heap&#xff09; 全局/靜態存儲區&#xff08;Global/Static Storage&#xff09; 常量存儲區&am…

力扣230. 二叉搜索樹中第K小的元素

深度優先搜索 思路&#xff1a; 二叉搜索樹的特性&#xff0c;通過中序遍歷得到有序序列&#xff0c;則遍歷到第K個節點的時候即為結果&#xff1b;使用棧通過深度優先遍歷進行中序遍歷&#xff1a; 先將節點和左子節點壓棧&#xff1b;然后棧頂上就是“最左”葉子節點&#x…