太久沒用基本都忘光了,發現記的筆記也沒有很好的梳理,雖然網上已經有了不少詳細的文件了,但自己梳理一遍記憶比較深刻。
本文轉載自我的部落格:https://blog.abyssdawn.com/archives/515.html
已同步公眾號
環境準備
$ python --version
Python 3.10.10
$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0
安裝 Stable Diffusion WebUI
nvidia顯示卡使用者輸入以下指令,下載Stable Diffusion WebUI的程式碼倉庫。
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
這裡我clone的版本為1.10.0,目前的時間是2025-01-15
執行webui-user.bat
此時會開始下載pytorch
,但是因為是官方的源很慢,可以先關閉終端
進入venv
虛擬環境,使用國內映象安裝
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 -f https://mirrors.aliyun.com/pytorch-wheels/cu118
再次執行webui-user.bat
安裝完畢
如果想要開啟api
功能,可以編輯web-user.bat
,在set COMMANDLINE_ARGS
的最後加上 -api
關於啟動命令的詳細說明:
引數指令 | 數值 | 預設值 | 說明 |
---|---|---|---|
設定值 | |||
-h, --help | None | False | 顯示此幫助訊息並退出。 |
--exit | 安裝後終止程式。 | ||
--data-dir | DATA_DIR | ./ | 使用者資料儲存的路徑。 |
--config | CONFIG | configs/stable-diffusion/v1-inference.yaml | 建構模型設定檔的路徑。 |
--ckpt | CKPT | model.ckpt | Stable Diffusion模型的存檔點模型路徑。一旦指定,該模型會加入至存檔點模型列表並載入。 |
--ckpt-dir | CKPT_DIR | None | 存放Stable Diffusion模型存檔點模型的路徑。 |
--no-download-sd-model | None | False | 即使找不到模型,也不自動下載SD1.5模型。 |
--vae-dir | VAE_PATH | None | VAE的路徑。 |
--gfpgan-dir | GFPGAN_DIR | GFPGAN/ | GFPGAN路徑 |
--gfpgan-model | GFPGAN_MODEL | GFPGAN模型檔名 | |
--codeformer-models-path | CODEFORMER_MODELS_PATH | models/Codeformer/ | Codeformer模型檔的路徑。 |
--gfpgan-models-path | GFPGAN_MODELS_PATH | models/GFPGAN | GFPGAN模型檔的路徑。 |
--esrgan-models-path | ESRGAN_MODELS_PATH | models/ESRGAN | ESRGAN模型檔的路徑。 |
--bsrgan-models-path | BSRGAN_MODELS_PATH | models/BSRGAN | BSRGAN模型檔的路徑。 |
--realesrgan-models-path | REALESRGAN_MODELS_PATH | models/RealESRGAN | RealESRGAN模型檔的路徑。 |
--scunet-models-path | SCUNET_MODELS_PATH | models/ScuNET | ScuNET模型檔的路徑。 |
--swinir-models-path | SWINIR_MODELS_PATH | models/SwinIR | SwinIR和SwinIR v2模型檔的路徑。 |
--ldsr-models-path | LDSR_MODELS_PATH | models/LDSR | 含有LDSR模型檔的路徑。 |
--lora-dir | LORA_DIR | models/Lora | 含有LoRA模型檔的路徑。 |
--clip-models-path | CLIP_MODELS_PATH | None | 含有CLIP模型檔的路徑。 |
--embeddings-dir | EMBEDDINGS_DIR | embeddings/ | Textual inversion的embeddings路徑 (預設: embeddings) |
--textual-inversion-templates-dir | TEXTUAL_INVERSION_TEMPLATES_DIR | textual_inversion_templates | Textual inversion範本的路徑 |
--hypernetwork-dir | HYPERNETWORK_DIR | models/hypernetworks/ | Hypernetwork路徑 |
--localizations-dir | LOCALIZATIONS_DIR | localizations/ | 在地化翻譯路徑 |
--styles-file | STYLES_FILE | styles.csv | 風格檔名 |
--ui-config-file | UI_CONFIG_FILE | ui-config.json | UI設定檔檔名 |
--no-progressbar-hiding | None | False | 取消隱藏Gradio UI的進度條 (我們之所以將其隱藏,是因為在瀏覽器啟動硬體加速的狀況下,進度條會降低機器學習的效能) |
--max-batch-count | MAX_BATCH_COUNT | 16 | UI的最大批次數值 |
--ui-settings-file | UI_SETTINGS_FILE | config.json | UI設定值畫面的檔名 |
--allow-code | None | False | 允許在WebUI執行自訂指令稿 |
--share | None | False | 使用此引數在啟動後會產生Gradio網址,使WebUI能從外部網路訪問 |
--listen | None | False | 以0.0.0.0主機名稱啟動Gradio,使其能回應連線請求 |
--port | PORT | 7860 | 以給定的通訊埠啟動Gradio。1024以下的通訊埠需要root許可權。如果可用的話,預設使用7860通訊埠。 |
--hide-ui-dir-config | None | False | 在WebUI隱藏設定檔目錄。 |
--freeze-settings | None | False | 停用編輯設定。 |
--enable-insecure-extension-access | None | False | 無視其他選項,強制啟用擴充功能頁籤。 |
--gradio-debug | None | False | 使用 --debug選項啟動Gradio |
--gradio-auth | GRADIO_AUTH | None | 設定Gardio授權,例如"username:password",或是逗號分隔值形式"u1:p1,u2:p2,u3:p3" |
--gradio-auth-path | GRADIO_AUTH_PATH | None | 設定Gardio授權檔案路徑。 例如 "/路徑/" 再加上--gradio-auth 的格式。 |
--disable-console-progressbars | None | False | 不在終端機顯示進度條。 |
--enable-console-prompts | None | False | 在使用文生圖和圖生圖的時候,於終端機印出提示詞 |
--api | None | False | 以API模式啟動WebUI |
--api-auth | API_AUTH | None | 設定API授權,例如"username:password",或是逗號分隔值形式"u1:p1,u2:p2,u3:p3" |
--api-log | None | False | 啟用所有API請求的紀錄檔 |
--nowebui | None | False | 僅啟動API, 不啟動WebUI |
--ui-debug-mode | None | False | 不載入模型,以更快啟動WebUI |
--device-id | DEVICE_ID | None | 選擇要使用的CUDA裝置 (例如在啟動指令稿使用export CUDA_VISIBLE_DEVICES=0或1) |
--administrator | None | False | 使用系統管理員許可權 |
--cors-allow-origins | CORS_ALLOW_ORIGINS | None | 允許跨來源資源共用,列表以逗號分隔,不可有空格 |
--cors-allow-origins-regex | CORS_ALLOW_ORIGINS_REGEX | None | 允許跨來源資源共用,後面加上單一正規表示式 |
--tls-keyfile | TLS_KEYFILE | None | 部份啟用TLS,,需要配合--tls-certfile才能正常運作 |
--tls-certfile | TLS_CERTFILE | None | 部份啟用TLS,需要配合--tls-keyfile才能正常運作 |
--server-name | SERVER_NAME | None | 設定伺服器主機名稱 |
--skip-version-check | None | False | 不檢查torch和xformers的版本 |
--no-hashing | None | False | 停用計算存檔點模型的sha256雜湊值,加快載入速度 |
--skip-version-check | None | False | 不檢查torch與xformers版本。 |
--skip-version-check | None | False | 不檢查Python版本。 |
--skip-torch-cuda-test | None | False | 不檢查CUDA是否正常運作。 |
--skip-install | None | False | 跳過安裝套件。 |
--loglevel | None | None | 日誌紀錄等級,有效值為CRITICAL, ERROR, WARNING, INFO, DEBUG |
--log-startup | None | False | 在啟動程式時輸出launch.py的詳細執行內容。 |
--api-server-stop | None | False | 允許透過API通訊停止/重啟/強制停止主程式。 |
--timeout-keep-alive | int | 30 | 設定uvicorn的timeout_keep_alive數值。 |
效能相關 | |||
--xformers | None | False | 給cross attention layers啟用xformers |
--reinstall-xformers | None | False | 強制重灌xformers,升級時很有用。但為避免不斷重灌,升級後將會移除。 |
--force-enable-xformers | None | False | 強制給cross attention layers啟用xformers 此選項無法運作的話請勿回報bug |
--xformers-flash-attention | None | False | 給xformers啟用Flash Attention,提升再現能力 (僅支援SD2.x或以此為基礎的模型) |
--opt-split-attention | None | False | 強制啟用Doggettx的cross-attention layer最佳化。有CUDA的系統預設啟用此選項。 |
--opt-split-attention-invokeai | None | False | 強制啟用InvokeAI的cross-attention layer最佳化。無CUDA的系統預設啟用此選項。 |
--opt-split-attention-v1 | None | False | 啟用舊版的split attention最佳化,防止佔用全部可用的VRAM, |
--opt-sub-quad-attention | None | False | 啟用增進記憶體效率的sub-quadratic cross-attention layer最佳化 |
--sub-quad-q-chunk-size | SUB_QUAD_Q_CHUNK_SIZE | 1024 | sub-quadratic cross-attention layer最佳化使用的序列化區塊大小 |
--sub-quad-kv-chunk-size | SUB_QUAD_KV_CHUNK_SIZE | None | sub-quadratic cross-attention layer最佳化使用的kv區塊大小 |
--sub-quad-chunk-threshold | SUB_QUAD_CHUNK_THRESHOLD | None | sub-quadratic cross-attention layer最佳化過程中,區塊化使用的VRAM閾值 |
--opt-channelslast | None | False | 啟用4d tensors使用的alternative layout,或許可以加快推理速度 僅適用搭載Tensor核心的Nvidia顯示卡(16xx系列以上) |
--disable-opt-split-attention | None | False | 強制停用cross-attention layer的最佳化 |
--disable-nan-check | None | False | 不檢查生成影像/潛在空間是否有nan。在CI模式無使用存檔點模型的時候很有用。 |
--use-cpu | None | 讓部份模組使用CPU作為PyTorch的裝置 | |
--no-half | None | False | 不將模型轉換為半精度浮點數 |
--precision | autocast | 使用此精度評估 | |
--no-half-vae | None | False | 不將VAE模型轉換為半精度浮點數 |
--upcast-sampling | None | False | 向上取樣。搭配 --no-half使用則無效。生成的結果與使用--no-half引數相近,效率更高,使用更少記憶體。 |
--medvram | None | False | 啟用Stable Diffusion模型最佳化,犧牲速度,換取較小的VRAM佔用。 |
--lowvram | None | False | 啟用Stable Diffusion模型最佳化,大幅犧牲速度,換取更小的VRAM佔用。 |
--lowram | None | False | 將Stable Diffusion存檔點模型的權重載入至VRAM,而非RAM |
--disable-model-loading-ram-optimization | None | False | 停用模型載入時降低RAM佔用的最佳化。 |
功能 | |||
--autolaunch | None | False | 啟動WebUI後自動開啟系統預設的瀏覽器 |
--theme | None | Unset | 使用指定主題啟動WebUI (light或dark),無指定則使用瀏覽器預設主題。 |
--use-textbox-seed | None | False | 在WebUI的種子欄位使用textbox (沒有上下,但可以輸入長的種子碼) |
--disable-safe-unpickle | None | False | 不檢查PyTorch模型是否有惡意程式碼 |
--ngrok | NGROK | None | Ngrok授權權杖, --share引數的替代品。 |
--ngrok-region | NGROK_REGION | us | 選擇啟動Ngrok的區域 |
--update-check | None | None | 啟動時檢查有無新版本。 |
--update-all-extensions | None | None | 在啟動WebUI的時候自動更新所有擴充功能。 |
--reinstall-xformers | None | False | 強制重新安裝xformers,適用於更新程式之後執行。更新完之後記得移除此引數。 |
--reinstall-torch | None | False | 強制重新安裝touch,適用於更新程式之後執行。更新完之後記得移除此引數。 |
--tests | TESTS | False | 執行功能測試,確認WebUI正常運作。 |
--no-tests | None | False | 即使有--test 引數也不要執行功能測試。 |
--dump-sysinfo | None | False | 傾印系統訊息並退出程式(不包括擴充功能) |
--disable-all-extensions | None | False | 停用所有擴充功能,包含內建的擴充功能。 |
--disable-extra-extensions | None | False | 停用所有擴充功能。 |
已經無效的選項 | |||
--show-negative-prompt | None | False | 無作用 |
--deepdanbooru | None | False | 無作用 |
--unload-gfpgan | None | False | 無作用 |
--gradio-img2img-tool | GRADIO_IMG2IMG_TOOL | None | 無作用 |
--gradio-inpaint-tool | GRADIO_INPAINT_TOOL | None | 無作用 |
--gradio-queue | None | False | 無作用 |
--add-stop-route | None | False | 無作用 |
--always-batch-cond-uncond | None | False | 無作用 |
下載模型
目前找Stable Diffusion與其衍生模型的網站主要就二個。
第一個是 HuggingFace,中文俗稱抱臉笑,可以說是人工智慧界的Github。Stable Diffusion背後用到的很多AI工具,如Transformer、Tokenizers、Datasets都他們開發的,網站上也有豐富的教學文件。
另一個是 Civitai,專門用來分享Stable Diffusion相關的資源,特色是模型都有示範縮圖,使用者也可以分享彼此使用的提示詞,以及分享作品。
這裡我先下載一個動漫模型:https://civitai.com/models/4437/abyssorangemix2-sfwsoft-nsfw
將下載後的模型放到models\Stable-diffusion
文生圖
文生圖(txt2image)即為讓AI按照文字敘述生圖。
生圖流程為在左上角填入提示詞,勾選左下角的生圖引數,再點選右上角生成圖片。其餘SD WebUI的功能用法大抵都按照此邏輯設計,有些引數是通用的。
文生圖 案例1
在prompt輸入
A girl, walking in the forest, the sun fell on her body,
(masterpiece:1,2), best quality, highres, original, extremely detailed wallpaper, perfect lighting,(extremely detailed CG:1.2),
在nagative prompt輸入
NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit,bad hands, missing fingers, (((extra arms and legs))),
通用引數:
- Sampling method 取樣方法選擇:DPM++ 2M SDE Heun
- Sampling Steps 取樣步數:20
- Width 寬度:800
- Height 高度:450
- Batch count 生成幾次:1
- Batch size 一次生成幾張:1
- CFG Scale 提示詞的相關度:8
- Seed 種子碼:-1 表示隨機,也可以填別人畫好的seed
其它引數先不用管,點選生成
圖生圖
圖生圖(img2img)是讓AI參照現有的圖片生圖,源自InstructPix2Pix技術。
例如:上傳一張真人照片,讓AI把他改繪成動漫人物;上傳畫作線稿,讓AI自動上色;上傳一張黑白照,讓AI把它修復成彩色相片。
這個功能位於「Img2img」的頁籤。
隨便在網上找一張非二次元的圖片,例如我這裡使用礦泉水瓶的圖片
參考步驟:
- 上傳參考圖。圖片比例最好跟設定生成的寬高一致
- 調整通用引數。特別注意Denoising strength,該引數調低的情況下可以用來微調原圖
- 點選生成
提示詞(注意看格式)
SFW, (1girl:1.3), long hair, white hair, face, front, looking at viewer, white shirt, (green belt:1.5), red skirt, red hats, dancing, upper body, standing, (white background:1.5), hands at the back
(masterpiece:1.2), best quality, masterpiece, highres, original, extremely detailed wallpaper, perfect lighting,(extremely detailed CG:1.2),
Negative prompt: NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit,bad hands, missing fingers, (((extra arms and legs))),
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 8, Seed: 4072734573, Size: 600x600, Model hash: 038ba203d8, Model: AbyssOrangeMix2_SFW, Denoising strength: 0.7, Clip skip: 2, ENSD: 31337, Mask blur: 4
圖生圖的生成結果按鈕下的最後兩個按鈕可以從圖片中提取提示詞,有興趣的也可以試一下。
內補繪製
內補繪製(inpaint)。這是用AI填充塗黑(遮罩)區域的技術,例如給圖片的角色換衣服。或是反過來:讓AI把圖片空白的地方繪製完成(outpaint)。
可以想像成讓AI幫您修圖,用於在圖中新增或去除物件。
此功能位於Img2img下的Inpaint頁面。
引數說明:
- Mask blur:圖片上的筆刷毛邊柔和程度。
- Mask mode:選擇要讓AI填滿塗黑區域(Inpaint masked),或是填滿未塗黑區域(Inpaint not masked)。
- Masked content:要填充的內容。
- Fill:讓AI參考塗黑附近的顏色填滿區域。
- Original:在填滿區域的時候參考原圖底下的內容。
- latent noise:使用潛在空間填滿,可能會生出跟原圖完全不相關的內容。
- latent nothing:使用潛在空間填滿,不加入噪聲。
- Inpaint area:選擇要填滿整張圖片(Whole picture)或是隻填滿塗黑的區域(Only masked)
- Only masked padding, pixels是畫素內距。
- Only masked即外補繪製模式。
參考流程:
- 上傳參考圖
- 繪製要重繪的區域
- 填寫提示詞
- 調整引數
- 生成
若要切換為外補繪製:點選左下角的Mask mode,將Inpaint masked改成Inpaint not masked,這樣AI就會改為填滿沒有塗黑的地方。
batch頁面可以批次處理圖片,大家自行嘗試。
這裡我沒做出效果比較好的示例,在網上找了張效果圖,塗黑的部分就是重繪的部分,新版塗抹已經變成白色了
額外網路 進階模型
大模型一般指Checkpoint,小模型則是除了大模型之外的其他模型,如LoRA、Embeddings、Hypernetwork對大模型起到“微調”作用
小模型主要用來改善畫風,並改善生成特定物件、角色的準確度。例如使用Anything模型生圖,再搭配"Taiwan-doll-likeness LoRA"就能轉成真人風格而不用依賴許多提示詞,並且可以一次疊很多個,就像套多層濾鏡一般。
- LoRA:比較常用,一般用於還原角色、形象特徵,也可以用於訓練畫風
- Embeddings:還原角色的形象特徵
- Hypernetwork:用的不多
Civitai有很多小模型可以下載。下載時需注意模型是哪一種。
- Embedding請放stable-diffusion-webui資料夾下的embeddings
- HyperNetwork放到stable-diffusion-webui/models/hypernetworks。
- LoRA放到stable-diffusion-webui/models/Lora。
如果要顯示小模型縮圖,將圖片取跟該模型一樣的檔名,並放到該模型的資料夾。例如在Taiwan-doll-likeness.safetensors所在的資料夾放一張Taiwan-doll-likeness.png。
使用方法:
- 在正常使用文生圖的基礎上。選擇lora,點選小模型的卡片便會將其加到提示詞欄位,提示詞欄位會出現
,表示要在繪圖時使用LoRA。 - 如果生出來的圖片太詭異,調整提示詞欄位每個LoRA後面的數字,控制權重。xxx:0.5
這裡介紹一下VAE
,之前生成的圖片都會偏灰。VAE (variational autoencoder)可以讓算出來的圖片色彩更漂亮,改善圖片顏色灰灰暗暗的問題。
這裡下載模型對應的VAE:https://huggingface.co/WarriorMama777/OrangeMixs/tree/main/VAEs
下載orangemix.vae.pt
如果要使用VAE,下載VAE模型後,將其放到stable-diffusion-webui/models/VAE資料夾。
接著點選Settings → Stable Diffusion → SD VAE,選取要使用的VAE,再點選Apply Settings,此後生圖就會一律使用指定的VAE。
lora案例1
到c站下載lora:https://civitai.com/models/9727?modelVersionId=11564
這裡我下載的是d.va (overwatch) d.va 守望先鋒
下載後放到models\Lora
資料夾。
此時在Lora選項卡的右上角點選重新整理就可以看到卡片
提示詞
SFW, masterpiece, best quality, 1girl, brown hair, brown eyes, smile, standing, dynamic pose, outdoors, city background, <lora:dva:0.6>, deeva \(overwatch 1 version\), d.va /(overwatch 1/),
facial_mark, whisker_markings, d.va_\(overwatch\), 1girl, blue bodysuit, long_hair, pilot_suit, solo, facepaint, headphones, gun, brown_hair, holding_gun, swept_bangs, clothes_writing, bangs, breasts, blue_background, hand_on_hip, animal_print, handgun, brown_eyes, medium_breasts, holding_weapon, bracer, ribbed_bodysuit, weapon, white_gloves, shoulder_pads, holding, high_collar, turtleneck, standing, white_footwear, full_body, charm_\(object\), pink_lips, gloves, hand_up, pistol, skin_tight, smile
Negative prompt: NSFW, (worst quality:2), (low quality:2), (normal quality:2), lowres, normal quality, ((monochrome)), ((grayscale)), skin spots, acnes, skin blemishes, age spot, (ugly:1.331), (duplicate:1.331), (morbid:1.21), (mutilated:1.21), (tranny:1.331), mutated hands, (poorly drawn hands:1.5), blurry, (bad anatomy:1.21), (bad proportions:1.331), extra limbs, (disfigured:1.331), (missing arms:1.331), (extra legs:1.331), (fused fingers:1.61051), (too many fingers:1.61051), (unclear eyes:1.331), lowers, bad hands, missing fingers, extra digit,bad hands, missing fingers, (((extra arms and legs))),
Steps: 20, Sampler: DPM++ SDE Karras, CFG scale: 7, Seed: 3590206651, Size: 600x800, Model hash: a074b8864e, Model: 二次元:Counterfeit V2.5, Denoising strength: 0.4, Clip skip: 2, ENSD: 31337, Hires upscale: 1.5, Hires upscaler: R-ESRGAN 4x+ Anime6B
可以試一下加和不加的區別
放大圖片解析度
用預設的512x512解析度就生出不錯的圖,可以將圖片直接丟到Extras放大。
引數
- Scale by:按照此數字的倍數放大
- Scale to:放大至指定寬高
- Upscaler 1 & Upscaler 2:放大圖片的時候可以只用一種放大器,也可以混合使用二種放大器。
- Upscaler 2 visibility:第二個放大器的權重。
- GFPGAN visibility:GFPGAN臉部修復模型的權重
- CodeFormer visibility:CodeFormer臉部修復模型的權重
Upscaler的選擇
- ESRGAN_4x適合用於處理真人照片
- ESRGAN_4x適合用於繪畫
- Anime6B適合用於動漫圖片,它也可以用來將真人圖片轉動漫風格
切換至Extras頁面,上傳圖片,選取放大2倍,點選下面的Upscaler 1中挑一個看起來順眼的,其餘維持預設,按Generate即會得到放大過的圖片。
參考
- https://docs.stablediffusion.cn/
- https://nenly.notion.site/017c3341c8b84a7ebb4c2cb16f36e28f