ComfyUI:搭積木一樣構建專屬於自己的AIGC工作流(保姆級教程)

阿里妹導讀
透過本篇文章,你可以瞭解並實踐透過【ComfyUI】構建自己的【文生圖】和【文生動圖】工作流。
一、省流版簡介
透過本篇文章,你可以瞭解並實踐透過【ComfyUI】構建自己的【文生圖】和【文生動圖】工作流,本文所有操作環境和硬體都基於公司所發工作電腦,模型都基於網路開源,無需自己訓練調參。(不過如果你有更強悍的電腦,自己有自己的模型就更好了)。同時我也會給出我自己簡單搭建的【workflow】給大家,方便大家快速使用。

本文所使用電腦配置如下:

二、安裝

1. 前置工具安裝(僅以公司Mac電腦M系列晶片為例)

需要:
  • 帶 Apple silicon 或者 AMD GPUs 的Mac 電腦。
  • MacOS版本 12.3及以上。
  • Python 3.7 或更高版本(實測若想使用一些最新的AIGC能力,如文生影片或GIF,建議安裝Python 3.12)。
  • Xcode command-line tools: xcode-select –install

1.1. PyTorch安裝

PyTorch 是一種用於構建深度學習模型的功能完備框架,是一種通常用於影像識別和語言處理等應用程式的機器學習。使用 Python 編寫,因此對於大多數機器學習開發者而言,學習和使用起來相對簡單。PyTorch 的獨特之處在於,它完全支援 GPU,並且使用反向模式自動微分技術,因此可以動態修改計算圖形。這使其成為快速實驗和原型設計的常用選擇。
我是使用conda來進行安裝的,沒有conda的可以先進行安裝:
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.shsh Miniconda3-latest-MacOSX-arm64.sh
然後透過conda工具來安裝pytorch:
conda install pytorch torchvision torchaudio -c pytorch-nightly
最後執行一個python指令碼來判斷:
import torchif torch.backends.mps.is_available():    mps_device = torch.device("mps")    x = torch.ones(1, device=mps_device)    print (x)else:    print ("MPS device not found.")
如果安裝正確,會有如下輸出:

2. ComfyUI安裝

使用 git 命令下載程式碼庫到本地:
git clone [email protected]:comfyanonymous/ComfyUI.git
然後cd到倉庫主目錄,安裝依賴:
pipinstall-rrequirements.txt
然後執行程式,檢測下載安裝是否正常:
pythonmain.py
可以看到如果安裝正常,會提示你服務已經部署在了本地地址:http://127.0.0.1:8188
請求本地地址,即可訪問ComfyUI:
但是現在,你還沒有配套部署任何的模型,所以此時是跑不起來的。

3. 模型下載&匯入

我自己在用兩個模型下載的網站,兩個都被牆了,需要大家自行科學上網:
HuggingFace:https://huggingface.co/
civitai:https://civitai.com/models
個人體驗下來,HuggingFace更權威更偏學術一些,civital下載更快更偏娛樂一些(civital上有很多有趣的模型,玩起來還是很不錯)。
模型的話,一般會存在兩種字尾格式:
  • safetensors:這種模型一般用的是 numpy 格式儲存,這就意味著它只儲存了張量資料,沒有任何程式碼,載入這類檔案會更安全和更快。
  • ckpt:這種檔案是序列化過的,這意味著它們可能會包含一些惡意程式碼,載入這類模型就可能會帶來安全風險。
在下載完模型後,我們需要將模型匯入到 ComfyUI 的 models 目錄下,這樣 ComfyUI 才能夠載入到對應的模型。
三、使用
1. Comfy介面詳解和基礎使用

1.1. 節點Node

ComfyUI是透過一個個Node,加上Node與Node之間的連結,完成輸入輸出,並最終串聯起整個AI生成的工作流(workflow)。
以【Clip Text Encode(Prompt)】節點為例:
其左側端點是 Input(輸入)端,右側是 Output(輸出)端,節點裡還會有一些配置項,這些配置項我會稱其為 Parameter(引數),引數是可編輯和調整的。透過將連線輸入或輸出到不同Node,可以串起不同的工作流。

1.2. 基礎節點簡介

1.2.1. Load Checkpoint

【Load Checkpoint】,顧名思義,就是載入模型用的。從節點的右邊輸出端點可以看出,Checkpoint 包含了三個部分:MODEL、CLIP 還有 VAE,這三部分其實就是Stable Diffusion 的模型執行的三大步驟,可以說這個節點是所有 Workflow 的起點。
三大步驟:
  • 首先,使用者輸入的 Prompt 會被一個叫 Text Encoder(文字編譯器)的東西編譯成一個個的詞特徵向量。此步驟下會輸出多個等長的向量,每個向量包含 N 個維度,各位可以簡單將其理解為「將文字轉化為機器能識別的多組數字」。
  • 接著,這些特徵向量會和一張隨機圖(可以簡單理解這是一張佈滿電子雪花的圖,或充滿資訊噪聲的圖),一起放到 Image Information Creator 裡。在這一步,機器會將這些特徵向量和隨機圖先轉化到一個 Latent Space(潛空間)裡,然後根據這些特徵向量,將隨機圖「降噪」為一個「中間產物」。你可以簡單理解,此時的「中間產物」是人類看不懂的「圖」,是一堆數字,但此時這個中間產物所呈現的資訊已經是機器演算法可以理解語意的了。
  • 最後,這個中間產物會被 Image Decoder(圖片解碼器)解碼成一張真正的圖片。
