人工智能,丹青圣手,全平臺(tái)(原生/Docker)構(gòu)建Stable-Diffusion-Webui的AI繪畫(huà)庫(kù)教程(Python3.10/Pytorch1.13.0)

世間無(wú)限丹青手,遇上AI畫(huà)不成。最近一段時(shí)間缸逃,可能所有人類(lèi)畫(huà)師都得發(fā)出一句“既生瑜,何生亮”的感嘆厂抽,因?yàn)锳I 繪畫(huà)通用算法Stable Diffusion已然超神需频,無(wú)需美術(shù)基礎(chǔ),也不用經(jīng)年累月的刻苦練習(xí)筷凤,只需要一臺(tái)電腦昭殉,人人都可以是丹青圣手。

本次我們?nèi)脚_(tái)構(gòu)建基于Stable-Diffusion算法的Webui可視化圖形界面服務(wù),基于本地模型來(lái)進(jìn)行AI繪畫(huà)操作挪丢。

本地安裝Stable-Diffusion-Webui

如果系統(tǒng)之前安裝過(guò)Python3.10或者使用過(guò)Pytorch深度學(xué)習(xí)框架莽鸭,那么推薦直接本地安裝Stable-Diffusion-Webui,因?yàn)镾table-Diffusion的核心依賴(lài)庫(kù)也是Pytorch吃靠。

首先拉取官方的項(xiàng)目:

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

隨后進(jìn)入項(xiàng)目的目錄:

cd stable-diffusion-webui

官方文檔建議直接在目錄中運(yùn)行shell腳本:

./webui.sh

但事實(shí)上硫眨,shell腳本很容易在過(guò)程中報(bào)錯(cuò),該項(xiàng)目的核心代碼其實(shí)是launch.py巢块,所以理論上礁阁,我們只需要正常運(yùn)行l(wèi)aunch.py文件即可。

首先確保本機(jī)的Python版本號(hào)大于等于3.10.9

關(guān)于Python3.10的安裝族奢,請(qǐng)移玉步至:一網(wǎng)成擒全端涵蓋姥闭,在不同架構(gòu)(Intel x86/Apple m1 silicon)不同開(kāi)發(fā)平臺(tái)(Win10/Win11/Mac/Ubuntu)上安裝配置Python3.10開(kāi)發(fā)環(huán)境 ,這里不再贅述越走。

另外確保Pytorch的版本號(hào)大于等于13.1.0棚品,關(guān)于Pytorch,請(qǐng)移步:聞其聲而知雅意,M1 Mac基于PyTorch(mps/cpu/cuda)的人工智能AI本地語(yǔ)音識(shí)別庫(kù)Whisper(Python3.10)

隨后安裝相關(guān)的依賴(lài)庫(kù):

pip3 install -r requirements.txt  
pip3 install -r requirements_versions.txt

