ComfyUI 基礎教程(二) —— Stable Diffusion 文生圖基礎工作流及模型、常用節點介紹

SharpCJ發表於2024-09-06

上一篇文章講解述首次啟動 ComfyUI 會自動開啟一個最基礎的文生圖工作流。實際上,後續我們可以透過選單選項,或者快捷鍵 ctrl + D來開啟這個預設工作流。預設工作流如下:

這是一個最基礎的文生圖工作流,本文透過對這個工作流的講解,讓大家對 ComfyUI 工作流有一個基本的認識。

一、文生圖工作流核心節點

前面入坑鋪墊這篇文章有推薦秋葉大佬的原理講解影片,如果不瞭解也還沒有看過的朋友,推薦去看看,傳送門 B站秋葉大佬的影片
對原理有個大概瞭解的朋友應該知道,大模型是在潛空間處理影像的,人能識別的渲染出來的圖片成為畫素圖。輸入的條件資訊,經過編碼,傳入潛空間,在潛空間裡取樣器去除噪波,最後在經過解碼,輸出畫素影像。所以取樣器是生成圖片的最核心節點之一,下面就從取樣器開始,依次介紹預設工作流中的節點。

1.1 【K取樣器】

取樣器節點有多種,預設工作流中d是最簡單的 KSample。下面說說 K取樣器的引數:

  • 隨機種子:每生成一張圖就會顯示該圖的數值,預設為 0;可選項有每次隨機、固定、每次遞增、每次遞減。
  • 步數:是指潛空間裡的去除噪波迭代步數,一般設定為 25-40 左右。這個越大,所生成的圖細節越多,但是生成圖片需要的時間越長,並且一般超過 35 以後,則效果不是太明顯,步數設定太小,則生成的圖片一般質量越差。需要不斷嘗試,以確定每個大模型最適合的值。
  • CFG: 提示詞相關性。引數越大,圖片效果越接近提示詞。引數越小,AI 發揮空間越大,圖片效果與提示詞差異越大。一般設定在 10 左右就好,預設為 8。
  • 取樣器與排程器:取樣器是與排程器結合一起使用的,取樣器一般使用最佳化後/最新的取樣器:euler_ancestral (簡稱 euler a)、dpmpp_2m 系列、dpmpp_3m 系列,排程器一般選擇 normal 或 Karras
  • 降噪:降噪:和步數有關係,1 就是我們 100% 的按照上方輸入的步數去完成,0.1 就是 10%,一般不用懂,預設填 1 就行。

1.2 【主模型載入器】

K取樣器節點左邊輸入項,需要輸入模型,所以需要新增一個主模型載入器,Load Checkpoint,。
主模型載入器只有一個引數,設定一個主模型。主模型的好壞決定了出圖的整體質量,主要風格。
主模型載入器有三個輸出專案,其中模型輸出,就是 K 取樣器的模型輸入,需要把這兩個點用線連線起來。

1.3 【Clip文字編碼器】

K取樣器左邊的輸入項需要正面條件和負面條件,所謂的正面條件就是透過指令,告訴取樣器,我要生成的圖包含什麼元素,負面條件就是透過指令告訴取樣器,我要生成的圖不包含什麼樣的元素。既然是文生圖,當然是透過輸入文字提示詞傳送指令,注意這裡的提示詞必須是英文,(英文水平不好的同學也不要著急,後面會講解翻譯節點)。但是,正常輸入的文字,不能直接被取樣器識別使用,需要經過編碼,轉換成取樣器能識別的指令。這裡就是透過 CLIP Text Encode (Prompt) conditioning 進行編碼。這裡的兩個 Clip 文字編碼器作用是一樣的,文字編碼器,需要針對模型配合使用的,所以這裡它的輸入端,應該連線到主模型輸出項的 Clip 點。Clip 文字編碼器輸出的條件,分別連線到 K 取樣器輸入端的正面條件和負面條件。

1.4 【空 Latent】

現在 K 取樣器輸入項還差一個 Latent, 這裡有一個空 Latent 作為輸入項。
Empty Latent Image 節點有三個引數,寬度、高度指定了潛空間生成影像的寬高,注意這裡是單位是畫素。批次大小,意思是一次生成多少張圖片。

1.5 【VAE 解碼】