類似於降噪然後蝕刻的過程,可以參考 Midjourney 圖片生成的過程:由暗變清晰:

1.2.2. CLIP Text Encode(Prompt) Node

CLIP Text Enocde 節點,CLIP 全稱是 Contrastive Language-Image Pre-training,即對比文字影像預訓練。這個節點主要是輸入 Prompt。一般會有兩個這樣的節點,一個是正向的 Prompt,列你希望在圖片中看到的內容;另一個是負向的 Prompt,列你不希望在圖片中出現的內容。
一般說來,寫 Stable Diffusion 的 prompt 有幾個原則:
  • Prompt 並不是越長越好,儘量保持在 75 個 token(或約 60 個字)以內。
  • 使用逗號分隔。Stable Diffusion 並不懂語法,所以你需要將畫面中的關鍵詞羅列出來,並用逗號分隔。
  • 越重要的詞放在靠前的位置。比如你想要生成一張美麗的風景圖,那麼你可以將 beautiful scenery nature 放在最前面。
另外,還有個小技巧,你可以輸入 (keyword:weight) 方式來控制關鍵詞的權重,比如 (hight building: 1.2 ) 就意味著 hight building 的權重變高,如果填寫的權重數小於 1,則意味著這個詞的權重會變低,生成的圖與這個詞更不相關。

1.2.3. Empty Latent Image Node

這是【潛空間】影像節點。如果你需要調整最終生成的圖片的大小,就需要調整 width(寬)、height(高)這兩個值。而 batch_size 則是設定每次執行時生成的圖片數量,比如你將這個設定成了 4,就意味著每次會生成 4 張圖。

1.2.4. Save Image Node

完成圖片生成後,對著圖片點選右鍵,會看到「Save Image」的選項,點選此按鈕就可以下載生成好的圖片。節點裡的輸入框,則是設定圖片名稱的字首。比如預設是 ComfyUI,那就意味著你儲存的圖片的檔名是 ComfyUI 開頭,後面跟著一串數字。

1.2.5. KSampler Node

KSampler 包含以下引數:
  • seed:這個是隨機種子,它主要用於控制潛空間的初始噪聲。如果你想重複生成一模一樣的圖片。就需要用到這個隨機種子。需要注意種子和 Prompt 都要相同,才能生成一模一樣的圖。
  • control_after_generate:每次生成完圖片後,上面的 seed 數字都會變化,而這個配置項,則是設定這個變化規則:randomize(隨機)、increment(遞增 1)、decrement(遞減 1)、fixed(固定)。
  • step:取樣的步數。一般步數越大,效果越好,但也跟使用的模型和取樣器有關。
  • cfg:全稱 Classifier Free Guidance,可以參考這篇介紹:[論文理解] Classifier-Free Diffusion Guidance:https://sunlin-ai.github.io/2022/06/01/Classifier-Free-Diffusion.html
  • sampler_name:取樣器名稱。你可以透過這個來設定取樣器演算法。
  • scheduler:排程器主要是控制每個步驟中去噪的過程。你可以透過它選擇不同的排程演算法,有些演算法是選擇每一步減去相同數量的噪聲,有些則是每一步都儘可能去掉多的噪聲。
  • denoise:表示要增加多少初始噪聲,1 表示全部。一般文生圖你都可以預設將其設定成 1。

1.3. 連線

連線是具有規則的:
  • 同類相連:只有同類才能相互連線起來,比如 KSampler 左側的 model 端點,就只能跟另一個 MODEL 輸出點相連。或者跟具象點說,只有同顏色的端點能相連,如果你將 CLIP Text Encode 右邊橙色的點,連到 KSampler 的紫色點 model 上是不可能的。因為他們型別不一樣。橙色點只能跟橙色點連。另外,還有一個技巧,當你點選端點並拉出一條線的時候,只有那些能連線的線會高亮出來,不能連的會變暗。
  • 左進右出:比如 KSampler 左邊的 model、positive、negative、latent_image 都是是輸入端,輸出端是右邊的 LATENT。你可以將其理解為一個函式,左邊輸入數字,右邊是輸出。那也就意味著你不能將一個節點右邊的輸出端,連到另一節點右邊的輸出端。
  • 一進多出:一個輸入端只能和另一個節點的輸出端相連,沒法和多個輸出端相連。比如上圖中的 KSampler 的 positive 端點,只能和一個 CLIP Text Encode 相連,沒法同時連多個。但一個輸出端,能和多個輸入端相連。還是上面那個例子,一個 CLIP Text Encode 可以和多個 KSampler 相連,比如可以和 KSampler A 的 positive 端連,也可以和 KSampler B 的 negative 點連,最後出兩張圖。