依賴(lài)文件中廊敌,有一個(gè)庫(kù)可能會(huì)出問(wèn)題铜跑,就是GFPGAN,它是騰訊開(kāi)源的人臉識(shí)別模塊骡澈,這里推薦使用GFPGAN官方網(wǎng)站(https://github.com/TencentARC/GFPGAN)的安裝方式:

# Install basicsr - https://github.com/xinntao/BasicSR  
# We use BasicSR for both training and inference  
pip install basicsr  
  
# Install facexlib - https://github.com/xinntao/facexlib  
# We use face detection and face restoration helper in the facexlib package  
pip install facexlib  
  
pip install -r requirements.txt  
python setup.py develop  
  
# If you want to enhance the background (non-face) regions with Real-ESRGAN,  
# you also need to install the realesrgan package  
pip install realesrgan

安裝成功后锅纺,最好驗(yàn)證一下:

?  ~ python3  
Python 3.10.9 (main, Dec 15 2022, 17:11:09) [Clang 14.0.0 (clang-1400.0.29.202)] on darwin  
Type "help", "copyright", "credits" or "license" for more information.  
>>> import gfpgan  
>>>

所有依賴(lài)安裝成功后,就可以直接運(yùn)行l(wèi)aunch.py文件即可:

python3 launch.py

程序返回:

Python 3.10.9 (main, Dec 15 2022, 17:11:09) [Clang 14.0.0 (clang-1400.0.29.202)]  
Commit hash: 0cc0ee1bcb4c24a8c9715f66cede06601bfc00c8  
Installing requirements for Web UI  
Launching Web UI with arguments: --upcast-sampling --use-cpu interrogate  
Warning: caught exception 'Torch not compiled with CUDA enabled', memory monitor disabled  
No module 'xformers'. Proceeding without it.  
==============================================================================  
You are running torch 1.13.0.  
The program is tested to work with torch 1.13.1.  
To reinstall the desired version, run with commandline flag --reinstall-torch.  
Beware that this will cause a lot of large files to be downloaded, as well as  
there are reports of issues with training tab on the latest version.  
  
Use --skip-version-check commandline argument to disable this check.  
==============================================================================  
Loading weights [6ce0161689] from /Users/liuyue/wodfan/work/stable-diffusion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors  
Creating model from config: /Users/liuyue/wodfan/work/stable-diffusion-webui/configs/v1-inference.yaml  
LatentDiffusion: Running in eps-prediction mode  
DiffusionWrapper has 859.52 M params.  
Applying cross attention optimization (InvokeAI).  
Textual inversion embeddings loaded(0):   
Model loaded in 8.2s (create model: 0.6s, apply weights to model: 5.0s, apply half(): 1.9s, move model to device: 0.5s).  
Running on local URL:  http://127.0.0.1:7860

Stable-Diffusion-Webui服務(wù)會(huì)運(yùn)行在系統(tǒng)的7860端口上肋殴。

需要注意的是囤锉,如果本地系統(tǒng)不支持cuda模式,需要修改運(yùn)行命令:

python3 launch.py --skip-torch-cuda-test --upcast-sampling --use-cpu interrogate

這里使用CPU來(lái)進(jìn)行模型訓(xùn)練护锤。

另外如果是M系列的Mac官地,其實(shí)是支持MPS模式的,但Stable Diffusion目前的最新版并不支持MPS烙懦,所以需要單獨(dú)設(shè)置環(huán)境變量驱入,關(guān)閉MPS模式:

export PYTORCH_ENABLE_MPS_FALLBACK=1

最后訪(fǎng)問(wèn)http://127.0.0.1:7860即可,本地構(gòu)建Stable-Diffusion-Webui服務(wù)就完成了修陡。

Docker構(gòu)建Stable-Diffusion-Webui

如果不想太折騰沧侥,也可以使用Docker容器來(lái)構(gòu)建Stable-Diffusion-Webui,同樣地魄鸦,需要拉取線(xiàn)上的Docker配置文件項(xiàng)目:

git clone https://github.com/AbdBarho/stable-diffusion-webui-docker.git

隨后進(jìn)入項(xiàng)目的目錄:

stable-diffusion-webui-docker

接著運(yùn)行命令下載相關(guān)的依賴(lài)鏡像:

docker compose --profile download up --build

下載完成后宴杀,運(yùn)行命令構(gòu)建容器:

docker compose --profile auto up --build

這里需要注意的是,模型數(shù)據(jù)和輸出文件夾會(huì)以/data和/output的形式掛載到容器中拾因,如果想在宿主機(jī)往容器內(nèi)傳入模型或者其他圖片旺罢,需要寫(xiě)入項(xiàng)目中的data目錄旷余。

過(guò)程中,可能會(huì)報(bào)錯(cuò):

Found no NVIDIA driver on your system

這是因?yàn)槿萜鲀?nèi)找不到NVIDIA的顯卡驅(qū)動(dòng)扁达。

這里需要單獨(dú)再啟動(dòng)一個(gè)容器服務(wù):

docker run -ti --runtime=nvidia -e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all allennlp/allennlp

總的來(lái)說(shuō)正卧,安裝過(guò)程簡(jiǎn)單,但是調(diào)試比較費(fèi)勁跪解,一旦啟動(dòng)出問(wèn)題炉旷,就得進(jìn)入容器內(nèi)部修改代碼,或者反復(fù)修改Dockerfile文件叉讥,所以Docker比較適合封裝業(yè)務(wù)改動(dòng)頻繁的容器窘行,而不是依賴(lài)環(huán)境繁多并且版本需要反復(fù)調(diào)整的場(chǎng)景。

Stable-Diffusion-Webui圖像繪制

配置好Stable-Diffusion-Webui環(huán)境之后图仓,訪(fǎng)問(wèn)http://127.0.0.1:7860:

[圖片上傳失敗...(image-e08742-1677802804064)]

在Prompt文本框中填入引導(dǎo)詞:

Tall buildings, people bustling, heavy traffic, staggered light and shadow, the beauty of the city is conspicuous before.

隨后點(diǎn)擊右側(cè)Generate生成按鈕即可罐盔,這里引導(dǎo)詞的意思是:高樓林立,人群熙熙攘攘救崔,車(chē)水馬龍惶看,光影交錯(cuò),城市之美盡顯眼前六孵。

