原理簡介
Stable diffusion是一種用于圖像處理的算法,主要用于處理圖像中的噪聲問題。該算法的源代碼和實現(xiàn)可以根據(jù)不同的編程語言和庫進行實現(xiàn),以下是對Python中使用的源代碼進行分析:
1.導(dǎo)入庫和模塊
import numpy as np
import cv2
該算法主要使用了NumPy和OpenCV庫,前者是Python中用于數(shù)值計算的基礎(chǔ)庫,后者是用于計算機視覺的著名庫。在代碼中,我們還需要使用NumPy中的一些數(shù)組操作和OpenCV中的圖像操作。
2.定義函數(shù)
def stable_diffusion_filter(img, k=0.1, t=50, sigma=10):
filtered_img = img.astype(np.float32)
for i in range(t):
dx = cv2.Sobel(filtered_img, cv2.CV_32F, 1, 0, ksize=3)
dy = cv2.Sobel(filtered_img, cv2.CV_32F, 0, 1, ksize=3)
dxx = cv2.Sobel(dx, cv2.CV_32F, 1, 0, ksize=3)
dyy = cv2.Sobel(dy, cv2.CV_32F, 0, 1, ksize=3)
dxy = cv2.Sobel(dx, cv2.CV_32F, 0, 1, ksize=3)
dxy2 = cv2.Sobel(dy, cv2.CV_32F, 1, 0, ksize=3)
num = dxx * dyy - dxy * dxy2
den = dxx + dyy + sigma
filtered_img += k * num / den
return filtered_img
該函數(shù)是對圖像進行穩(wěn)定擴散濾波的主體部分。該函數(shù)使用了圖像的梯度信息進行計算,并根據(jù)梯度的變化對圖像進行濾波。在這個函數(shù)中,我們需要指定一些參數(shù),如濾波器系數(shù)k、迭代次數(shù)t以及平滑參數(shù)sigma。
在函數(shù)中,我們首先將輸入的圖像轉(zhuǎn)換為浮點數(shù)數(shù)組,這樣我們可以進行計算。然后,我們迭代t次,每次使用Sobel算子計算圖像的x和y方向的梯度,并使用這些梯度計算x和y方向的二階導(dǎo)數(shù)dxx和dyy,以及混合導(dǎo)數(shù)dxy和dxy2。使用這些導(dǎo)數(shù),我們計算了一個num和den的值,并使用它們來更新過濾圖像。最后,我們返回濾波后的圖像。
3.調(diào)用函數(shù)
img = cv2.imread('input.jpg')
filtered_img = stable_diffusion_filter(img)
cv2.imwrite('output.jpg', filtered_img)
在調(diào)用該函數(shù)之前,我們需要首先讀入輸入圖像。這可以通過OpenCV庫中的imread函數(shù)實現(xiàn)。然后,我們調(diào)用stable_diffusion_filter函數(shù)對圖像進行濾波,并將結(jié)果保存到一個變量中。最后,我們使用OpenCV中的imwrite函數(shù)將濾波后的圖像保存到磁盤中。Stable diffusion是一種用于圖像處理的算法,主要用于處理圖像中的噪聲問題。該算法的源代碼和實現(xiàn)可以根據(jù)不同的編程語言和庫進行實現(xiàn),以下是對Python中使用的源代碼進行分析:
1.導(dǎo)入庫和模塊
import numpy as np
import cv2
該算法主要使用了NumPy和OpenCV庫,前者是Python中用于數(shù)值計算的基礎(chǔ)庫,后者是用于計算機視覺的著名庫。在代碼中,我們還需要使用NumPy中的一些數(shù)組操作和OpenCV中的圖像操作。
2.定義函數(shù)
def stable_diffusion_filter(img, k=0.1, t=50, sigma=10):
filtered_img = img.astype(np.float32)
for i in range(t):
dx = cv2.Sobel(filtered_img, cv2.CV_32F, 1, 0, ksize=3)
dy = cv2.Sobel(filtered_img, cv2.CV_32F, 0, 1, ksize=3)
dxx = cv2.Sobel(dx, cv2.CV_32F, 1, 0, ksize=3)
dyy = cv2.Sobel(dy, cv2.CV_32F, 0, 1, ksize=3)
dxy = cv2.Sobel(dx, cv2.CV_32F, 0, 1, ksize=3)
dxy2 = cv2.Sobel(dy, cv2.CV_32F, 1, 0, ksize=3)
num = dxx * dyy - dxy * dxy2
den = dxx + dyy + sigma
filtered_img += k * num / den
return filtered_img
該函數(shù)是對圖像進行穩(wěn)定擴散濾波的主體部分。該函數(shù)使用了圖像的梯度信息進行計算,并根據(jù)梯度的變化對圖像進行濾波。在這個函數(shù)中,我們需要指定一些參數(shù),如濾波器系數(shù)k、迭代次數(shù)t以及平滑參數(shù)sigma。
在函數(shù)中,我們首先將輸入的圖像轉(zhuǎn)換為浮點數(shù)數(shù)組,這樣我們可以進行計算。然后,我們迭代t次,每次使用Sobel算子計算圖像的x和y方向的梯度,并使用這些梯度計算x和y方向的二階導(dǎo)數(shù)dxx和dyy,以及混合導(dǎo)數(shù)dxy和dxy2。使用這些導(dǎo)數(shù),我們計算了一個num和den的值,并使用它們來更新過濾圖像。最后,我們返回濾波后的圖像。
3.調(diào)用函數(shù)
img = cv2.imread('input.jpg')
filtered_img = stable_diffusion_filter(img)
cv2.imwrite('output.jpg', filtered_img)
在調(diào)用該函數(shù)之前,我們需要首先讀入輸入圖像。這可以通過OpenCV庫中的imread函數(shù)實現(xiàn)。然后,我們調(diào)用stable_diffusion_filter函數(shù)對圖像進行濾波,并將結(jié)果保存到一個變量中。最后,我們使用OpenCV中的imwrite函數(shù)將濾波后的圖像保存到磁盤中。
一、源碼倉庫
https://github.com/AUTOMATIC1111/stable-diffusion-webui
二、模型庫地址
https://civitai.com/
三、在 Windows 上自動安裝步驟
會linux基本上都懂得用github倉庫,本指南主要面向小白,所以以windows為主。
安裝Python
- 安裝 Python 3.10.6 , 并檢查 python 是否添加進全局變量.
安裝git
安裝 git.
下載源代碼
運行 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git.
編輯 webui-user.bat
下載完之后,進入stable-diffusion-webui目錄
@echo off
set PYTHON= { 這里填上你的python的真實地址 }\python.exe
set http_proxy= {這里填上你的vpn的地址}
set https_proxy= {這里填上你的vpn的地址}
set GIT=
set VENV_DIR=
REM 如果沒有顯卡就加上 --no-half --skip-torch-cuda-test,如果要開通API功能就加上 --api
set COMMANDLINE_ARGS= --no-half --skip-torch-cuda-test --api
git pull
call webui.bat
四、如何打開
- 雙擊運行 webui-user.bat
- 啟動后就會開始執(zhí)行python的本地服務(wù)器,并監(jiān)聽7860 端口,所以瀏覽器打開:
http://127.0.0.1:7860
即可。
五、依據(jù)文字生成圖片
六、API在哪里?
打開鏈接:http://127.0.0.1:7860/docs
這里面會有接口列表。
以 sdapi
開頭的都是可使用的接口。
七、用python調(diào)用API接口示例
import requests
url = "http://127.0.0.1:7860"
payload = {
"prompt": "puppy dog",
"steps": 5
}
response = requests.post(url=f'{url}/sdapi/v1/txt2img', json=payload)
r = response.json()
print(r)
八、如何制作生成精美的圖片
1、下載模型
因為模型是別人反復(fù)調(diào)試配備好的模板,生成的圖片質(zhì)量比較上乘
2、參考(抄襲)別人的提示詞
除了模型,還要加上成熟的提示詞,(要求英文的)這樣才能進行精確的微調(diào)與操作
注意事項:生成的圖片是比較隨機的,所以可以一次性生成多張,方便挑選。
如果沒有顯卡的話,生成的速度會比較慢。建議加上顯卡。
九、如何使用模型
為了讓生成的圖片更加好看,我們需要使用別人已經(jīng)訓(xùn)練好的模型。
1. LoRA 是什么?
LoRA[^1],英文全稱Low-Rank Adaptation of Large Language Models,直譯為大語言模型的低階適應(yīng),這是微軟的研究人員為了解決大語言模型微調(diào)而開發(fā)的一項技術(shù)。
比如,GPT-3有1750億參數(shù),為了讓它能干特定領(lǐng)域的活兒,需要做微調(diào),但是如果直接對GPT-3做微調(diào),成本太高太麻煩了。
LoRA的做法是,凍結(jié)預(yù)訓(xùn)練好的模型權(quán)重參數(shù),然后在每個Transformer(Transforme就是GPT的那個T)塊里注入可訓(xùn)練的層,由于不需要對模型的權(quán)重參數(shù)重新計算梯度,所以,大大減少了需要訓(xùn)練的計算量。
LoRA的微調(diào)質(zhì)量與全模型微調(diào)相當。要做個比喻的話,就好比是大模型的一個小模型,或者說是一個插件。
2. LoRA 目錄
路徑:stable-diffusion-webui\models\Lora
下載完的 LoRA 文件,直接拷貝到這個目錄即可。
先試著生成圖片,后續(xù)再一步步生成精致的圖片.文章來源:http://www.zghlxwxcb.cn/news/detail-483237.html
[^1] https://zhuanlan.zhihu.com/p/610031713文章來源地址http://www.zghlxwxcb.cn/news/detail-483237.html
到了這里,關(guān)于stable diffusion webui 教程:安裝與入門的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!