其實更好的做法是實操起來,報錯提示還是蠻清晰的,根據錯誤去改進自己的工作流。

1.4. 工作流WorkFlow的儲存和載入

2. 進階使用

2.1. 引入LoRA

總結基於Stable Diffusion進行圖片生成的過程,就是【降噪】,在降噪的過程中,還有一個重要的環節就是【Noise Predictor】。
Noise Predictor 是如何工作的呢?簡單理解就是進行了一系列的運算,運算所使用到的演算法被稱為 UNet 演算法。UNet 的演算法大概是這樣的:
左側是輸入,右側是輸出,資料輸入後會經過一些列的運算,圖中的長條的柱子就是一步運算。我們可以透過改變柱子裡的引數權重,從而改變輸出結果,最終改變生成圖片的效果。但改變每根柱子裡的結果相對比較複雜。
於是研究人員就開始尋找一種更簡單的方法,最終他們發現,如果將引數注入到每一層函式中,也能達到改變圖片的效果,這個方法就是 LoRA(Low-Rank Adaptation)。
LoRA 是在不破壞任何一層函式,而是將引數注入到原有的每一層中。這樣的好處是不破壞原有的模型,即插即用,並且模型的大小也比較小。視覺化的效果如下:
用類比來理解,可以將 LoRA 視為類似相機「濾鏡」。
LoRA模型下載好後,放置在如下的目錄裡:

2.2. 外掛的安裝和Custom Node的使用。

強大的ComfyUI不僅能支援文生圖、圖生圖,還可以透過外掛和Custom Node的引入,實現文生影片等複雜工作流。

2.2.1. 安裝外掛

我自己的使用過程中,安裝了一些比較實用的外掛,也推薦給大家。
首先cd到 custom_nodes 目錄下,然後執行以下命令:
git clone https://github.com/ltdrdata/ComfyUI-Manager git clone https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Translation.gitgit clone https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
然後重新載入 ComfyUI的Web介面,會發現右側的模組多了幾個功能,此時就代表外掛生效了:
這個時候直接點選【Manager】,即可對ComfyUI進行視覺化操作管理:
在這個介面下,可以進行Custom Node的安裝升級,以及模型的下載等。

2.3. 文生動圖

文生動圖推薦一個外掛:
也可以自己手動下載安裝:
ComfyUI-AnimateDiff-Evolved:https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
大致工作流如下:
外掛需要的模型,則安放在外掛自己的目錄下:
我這臺電腦在batch_size 過高時候會爆棧,如果你的電腦效能更強勁的話,可以生產更好看的動圖:
四、效果展示&工作流分享
1. 效果展示:文生圖
2. 效果展示:文生動圖
我的工作電腦只有 16 G記憶體,所以只能生成一些幀率不高效果一般的動圖,大家可以換高效能電腦試試。
3. 工作流分享

3.1 文生圖工作流:

text-2-img-workflow:https://bxbc.oss-cn-shanghai.aliyuncs.com/aigc/resource/comfyui/workflow/base-workflow-with-lora-v2.json

3.2 文生動圖工作流:

text-2-gif-workflow:https://bxbc.oss-cn-shanghai.aliyuncs.com/aigc/resource/comfyui/workflow/share-text2gif.json
五、一些總結
1. 關於環境
使用comfyUI或者跑一些demo的時候,建議用conda建立一個虛擬環境,這樣你在進行一些python包安裝的時候,會很大程度上去避免解決包衝突問題,這會讓你少一些煩躁。
2. 關於使用外掛遇到問題
在AIGC時代,更能體會到開源精神的可貴。當我使用文生動圖外掛【ComfyUI-AnimateDiff-Evolved】:https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved時,剛開始老是跑不出一張有效的動圖,自己排查問題無果後,我去作者的git倉庫下提了 issue,沒想到很快獲得瞭解答。作者近期更新了自己的程式碼來適配 Mac pytorch 的 bug,還是很感動有這樣的開源貢獻者。因為問題得到了解決,我也得以完成了這篇ata最後的拼圖,在此感謝作者。
3. 關於AI
很慶幸我們這樣的工作,能夠在第一線去體驗AI給我們帶來的驚喜和成果,也相信隨著AI技術的發展,能讓每個人都慢慢享受到AI技術進步帶來的方便。
全面安全保障:等級保護合規解決方案
阿里雲安全整合雲平臺等保測評經驗和雲安全產品優勢,聯合等保諮詢、等保測評機構等合作資源,提供一站式等保測評服務,覆蓋等保定級、備案、建設整改及測評階段,助您快速透過等保測評。   
點選閱讀原文檢視詳情。

相關文章