K 取樣器的左邊輸入項和引數都填完了,那 K 取樣器生成圖片之後需要輸出結果,前面提到,潛空間裡的影像是數字訊號的形式,需要經過解碼,轉換成畫素影像,這裡就需要用到 VAE Decode
VAE 解碼器有兩個輸入項, Latent 輸入點連線到 K 取樣器的輸出點。
另一個 AVE 用到的模型,一般主模型都嵌入了VAE模型,連線到主模型即可,預設工作流中,就是直接連線到主模型載入器輸出項的VAE。當然也可以自己主動載入額外的 VAE 模型。

1.6 【儲存影像】

經過 VAE 解碼後的影像,最後輸出到 Save Image 節點可以預覽,並儲存。預設儲存路徑,在 ComfyUI 安裝目錄下的 output 資料夾,
該節點有一個引數,設定儲存檔名的字首。

二、ComfyUI 模型知識

2.1 模型字尾名的區別

模型的字尾名有很多。常見的有 .ckpt.pt.pth.pkl.safetensors等。

CheckPoint 是一個概念,在模型訓練過程中,不能保證一次就訓練成功,中途可能會有各種因素導致失敗,並且訓練成功是一個偽概念,某些演算法模型訓練步數也不是越多越好,過多的訓練會出現過擬合的情況。所以我們能做的是每訓練一定的步數,儲存一次訓練結果,類似於存檔。一方面使用某次訓練的結果,覺得效果符合預期了,就可以停止訓練了,最後將這個模型用於釋出即可。另一方面,中途訓練失敗了,可以從某個 CheckPoint 繼續開始訓練。

  • .ckpt 是 checkpoint 的單詞簡寫,僅僅是單詞簡寫,不要認為 .ckpt 字尾的模型就是主模型,它倆沒有關係。.ckpt 是 TensorFlow 中用於儲存模型引數的格式。TensorFlow 是 Google 釋出的深度學習框架。

  • .pt 是 PyTorch 儲存模型引數的格式。PyTorch 是 Meta(facebook) 釋出的深度學習框架。PyTorch 儲存模型的格式,除了 .pt 之外還有.pth 和 .pkl。.pt 和 .pth 之間沒有本質區別。而 .pkl 僅僅是多了一步使用 python 進行了序列化。

  • .safetensors 從名字可以看出,該格式更加安全。前面提到,可以從某個 CheckPoint 恢復訓練,則需要在該 .ckpt 模型中儲存了一些訓練資訊,比如模型的權重,最佳化器的狀態,Python 程式碼等等,這就容易造成資訊洩露,同時容易被植入惡意程式碼。所以 .ckpt 模型存在不安全因素,同時體積會比較大。.safetensors 是 huggingface 推出的新的模型儲存格式,專門為 StableDiffusion 設計的,它只包含模型權重資訊,模型體積更小,更加安全,載入速度也更快,通常用於模型的最終版本。而 .ckpt 模型適合用於對模型的微調、再訓練。

2.2 模型的分類

ComfyUI 中用到的模型種類非常之多,為了方便理解和學習,我們可以對模型進行分類,大致可以分為以下幾類:
1. checkpoint 主模型、大模型、底模、基礎模型等。透過特定訓練最終形成的一個保持該領域特徵的一種綜合演算法合集,可以精準的匹配你的需求。比如攝影寫實模型、3D模型、二次元模型、室內設計模型等等。Checkpoint 的訓練難度大,需要的資料集大,生成的體積也較大,動則佔用幾個G的磁碟空間。
2. Lora Lora 模型作為大模型的一種補充,能對生成的圖片進行單一特徵的微調,比如生成的人物圖片具有相同的人臉特徵、穿著特定服裝、具備特定畫風等等。Lora 模型體積較小,一般幾十幾百兆, 個人主機就可訓練自己需要的 Lora 模型。
3. VAE VAE 模型可以當作濾鏡,目前針對 Stable Diffusion 主流的 VAE 模型有兩個,二次元使用 kl-f8-anime2VAE, 寫實風格使用 vae-ft-mse-840000-ema-pruned
4. EMBEDDING 文字嵌入模型,應用於提示詞中,是一類經過訓練的提示詞合集,主要用來提升畫質,規避一些糟糕的畫面。比如:badhandv4Bad_picturebad_promptNG_Deep NegativeEasyNegative,這些是經常用到的反向提示詞嵌入模型,可以單獨使用或者組合使用。
5. 其它 比如 controlnet模型、ipadapter模型、faceswap 模型、放大模型等等