注意引導(dǎo)詞需要使用逗號(hào)分隔纬黎。

后端開(kāi)始進(jìn)行訓(xùn)練:

To create a public link, set `share=True` in `launch()`.  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:24<00:00,  1.25s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.00it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:34<00:00,  1.72s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.11s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.10s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.00s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.10s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.13s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.12s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.07s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.09s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.03it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.01s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.03it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.01s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:19<00:00,  1.02it/s]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:22<00:00,  1.15s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.07s/it]  
100%|██████████████████████████████████████████████████████████████████████████████████████████████| 20/20 [00:21<00:00,  1.06s/it]  
Total progress: 100%|██████████████████████████████████████████████████████████████████████████████| 20/20 [00:20<00:00,  1.00s/it]

片刻之間,揮毫落紙如云煙狸臣。

遺憾的是莹桅,引導(dǎo)詞不支持中文昌执,但可以配置權(quán)重烛亦,數(shù)值從0.1~100,默認(rèn)狀態(tài)是1,低于1就是減弱懂拾,大于1就是加強(qiáng):



(Tall buildings:1.1), people bustling(1.61),(heavy traffic:0.3),(staggered light and shadow:1.3)


Stable-Diffusion-Webui也支持Negative prompt(反向引導(dǎo)詞)煤禽。

就是用文字描述你不想在圖像中出現(xiàn)的東西:

對(duì)圖片進(jìn)行去噪處理,使其看起來(lái)更像你的提示詞岖赋;同樣使其看起來(lái)更像你的反向提示詞檬果。

同時(shí)觀(guān)察正方向兩者之間的差異,并利用它來(lái)產(chǎn)生一組對(duì)噪聲圖片的改變唐断,將最終結(jié)果移向前者而遠(yuǎn)離后者选脊。

默認(rèn)通用反向引導(dǎo)詞:

lowres,bad anatomy,bad hands,text,error,missing fingers,  
extra digit,fewer digits,cropped,worst quality,  
low quality,normal quality,jpeg artifacts,signature,  
watermark,username,blurry,missing arms,long neck,  
Humpbacked,missing limb,too many fingers,  
mutated,poorly drawn,out of frame,bad hands,  
owres,unclear eyes,poorly drawn,cloned face,bad face

除了引導(dǎo)詞,還可以調(diào)整采樣迭代步數(shù) (Sampling Steps)脸甘。

系統(tǒng)先隨機(jī)生成一個(gè)基礎(chǔ)的圖片恳啥,然后一步步的調(diào)整圖片,向引導(dǎo)詞 Prompt 靠攏

Sampling Steps參數(shù)就是告訴人工智能丹诀,這樣的步驟應(yīng)該進(jìn)行多少次。

次數(shù)越多缸夹,每一步訓(xùn)練也就越小越精確绵跷。當(dāng)然了,成本也會(huì)越高沿猜,同時(shí)每一次訓(xùn)練的時(shí)間也會(huì)成同比增長(zhǎng)。

除了迭代步數(shù)碗脊,也可以自由地選擇采樣方法(Sampling method)

也就是讓Stable-Diffusion-Webui具體使用用什么算法來(lái)訓(xùn)練圖片模型啼肩。

默認(rèn)算法是Euler a :富有創(chuàng)造力,不同步數(shù)可以生產(chǎn)出不同的圖片衙伶。 但是超過(guò)30步左右基本就沒(méi)有實(shí)質(zhì)化的增益效果疟游。

Euler算法:最簡(jiǎn)單的算法,訓(xùn)練速度也是最快的痕支。

LMS算法:Euler的延伸算法颁虐,相對(duì)更穩(wěn)定一點(diǎn),30步就比較穩(wěn)定了

PLMS:優(yōu)化過(guò)的LMS算法

其他的一些參數(shù):

生成批次Batch count/n_iter:同樣的配置卧须,循環(huán)跑幾次

每批數(shù)量 Batch size:同時(shí)生成多少個(gè)圖像另绩,增加這個(gè)值可以并行運(yùn)行,但也需要更多的顯卡顯存花嘶。

提示詞相關(guān)性 CFG Scale:圖像與引導(dǎo)詞匹配程度笋籽。增加這個(gè)值將導(dǎo)致圖像更接近引導(dǎo)詞,但過(guò)高會(huì)讓圖像色彩過(guò)于飽和椭员。一般在5~15之間為好车海,7,9隘击,12是3個(gè)常見(jiàn)的設(shè)置值侍芝。

