AI繪畫Stable Diffusion LoRA模型訓(xùn)練教程
Stable Diffusion LoRA模型訓(xùn)練教程
0.?LoRA微調(diào)模型是什么?
LoRA的全稱是Low--Rank?Adaptation?of?Large?Language?Models,有專門的論文和開源項(xiàng)目。它主要解決"大模型"太大,一般人玩不轉(zhuǎn)的問題。
比如GPT--3?175B的參數(shù),有幾個(gè)人跑得起來呢?Stable?Diffusion?V1版模型用了150000?個(gè)?A100?GPU?Hour,也不是個(gè)人玩得起的。
把LoRA應(yīng)用到AI繪畫之后,我們就可以用普通的消費(fèi)級(jí)顯卡來微調(diào)官方的模型了。
微調(diào)的意思,就是原先模型的基礎(chǔ)上"夾帶私貨"。最常見的就是,讓模型學(xué)習(xí)指定的風(fēng)格或者人物。風(fēng)格這種可能還是有點(diǎn)抽象,而人物這個(gè)就比較直觀了。比如默認(rèn)情況下,AI繪畫軟件無法畫出指定的人物,而通過Lora模型就可以做到這一點(diǎn)。
這樣一來,你就可以把自己或者你的寵物或者你的女神投射到AI繪畫的模型中,然后通過描述詞,讓這個(gè)人物"千變?nèi)f化"。
關(guān)于LoRA大概就說這些,更多專業(yè)的內(nèi)容,可以看文末。
下面就開始介紹Lora的具體的訓(xùn)練方法了。開始之前簡(jiǎn)單說一下我的環(huán)境:
操作系統(tǒng)是Windows11
顯卡是?RTX?3060?12G
開源軟件?Stable--Diffusion--WebUI
Lora的訓(xùn)練流程,我盡量做到簡(jiǎn)單又清晰,聊太多概念和用太多工具很容易把人繞暈。
1.軟件安裝
訓(xùn)練Lora的方法不止一種,我這里選擇的是一個(gè)叫kohya_ss的項(xiàng)目。這個(gè)項(xiàng)目比較獨(dú)立,整個(gè)設(shè)計(jì)邏輯比較清晰,可以用可視化的方式配置參數(shù),也提供了一些輔助工具,官方提供了詳細(xì)的視頻教程(英文)。
下面就來說一下如何安裝。
安裝基礎(chǔ)軟件:
安裝?Python?3.10?記得添加到環(huán)境變量。
安裝?Git
安裝VS環(huán)境?Visual?Studio?xxx?redistributable
因?yàn)檫@是基于Python的開源項(xiàng)目,所以Python和git是必備軟件。我的公眾號(hào)里有單獨(dú)介紹這些軟件安裝配置的文章,可以翻一翻。
Visual?Studio?XXX??redistributable?是一款簡(jiǎn)易實(shí)用,功能全面的全新系統(tǒng)運(yùn)行庫(kù)。它是Windows系統(tǒng)裝機(jī)必備組件,包含:C?Runtime?(CRT),Standard?C++,MFC,C++?AMP,OpenMP等,提供了強(qiáng)大而靈活的開發(fā)環(huán)境支持,讓電腦內(nèi)沒有任何無用垃圾程序,同時(shí)它還能夠解決各種軟件運(yùn)行不了的問題。(摘抄自網(wǎng)絡(luò))。
基礎(chǔ)環(huán)境安裝完成之后就可以開始安裝和配置kohya_ss了。
克隆項(xiàng)目然后運(yùn)行安裝腳本
ounter(line
ounter(line
git clone https://github.com/bmaltais/kohya_ss.git
腳本會(huì)自動(dòng)安裝依賴,安裝完成后會(huì)有一些配置選項(xiàng),不確定就不要啟動(dòng)。啟動(dòng)了后面會(huì)出現(xiàn)很多問題,導(dǎo)致整個(gè)流程卡住了。因?yàn)檫@里用到了git和github,所以需要你本地環(huán)境能訪問國(guó)際互聯(lián)網(wǎng)?;蛘咦庖粋€(gè)通外網(wǎng)的GPU服務(wù)器。
安裝CUDNN?8.6?(可選)
安裝CUDNN的目的是提升運(yùn)算速度。
先通過下面的地址下載Cudnn文件。
ounter(line
https://b1.thefileditch.ch/mwxKTEtelILoIbMbruuM.zip
然后放到kohya_ss項(xiàng)目的根目錄下,然后運(yùn)行下面的腳本。
ounter(line
.\venv\Scripts\activate
啟動(dòng)軟件
配置完成之后,就可以啟動(dòng)軟件了,輸入命令:
ounter(line
gui.bat --listen 127.0.0.1 --server_port 7860 --inbrowser --share
或者到文件夾里找到gui.bat?雙擊啟動(dòng)。
把URL復(fù)制到瀏覽器,就可以看到界面了。
2.素材準(zhǔn)備和預(yù)處理
所有的模型訓(xùn)練都遵循一個(gè)最基本的道理:好進(jìn)好出。喂得素材好,訓(xùn)練的模型自然好。喂的是垃圾,出來的必然也是垃圾。所以第一步,就是把素材整好了。
素材處理呢,其實(shí)也分三個(gè)小步驟。
a.找素材
b.切素材
c.生成對(duì)應(yīng)的關(guān)鍵詞
素材可以通過不同渠道獲取,比如最簡(jiǎn)單粗暴的方式就是直接在百度圖片里面搜索。然后選擇高清,或者大尺寸,特大尺寸。點(diǎn)進(jìn)去之后看看有沒有套圖。
也可以直接去一些壁紙網(wǎng)站或者專門曬圖的網(wǎng)站。比如糖堆,花瓣,Pinterest,?Instagram...
圖片的最基本要求是,清晰,清晰,清晰。其次,不要太單一。
圖片比例,并沒有強(qiáng)制要求。建議用1:1或者其他固定的比例去切。
圖片數(shù)量方面,一般來說是準(zhǔn)備個(gè)幾十張的樣子。太多了整理起來就比較費(fèi)時(shí)間,訓(xùn)練時(shí)長(zhǎng)也會(huì)邊長(zhǎng)長(zhǎng),訓(xùn)練不充分可能就沒那么像。太少就會(huì)過擬合,不容易產(chǎn)生變化,描述詞一改可能就不像了。
從經(jīng)驗(yàn)來看,聚焦半身或者頭部更容易訓(xùn)練,更容易出穩(wěn)定的效果,除了主體之外,背景盡量簡(jiǎn)單,減少干擾。
同一個(gè)明星的照片其實(shí)也是千差萬別,有時(shí)候甚至P的都不像了一個(gè)人了,最好是能找到樣貌比較穩(wěn)定連續(xù)的素材。
找到素材之后,你可以用專業(yè)的工具進(jìn)行裁剪。也可以直接用QQ的截圖功能。
比如用Birme來處理:
我這里就遵循能簡(jiǎn)單就簡(jiǎn)單的原則,直接用QQ截圖,也沒有嚴(yán)格1:1?。就是切了個(gè)大概,把主體切出來。
圖片預(yù)處理完成之后,需要?jiǎng)?chuàng)建一個(gè)專門的訓(xùn)練文件夾。我是在kohya_ss的根目錄創(chuàng)建一個(gè)名叫train的文件,然后在這個(gè)文件下面又創(chuàng)建一個(gè)叫Dilireba的文件夾。
里面又分別創(chuàng)建了如下的文件夾:
image?:?圖片放在這里。
log:訓(xùn)練記錄
model:模型保存路徑
dilireba.json:配置文件。
image文件夾里面不是直接放圖片,而是還有一個(gè)子文件夾,名稱大概是這樣100_dilireba。所有圖片這放在這個(gè)子文件里面。這里的100不是隨便寫的,會(huì)直接影響訓(xùn)練的步數(shù)和效果。
創(chuàng)建好文件,將處理好的圖片放在100_dilireba里面,然后就要做關(guān)鍵詞生成了。
在網(wǎng)頁(yè)上找到Utilities-->Captioning-->BLIP?Captioning。
這里只要設(shè)置兩個(gè)選項(xiàng)。
Image?folder?to?caption?:?圖片文件夾所在路徑。
Prefix?to?add?to?BLIP?caption?:?生成提示詞的前綴,訓(xùn)練完成之后可以用在提示詞中,喚醒或者加強(qiáng)人物特征。
設(shè)置完成之后點(diǎn)擊"Caption?images"?開始處理。第一次處理應(yīng)該是需要在線下載一些模型,稍微等待一下。點(diǎn)擊按鈕之后,界面上沒有任何提示,但是在命令行窗口中會(huì)有具體的顯示。
處理完成之后,在圖片文件里面,會(huì)多出同名的txt文件。
打開文件之后,可以看到類似的文字描述"dilireba?a?woman?in?a?black?dress?with?a?red?lipstick"。作為簡(jiǎn)單的練手,我們不需要修改任何東西。如果你要提升效果,可以手動(dòng)加入更加詳細(xì),更加精準(zhǔn)的描述。
3.模型參數(shù)設(shè)置和訓(xùn)練
經(jīng)過上面的處理,素材已經(jīng)搞定了。接下來就是設(shè)置訓(xùn)練參數(shù)。如果你已經(jīng)有參數(shù)配置文件,可以直接通過點(diǎn)擊Open按鈕來導(dǎo)入。
參數(shù)設(shè)置主要分成了3部分。
第一部分是:預(yù)訓(xùn)練模型設(shè)置。
Lora的訓(xùn)練需要基于標(biāo)準(zhǔn)的SDW模型(Checkpoint),點(diǎn)擊Source?model選項(xiàng)卡之后就可以進(jìn)行設(shè)置。
先將④處的模型快速選擇(Model?Quick?Pick)設(shè)置成自定義(Custom),這里也可以用預(yù)設(shè)的V1.5,V2.1。但是使用這些預(yù)設(shè)模型,會(huì)需要很長(zhǎng)的時(shí)間在線下載,而且會(huì)占據(jù)巨大的C盤空間,不是很推薦。
然后在左邊③這里選擇具體的本地模型,我這里用的是適合亞洲人的chilloutmix模型。通過點(diǎn)擊輸入框后面的文件圖標(biāo),找到具體的模型文件就可以了。
然后右邊⑤處的模型保存格式選擇safetensors。
第二部分是:文件夾設(shè)置。
在素材處理的步驟中,我們已經(jīng)創(chuàng)建好了具體的文件。這里只需要通過右邊的文件夾小圖標(biāo),選中具體的文件夾就好了。
①Image?folder?選擇?image?文件夾
②Output?folder?選擇?model?文件夾
③Logging?folder?選擇?log?文件夾
④Model?output?name?,輸入一個(gè)便于記憶的英文名字,這個(gè)名字就是最終生成的模型的名字。我習(xí)慣用主體+版本+迭代次數(shù)來命名。
第三部分是:訓(xùn)練參數(shù)設(shè)置。
這里的參數(shù)非常多,一般對(duì)于這種情況,我們都遵循一個(gè)基本原則:"對(duì)于新手來說,默認(rèn)設(shè)置就是最佳設(shè)置"。
你可以完全不做任何設(shè)置,就開始訓(xùn)練了。
我的部分參數(shù)設(shè)置如上圖。
網(wǎng)上普遍的教程都是把批量大?。═rain?batch?size)改成了2?。
設(shè)置一個(gè)種子(Seed)比如1234。
學(xué)習(xí)率(Learning?rate)0.0001
Text?Encoder學(xué)習(xí)率?5e--5
Unet學(xué)習(xí)率?0.0001
Network?:?128和128
模型像素:512x512
參數(shù)設(shè)置完成之,點(diǎn)擊底部的訓(xùn)練按鈕①就可以開始訓(xùn)練了。
點(diǎn)擊訓(xùn)練按鈕之后,界面上沒有任何變化,來到命令行窗口會(huì)看到一長(zhǎng)串命令。
這個(gè)界面會(huì)卡一段時(shí)間,然后跳出很多英文,最后停留在下面的界面。
這里會(huì)顯示最終需要訓(xùn)練的步數(shù)(Step)。Step的值等于圖片數(shù)量乘以文件中設(shè)置的數(shù)字,然后除以2?。訓(xùn)練的長(zhǎng)短主要卻決于單步的時(shí)間和總的步數(shù)。
關(guān)于多少步才比較好的問題,官方教程演示的時(shí)候是用了800。但是這個(gè)這個(gè)數(shù)值僅供參考。不同的數(shù)據(jù)會(huì)有不同,比如我后來整理一個(gè)圖片比較多的數(shù)據(jù)集,跑了幾萬步,好像也還有提升的空間。
具體的訓(xùn)練情況,可以通過log來查看。點(diǎn)擊上面②處的Start?TensorBoard?可以啟動(dòng)一個(gè)服務(wù)。
打開后可以看到具體的Loss變化情況。簡(jiǎn)單的來說loss慢慢降低就是對(duì)的。如果Loss基本沒啥變化,訓(xùn)練下去也沒太大意義了。
4.模型應(yīng)用
搞了那么久終于可以用了。
lora模型的使用,我們之前的文章里面已經(jīng)有詳細(xì)的介紹了,這里就簡(jiǎn)單的演示一下。當(dāng)lora訓(xùn)練結(jié)束之后,會(huì)在對(duì)應(yīng)的model文件下面生成模型文件。
比如下圖:
將圖中的Lora模型文件拷貝到Stable--Diffusion--WebUI的對(duì)應(yīng)路路徑下。
然后啟動(dòng)AI繪畫軟件webui?。
然后選擇好模型,輸入關(guān)鍵詞,選擇對(duì)應(yīng)的lora,然后點(diǎn)擊生成即可。
剛開始不要加任何復(fù)雜的關(guān)鍵詞,只用最基礎(chǔ)的,比如?"a?woman?dilireba"?然后加上我們自己訓(xùn)練lora。關(guān)于Lora字符串,你可以直接輸入,也可以通過圖中圓圈處找到對(duì)應(yīng)的Lora點(diǎn)擊一下導(dǎo)入。導(dǎo)入的時(shí)候最右側(cè)的參數(shù)默認(rèn)為1,需要修改一下,改成0.7或者0.8。
如果Lora練的還可以,這個(gè)時(shí)候出來的圖片應(yīng)該是相識(shí)度比較高的。然后就可以在這個(gè)基礎(chǔ)詞語上做一些變化了,比如加一個(gè)"wearing?a?suit"?(穿著西裝)就可以得到下面的圖片了。
如果出圖俯角符合預(yù)期,這個(gè)Lora訓(xùn)練也就算是成功了。如果不滿意,就要回過頭去調(diào)整素材和參數(shù)了。目前的AI繪畫,并不是每次出圖都完美的,需要多少刷幾次,多試幾個(gè)關(guān)鍵詞才能找到比較滿意的效果。
到這里L(fēng)ora部分的內(nèi)容就全部寫完了,拖拖拉拉拖了好久了,終于了了一個(gè)事兒。基于Lora這種特性,可以自己玩,也可以做成在線產(chǎn)品。比如之前說過的"達(dá)芬奇"網(wǎng)站就是把這個(gè)過程給集成和簡(jiǎn)化了。
雖然我已經(jīng)盡量把過程都寫出來了,但是不同的基礎(chǔ)的人接受程度肯定不一樣。厲害的人覺得太簡(jiǎn)單,對(duì)這個(gè)不太熟悉的可能覺得有點(diǎn)復(fù)雜。
確實(shí),從零開始話,這里面還是有挺多東西的。
整個(gè)流程也還有無數(shù)的細(xì)節(jié)可以優(yōu)化:
比如?具體的安裝過程,異常排除。
比如?圖片篩選,裁剪,修復(fù)。
比如?關(guān)鍵詞生成的多種方式和優(yōu)化方法。
比如?模型訓(xùn)練參數(shù)的調(diào)整。
考慮到這些細(xì)致的問題專業(yè)性比較強(qiáng),研究需要時(shí)間,寫起來非常麻煩,寫了也不會(huì)有多少閱讀量,我就不在公開渠道發(fā)布了。我會(huì)慢慢更新在我的知識(shí)星球Tonyhub里面。今天用的素材,參數(shù)配置文件,最終Lora模型也會(huì)整理好發(fā)在里面。
熱愛研究的朋友,也完全可以自己去查資料研究,加入交流群交流。我把相關(guān)的連接全部放在下面了。
相關(guān)連接
LoRA訓(xùn)練的開源項(xiàng)目:
https://github.com/bmaltais/kohya_ss
圖片截?。?/p>
https://www.birme.net/
replicate關(guān)于Lora的介紹:
https://replicate.com/blog/lora--faster--fine--tuning--of--stable--diffusion
LoRA開源項(xiàng)目地址:
https://github.com/cloneofsimo/lora
LoRA論文地址:
https://arxiv.org/abs/2106.09685
AI繪圖在線體驗(yàn)
二次元繪圖
在線體驗(yàn)地址:http://acg.aiartwork.online/
模型包括:
NovelAI,NovelAI的模型訓(xùn)練使用了數(shù)千個(gè)網(wǎng)站的數(shù)十億張圖片,包括 Pixiv、Twitter、DeviantArt、Tumblr等網(wǎng)站的作品。
Waifu,waifu的模型可用于生成二次元的卡通形象,可以生成獨(dú)有的二次元?jiǎng)勇〗憬愫椭魅斯?/p>
Stable diffusion-v2,以英文為輸入的通用圖像生成模型