對於 Stable Diffusion 的模型,現在也有了眾多版本。常見版本有 SD1.5、SD2.0/2.1、 SDXL,其中 SDXL 模型生成的圖片質量最高,相應地對硬體要求也相對高一點,而 SD1.5 生態最完善,這兩個版本使用的最多。
需要強調的一點是:使用時,不同型別模型的版本需要對應上,比如主模型選擇的是 SDXL 版本,Lora 使用 SD1.5 模型是無法正常執行的。

2.3 模型的存放路徑

ComfyUI 的安裝目錄中有專門存放模型的資料夾。只需要將下載下來的模型放到對應的資料夾下。

2.4 模型的下載地址

推薦兩個主流的模型下載地址:
C 站: https://civitai.com/
抱臉: https://huggingface.co/

這兩個網站中能下載到任何你想要的模型。
C 站查詢模型可以過濾分類

2.5 模型的架構

常見的的模型的架構分類:

Latent Diffusion 模型架構分類

文字編碼 去噪擴散 編碼解碼 變體
SD1.5 CLIP UNET VAE
SDXL ClipL/ClipG UNET VAE Kolors/Pony/Playground
SD3 ClipL/ClipG/T5 Dit VAE DIT混元/AuraFlow/Flux

SD 快速模型

LCM Turbo Lightning
Latent Consistency Models 潛在一致性模型,清華大學研發的一款新一代生成模型,影像生成速度提升 5-10 倍,LCM-SD1.5、LCM-SDXL、LCM-Lora、Animatediff LCM、 SVD LCM 官方在 SDXL1.0基礎上採用了新的蒸餾方案,1-4 步就可以生成高質量影像,網路架構與 SDXL 一致。只適用於 SDXL, SD1.5無該型別模型 位元組跳動在 SD1.0 基礎上結合漸進式對抗蒸餾提煉出來的擴散蒸餾方法,本質上也是 SDXL 模型

關於模型架構的知識比較複雜,我也只是淺淺的瞭解。不懂這部分,對使用 ComfyUI 繪圖影響不大,但是瞭解這些架構資訊,對模型的相容性方面會有一定的認識,有助於解決後面在使用過程中因模型版本、相容性導致的問題。

三、其它常用節點簡單介紹

外掛的安裝方法上一篇文章已經介紹過,不清楚的可以先去看看。

3.1 漢化外掛 AIGODLIKE-COMFYUI-TRANSLATION

使用秋葉整合包,預設是安裝了漢化節點的。作用是將選單、設定等介面元素漢化。安裝完漢化節點後,重啟 ComfyUI ,然後再在設定中找到語言欄,切換為中文即可。

3.2 提示詞翻譯外掛 ComfyUI_Custom_Nodes_AlekPet

前面提到,Clip 文字編碼器需要輸入英文提示詞。如果英文不好,則可以安裝提示詞翻譯外掛。

使用方式:

  1. 滑鼠放在 Clip 文字編碼器節點上,右鍵 -> 轉換為輸入 -> Convert text to input。
    將引數轉換成輸入節點。

  2. 新建一個提示詞翻譯節點。
    在空白處,右鍵 -> 新建節點 -> Alek 節點 -> 文字 -> 翻譯文字(高階)

    或者,在空白處雙擊左鍵,輸入 tanslate 會自動匹配出節點,選擇正確的節點。

  3. 將提示詞翻譯節點與 Clip 文字編碼器連線起來

這樣我們就可以在在提示詞翻譯節點中填入中文提示詞。需要注意的是,該提示詞翻譯外掛使用的是 Google 翻譯,需要外網環境。

使用技巧:

  • 節點是可以複製貼上的。比如需要對負面提示詞新增同樣的節點,直接複製一個就可以了。

3.3 元節點 primitive

圖中分別表示小數、文字、布林值、整數、多行文字。
元節點,簡單來說就是把原始輸入資料原封不動輸出。那這樣有什麼作用呢,最典型的就是複用。

重要說明:一個節點的輸入點只能有一個,但是輸出點可以有多個。

使用技巧:
所有節點的引數和正向節點元件輸入都是可以相互轉化的。很多時候可以把相同的引數,轉換為輸入節點,然後用共同的元元件輸入。

3.4 預覽影像節點 Preview Image

前面說到儲存影像節點,會自動儲存到 output 資料夾下面,有時候我們只是想看看圖片是什麼樣,並不想儲存。比如中間過程的圖片,或者不確定圖片是否使我們想要的。這時候可以使用預覽影像節點。

後記

本文從預設文生圖工作流入手,介紹了其中的核心節點。同時介紹了 Stable Diffusion 中的模型分類。更多節點使用,將在後續文章中介紹,敬請關注。

相關文章