寬度 X 高度 Width X Height:?jiǎn)挝皇窍袼兀m當(dāng)增加尺寸埋同,后臺(tái)會(huì)試圖填充更多的細(xì)節(jié)進(jìn)來(lái)州叠。

Stable-Diffusion-Webui定制化模型

Stable-Diffusion-Webui默認(rèn)下載的基礎(chǔ)模型在項(xiàng)目目錄的models/Stable-diffusion文件夾中:

/stable-diffusion-webui/models/Stable-diffusion

模型名稱(chēng)是v1-5-pruned-emaonly.safetensors咧栗,體積是4.27GB虱肄。

如果需要一些比較有個(gè)性定制化模型致板,可以在civitai.com平臺(tái)進(jìn)行挑選和下載,需要注意的是咏窿,該平臺(tái)上的模型魚(yú)龍混雜,良莠不齊翰灾,不能說(shuō)是蔚為大觀(guān)稚茅,但多多少少有點(diǎn)泥沙俱下的意思亚享,所以最好不要在比較正式的公共(工作)環(huán)境打開(kāi)該平臺(tái),否則結(jié)果可能會(huì)令人非常尷尬绘面。

這里我們選擇相對(duì)比較潮流的賽博朋克風(fēng)格模型:synthwavepunk

將下載的模型放入models/Stable-diffusion目錄欺税。

隨后重啟Stable-Diffusion-Webui服務(wù):

python3 launch.py --skip-torch-cuda-test --upcast-sampling --use-cpu interrogate

在頁(yè)面表單中的Stable Diffusion checkpoint選項(xiàng)里選擇對(duì)應(yīng)的模型:

[圖片上傳失敗...(image-e8d44c-1677802804064)]

引導(dǎo)詞:

concept art, 4k, intricate, pinup, a woman, beautiful face, embroidery, lace, hyper-realistic, highly detailed, octane render, concept art, smooth, 8k, dancing princess, snthwve style, nvinkpunk, by jeremy mann, by sandra chevrier, by dave mckean and richard avedon and maciej kuciara

訓(xùn)練結(jié)果:

[圖片上傳失敗...(image-e57475-1677802804064)]

好了,現(xiàn)在揭璃,你已經(jīng)知曉那些網(wǎng)絡(luò)上的漂亮小姐姐是怎么生成的了晚凿。

結(jié)語(yǔ)

也許我們只是偶爾被網(wǎng)絡(luò)上那些酷炫而獵奇的AI生成圖所吸引,但如果你真的動(dòng)手去搭建瘦馍、調(diào)試歼秽、甚至開(kāi)始訓(xùn)練屬于自己的繪畫(huà)模型,相信我情组,你馬上就會(huì)深陷其中燥筷,不能自拔,AI仿若可以滿(mǎn)足你所有的幻想院崇,欲望滿(mǎn)溢肆氓,又欲言又止,分寸把握之精確底瓣,妙入毫顛谢揪。什么?你還在玩那些無(wú)聊的電子游戲捐凭?相信我拨扶,Stable-Diffusion-Webui才是最高級(jí)的精神享受,沒(méi)有之一柑营,也不可替代屈雄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市官套,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蚁孔,老刑警劉巖奶赔,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異杠氢,居然都是意外死亡站刑,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)鼻百,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)绞旅,“玉大人摆尝,你說(shuō)我怎么就攤上這事∫虮” “怎么了堕汞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)晃琳。 經(jīng)常有香客問(wèn)我讯检,道長(zhǎng),這世上最難降的妖魔是什么卫旱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任人灼,我火速辦了婚禮,結(jié)果婚禮上顾翼,老公的妹妹穿的比我還像新娘投放。我一直安慰自己,他們只是感情好适贸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布跪呈。 她就那樣靜靜地躺著,像睡著了一般取逾。 火紅的嫁衣襯著肌膚如雪耗绿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天砾隅,我揣著相機(jī)與錄音误阻,去河邊找鬼。 笑死晴埂,一個(gè)胖子當(dāng)著我的面吹牛究反,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播儒洛,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼精耐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了琅锻?” 一聲冷哼從身側(cè)響起卦停,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎恼蓬,沒(méi)想到半個(gè)月后惊完,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡处硬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年小槐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荷辕。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凿跳,死狀恐怖件豌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情控嗜,我是刑警寧澤茧彤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站躬审,受9級(jí)特大地震影響棘街,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜承边,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一遭殉、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧博助,春花似錦险污、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至窖式,卻和暖如春蚁飒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背萝喘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工淮逻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人阁簸。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓爬早,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親启妹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子筛严,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容