今天給大家介紹下 Stable Diffusion 的一些基礎(chǔ)概念。 所謂磨刀不誤砍柴工,只有把刀磨鋒利了,砍起柴來才能得心應(yīng)手,才能順利的砍到所需的柴火??巢袢绱耍匠W鍪虑橐彩沁@樣,我們要做好一件事,首先就要打好基礎(chǔ),找出核心的方面,搞懂相關(guān)原理,理清楚其中的利害關(guān)系,然后才能加以利用,進(jìn)而得到滿意的結(jié)果。 我是6月份開始接觸 Stable Diffusion 的,當(dāng)時(shí)參加了一個(gè)社區(qū),有老師專門教AI繪畫,然后我就按照教程一步一步的做,最后出圖的時(shí)候特別有成就感,那個(gè)感覺就像掌控了整個(gè)世界,也有點(diǎn)類似于剛拿到汽車駕照的感覺。 但是,跟著別人做的時(shí)候很順利,按照自己的想法繪圖時(shí)就遇到很多問題,經(jīng)常搞很久都不能得到滿意的結(jié)果,各種參數(shù)調(diào)來調(diào)去,一遍遍的生成,花費(fèi)很多的時(shí)間,也拿不到想要的結(jié)果,如果電腦有感情,可能都要崩潰了。 后來我意識到,不能再這樣搞下去了,這樣搞下去成不了專家(哈哈)。我之所以很難拿到結(jié)果,是因?yàn)槲覍?Stable Diffusion 的認(rèn)識太簡單太膚淺,很多參數(shù)都是一知半解,很多時(shí)候都是按照自己想當(dāng)然的方法各種亂試,沒有抓住要領(lǐng),沒有搞懂原理,這樣就很難用好這個(gè)工具,我操之過急了。 然后我開始詳細(xì)了解 Stable Diffusion 的各種概念,盡量去理解相關(guān)的原理,去查詢各個(gè)參數(shù)的作用,然后再去實(shí)踐,遇到搞不清楚的地方,再去搜索查詢,如此反復(fù),終于搞明白了一些事情,也能生成一些想要的圖片了。因?yàn)槲疫@些認(rèn)識也是從別人那里學(xué)來的,本著人人為我,我為人人的精神,我也把自己學(xué)到的一些東西分享出來。 本文就和大家分享一下我了解到的一些 Stable Diffusion 的基礎(chǔ)概念,相關(guān)說明在保持基本正確的情況下會盡量通俗易懂,希望能幫助到身處困惑中的同學(xué)。 模型理解模型這個(gè)詞需要一點(diǎn)初中數(shù)學(xué)知識,可以把每個(gè)模型看成一個(gè)數(shù)學(xué)函數(shù):y=f(x),輸入?yún)?shù) x,得到返回值 y。只不過這個(gè)函數(shù)可能特別復(fù)雜,里邊會有很多的子函數(shù),這些子函數(shù)通過各種規(guī)則進(jìn)行連接。 在使用 Stable Diffusion 生成圖片時(shí),我們會遇到很多的模型,最基礎(chǔ)的就是 Stable Diffusion 大模型,比如Anything、realisticVision等等,對于此類模型,我們可以簡單的認(rèn)為模型的參數(shù)就是提示詞、圖片尺寸、提示詞引導(dǎo)系數(shù)、隨機(jī)數(shù)種子等等,返回值就是圖片數(shù)據(jù)。 除了大模型,平常使用較多的還有 Lora 模型、嵌入式模型。Lora 模型是一種微調(diào)模型,可以用來生成某種特色圖片,比如一些機(jī)甲、插畫風(fēng)格的模型。嵌入式模型通常使用單個(gè)輸入代表一組數(shù)據(jù),從而可以節(jié)省一些配置,比如常用的負(fù)面提示詞模型 EasyNegative。 除了 Stable Diffusion 自身支持的模型,很多插件也需要模型才能正常運(yùn)行,比如ADetailer,就需要下載修臉、修手的模型。 模型文件的后綴名有很多種,比如常用的 Stable Diffusion 大模型文件名后綴一般是 .safetensors 和 .ckpt,.safetensors 文件比 .ckpt 文件更安全和快速,有這個(gè)的時(shí)候推薦用這個(gè)。還有一些模型的后綴名是 .pt、.pth、.onnx等等,它們一般由不同的機(jī)器學(xué)習(xí)框架訓(xùn)練而來,或者是包含的信息格式存在差異。 Stable DiffusionStable Diffusion 是一種很先進(jìn)的生成技術(shù),集算法與模型為一身,2002年8月由 Stability AI 開源。Stable Diffusion 有時(shí)候會被簡稱為SD。 先來認(rèn)識下這兩個(gè)單詞:
下面再介紹下 Stable Diffusion 的基本原理,分成兩個(gè)方面:訓(xùn)練和生成。其核心就是在一個(gè)特殊的潛在空間中擴(kuò)散。 潛在空間:Stable Diffusion 訓(xùn)練和生成圖片并不是基于圖片像素空間,而是在一個(gè)潛在空間中進(jìn)行,這個(gè)潛在空間的維度比圖片像素的維度要低很多,比如一個(gè)尺寸為 768*512 的圖像,其像素維度為 768*512=393216,而 Stable Diffusion 模型的潛在空間維度通常在 768 維左右,可見潛在空間顯著降低了對算力和顯卡性能的要求,訓(xùn)練和生成圖片的速度更快。 訓(xùn)練:指的是使用帶有文本描述的圖片構(gòu)建生成模型的過程。
這個(gè)過程重復(fù)多次,直到損失值無法再降低或者可降低的幅度非常??;同時(shí)文本描述轉(zhuǎn)換的向量還會通過學(xué)習(xí)不斷接近原始圖片的信息。最終得到一個(gè)相對高質(zhì)量的模型。
生成:指的是模型使用者使用文本提示詞+模型生成圖片的過程。 生成時(shí)還是需要先將文本提示詞轉(zhuǎn)換為潛在空間中的向量。 然后使用“前向擴(kuò)散”方法基于這個(gè)向量生成符合向量語義的噪聲圖像。 然后使用“后向擴(kuò)散”方法去除這個(gè)噪聲圖像中的噪聲,最終得到清晰的圖片。 Stable Diffusion WebUI一個(gè)最流行的開源 Stable Diffusion 整合程序,用戶安裝后可以直接通過 Web 頁面使用 Stable Diffusion。 Stable Diffusion WebUI 的核心功能是 文生圖 和 圖生圖,這兩個(gè)功能也就是 Stable Diffusion 的核心能力。 Stable Diffusion WebUI 的其它功能,比如ControlNet、高清放大、模型訓(xùn)練等等都是其它第三方開發(fā)的,有的已經(jīng)內(nèi)置到 WebUI 中,隨著 WebUI 的發(fā)布而發(fā)布,有的還需要用戶手動安裝。 除了Stable Diffusion WebUI,還有一些使用量比較大的整合程序:SD.Next、ComfyUI 等。 大模型這里說的是 Stable Diffusion 大模型,有時(shí)也稱為主模型、基礎(chǔ)模型。Stability AI 官方發(fā)布了一個(gè)基礎(chǔ)模型,但是因?yàn)楸容^通用,兼顧的方面比較多,特點(diǎn)不足,所以大家一般很少使用。比如有的人喜歡二次元、有的人喜歡真實(shí)、有的人喜歡3D,用官方模型出圖的效果不是最優(yōu)的,所以很多組織或者個(gè)人就專門訓(xùn)練某方面的模型,并發(fā)布到社區(qū)給大家使用。 同時(shí)因?yàn)榇竽P偷挠?xùn)練成本很高,所以基本上沒人會重頭開始,這些模型一般基于 Stability AI 發(fā)布的官方模型二次訓(xùn)練而來。訓(xùn)練方法常見的有DreamBooth,DreamBooth模型可以將目標(biāo)對象與新場景結(jié)合,生成創(chuàng)意新圖片;訓(xùn)練這種模型可以只需要少量的目標(biāo)對象的圖片,也能達(dá)到較好的效果。 因?yàn)榇竽P陀?xùn)練時(shí)使用了大量的圖片,累積了比較多的數(shù)據(jù),所以模型文件很大,通常都在2G-7G。 對于 Stable Diffusion WebUI,大模型的安裝默認(rèn)目錄是:<stable-diffusion-webui>\models\Stable-diffusion ,不過這個(gè)目錄是可以通過啟動參數(shù)更改的,注意確認(rèn)你自己的大模型目錄。 VAE模型上面提到 Stable Diffusion 生成圖片時(shí)會在一個(gè)潛在空間中進(jìn)行處理,圖片數(shù)據(jù)和潛在空間數(shù)據(jù)的轉(zhuǎn)換就是由VAE模型處理的。VAE模型在這個(gè)轉(zhuǎn)換過程中能夠?qū)W習(xí)到一些圖像特征的處理方式,使得生成的圖像顏色更加鮮艷、細(xì)節(jié)更加銳利,可以用來解決圖片發(fā)灰模糊的問題。 很多大模型會自帶VAE模型,這時(shí)候我們就不需要再給它搭配一個(gè)VAE,當(dāng)然也有不自帶的,這時(shí)就需要搭配一個(gè),在 Stable Diffusion WebUi 中可以無腦選擇“自動識別”。 在秋葉整合包中提供了四個(gè)選項(xiàng),如下圖所示,我一般都選“自動識別”,除了 vae-ft-mse-840000-ema 比較通用,animevae 是專門優(yōu)化二次元圖片的。一般這兩個(gè)VAE模型就夠了。 對于 Stable Diffusion WebUI,Vae 模型的安裝默認(rèn)目錄是:<stable-diffusion-webui>\models\Vae ,注意替換 <stable-diffusion-webui> 為你自己的安裝目錄。不過這個(gè)目錄是可以通過啟動參數(shù)更改的,注意確認(rèn)你自己的 Lora 目錄。 Lora模型這是一種基于大模型的風(fēng)格模型,也就是說它不能單獨(dú)使用,必須配合一個(gè)大模型才行。比如我們畫小姐姐的時(shí)候,可以用一些Lora模型來控制人物的服裝、頭飾;生成機(jī)械四肢的時(shí)候,可以用一些Lora模型來強(qiáng)化肢體上覆蓋的機(jī)甲樣式;畫風(fēng)景圖的時(shí)候,可以用一些Lora模型來控制繪畫的風(fēng)格。 這種模型訓(xùn)練成本不高,往往只需要幾十張圖片就可以訓(xùn)練得到,比較方便普通用戶試玩。 與 Lora 模型作用和使用方式類似的還有一種超網(wǎng)絡(luò)模型,不過效果上較 Lora 模型差,社區(qū)中很少這種模型。 對于 Stable Diffusion WebUI,Lora 模型的安裝默認(rèn)目錄是:<stable-diffusion-webui>\models\Lora ,初始狀態(tài)下里邊是空的,注意替換 <stable-diffusion-webui> 為你自己的安裝目錄。不過這個(gè)目錄是可以通過啟動參數(shù)更改的,注意確認(rèn)你自己的 Lora 目錄。 提示詞對圖像的描述,也就是想畫一幅什么樣的畫。比如我上邊使用的:a girl,但是這個(gè)提示詞過于簡單,AI雖然畫出了一個(gè)女孩,但是他不知道你腦子里的女孩長什么樣子,如果要畫的更符合你的需求,你還要告訴他更多細(xì)節(jié)才好,比如女孩的頭發(fā)是什么顏色、穿著什么衣服、站著還是坐著、在戶外還是室內(nèi)等等。 提示詞在AI繪畫中特別重要,一個(gè)常見的編寫套路是:風(fēng)格、主體、細(xì)節(jié)。風(fēng)格就是圖片是照片、水墨畫,還是白描;主體就是你想畫什么,比如1個(gè)女孩、1棵樹、或者1條狗子;細(xì)節(jié)就是你的主體長什么樣子,是長發(fā)還是短發(fā),黑色頭發(fā)還是粉色頭發(fā),眼睛是藍(lán)色還是黃色等等。 另外我們還可以使用一些質(zhì)量提示詞提升圖片的質(zhì)量,比如: masterpiece、best quality、ultra-detailed、8K等,不過這對于新版的SDXL這些提示詞沒什么意義了,SDXL會努力做到最好;還有就是可以使用權(quán)重?cái)?shù)字強(qiáng)化或弱化某個(gè)提示詞對生成圖片的影響,比如: red hair:1.31 ,這可以強(qiáng)化輸出照片中頭發(fā)顏色為紅色的概率。 在 Stable Diffusion 中文本提示詞會被轉(zhuǎn)換為潛在空間中的向量,然后參考這個(gè)向量生成噪聲圖像,然后再對噪聲圖像進(jìn)行采樣去噪處理,逐步生成清晰的圖像。 反向提示詞不想在圖片中出現(xiàn)的東西,比如樹、桌子、6根手指、缺胳膊斷腿等等,在上邊的示例中我使用了“EasyNegative”,這是一個(gè)嵌入式模型的代號,可以認(rèn)為它代表了一些常見的反向提示詞,使用它就不用一個(gè)個(gè)輸入了,且只使用一個(gè)提示詞的數(shù)量額度。 提示詞引導(dǎo)系數(shù)在 Stable Diffusion 中,提示詞引導(dǎo)系數(shù)實(shí)際上影響的是噪聲圖像,通過調(diào)整該參數(shù),可以改變噪聲圖像與原始文本的相關(guān)性。這個(gè)參數(shù)的值越小生成圖像越自由,越大則更注重文本信息的影響。 采樣器和采樣步數(shù)采樣就是去除噪音。在上面介紹 Stable Diffusion 時(shí),提到過“反向擴(kuò)散”這個(gè)概念,采樣器就是在反向擴(kuò)散時(shí)去噪用的算法程序。 Stable Diffusion WebUI 中默認(rèn)已經(jīng)集成了很多采樣器,比如:Euler a、DPM++、DDIM和Restart等等,它們在圖像生成的效果和速度上存在一定的差異。比如: Euler a:默認(rèn)選中的就是這個(gè),是最簡單、最快的采樣器,以較少的步數(shù)可以產(chǎn)生很大的多樣性,不同的步數(shù)可能有不同的結(jié)果。但是,當(dāng)步數(shù)過高時(shí)(超過30步),圖像的質(zhì)量可能不會有所提高。 DPM++:在圖像的質(zhì)量上表現(xiàn)不錯,但相較于其他采樣器,其耗時(shí)可能會相應(yīng)增加。 隨機(jī)數(shù)種子隨機(jī)數(shù)種子是AI繪畫的魅力之一。在其它參數(shù)都相同的情況下,只要隨機(jī)數(shù)不同,每次生成就會產(chǎn)生有些差異的圖片,創(chuàng)意幾乎無窮無盡;反過來使用相同的隨機(jī)數(shù)則可以生成完全相同的圖片,這也是很多人都對收集 Stable Diffusion 生圖參數(shù)樂此不疲的原因。-1 代表每次使用不同的隨機(jī)數(shù)。 在Stable Diffusion內(nèi)部,隨機(jī)數(shù)種子會影響潛在空間中的噪聲圖像。當(dāng)其他參數(shù)完全相同時(shí),相同的隨機(jī)數(shù)種子將會生成相同的噪聲圖像,從而生成相同的像素圖像。 OK,以上就是本文的主要內(nèi)容,介紹了 Stable Diffusion 的一些基礎(chǔ)概念。如果有感覺沒講清楚的地方,歡迎留言溝通;因能力有限,以上有些說法可能不準(zhǔn)確或者存在錯誤,如有問題還望指正。 |
|