ComfyUI + Multimodal Model + Segment Anything Model 2 + Stable Diffuision + FLUX

話說,AI這條路走得不長也不夠深,但是一直始終沒去碰太多影橡處理,更沒去玩所謂的生圖 ! 除了一直找不太到可以落地變現的應用,主要是一直不太懂為啥要生一堆圖? xD
這篇文略長,因為關於 Stable Diffuision,一步步的從 Stable-Diffusion WebUI 到 diffuser 再到 ComfyUI 接著再到 fluxgym,其實也是花了點時間,一步步做好記錄的 ! 囧

Stable Diffusion 是一種基於擴散模型(Diffusion Model)的圖像生成技術,最初是由 CompVis 團隊開發的。這個模型利用大量的訓練數據來學習如何生成高質量的圖像,並且可以根據輸入的文本提示(prompt)創建具有相應風格或內容的圖片。具備 1. 文本到圖像生成 (Text-to-Image Generation),可以根據使用者提供的文本描述生成相應的圖像;2. 圖像修改 (Image-to-Image Translation),基於給定的圖像進行修改或重繪,例如根據原始圖像結構,生成風格化或改編的圖像版本;3. 修補 (Inpainting),修補功能允許用戶通過提供遮罩,對圖像的特定部分進行修改或替換;4. 擴展圖像 (Outpainting),對圖像內部進行修改,生成圖像邊界以外的區域。
Segment Anything Model 2 (SAM2) 是「Segment Anything」系列模型中的一個進階版本,主要用於圖像分割任務。這個模型的目的是在不需要大量特定標註的情況下,對圖像中的任意物體進行分割。SAM2 對物體的邊界檢測和分割更加靈活和準確,並且可以應用於各種不同的場景和物體類型。
多模態模型 (Multimodal Model):同時處理多種不同形式(模態)的數據的模型。常見的數據模態包括文本、圖像、音頻、視頻等。這類模型的特點是能夠理解和生成不同模態之間的關聯,例如,通過分析圖像內容生成相應的文本描述,或是根據文本描述生成圖像。至於更多說明跟使用案例可以看下方的幾個踩坑連結。
ComfyUI 是一款以圖形化節點 (Node-based) 的方式來運行和管理 Stable Diffusion(SD)模型的應用。與更廣泛使用的 Stable Diffusion WebUI (SD WebUI) 相比,ComfyUI 靈活性更高,允許用戶進行更複雜的工作流程設計,適合需要高度定制的專業用戶,在操作方式和使用者體驗上有很大的差異。而大家最常先玩的應該是 Stable-Diffusion WebUI,傳統的網頁界面 (gradio),主要依賴於表單和按鈕來執行命令,提供一個簡單且功能強大的界面,適合快速生成圖像的需求,使用難度較低,能夠更快速地上手。
  • 圖形化節點界面:ComfyUI 是基於「節點」的架構來進行模型運行和圖像生成的工具。可以直觀地看到每個處理步驟,例如從文本到影像的變換、噪音處理等。讓使用者清楚理解 Stable Diffusion 的運行過程。 
  • 高度自定義:ComfyUI 提供了更靈活的控制,允許用戶設計不同的處理管線。在節點之間建立複雜的工作流程,組合多種模型、濾鏡或效果來創建圖像。 
  • 模塊化設計:ComfyUI 非常適合進行模塊化工作。輕鬆地更換或添加節點,這意味著在生成圖像的每一步可以有不同的選擇,讓結果更加符合需求。 
  • 視覺化工作流程:所有的過程都是可視化的,這對於了解生成圖像的背後邏輯和流程非常有幫助。新手可以通過這種方式了解每個步驟的具體作用,而進階用戶則能夠進行精細調整。
conda create --name comfyui python=3.10.6
conda activate comfyui
git clone https://github.com/comfyanonymous/ComfyUI.git
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu122
cd ComfyUI
pip install -r requirements.txt

python main.py
pytorch version: 2.4.1+cu121
Set vram state to: NORMAL_VRAM
Using pytorch cross attention
To see the GUI go to: http://127.0.0.1:8188
安裝上其實蠻簡單的 ! 我是在 Ubuntu 22.04 上直接這樣做,然後就直接啟動了 !
就在我玩得好配服這東西時,發現它剛好 2024/10/21 出新版了
再來,則是要下載安裝一些模型,至於為啥是這幾個 ? 嗯 ! 總不能直接曝光我微調後的勵害的模型吧 XD
cd models
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.safetensors

wget https://huggingface.co/black-forest-labs/FLUX.1-schnell/resolve/main/flux1-schnell.safetensors

wget https://huggingface.co/stabilityai/sdxl-turbo/resolve/main/sd_xl_turbo_1.0.safetensors

這個則是如果要微調的話一定要注意的 ! 因為網路上都會找到叫你用 ruwnayml/stable-diffusion-v1-5,可是它已經 deprecated 
https://civitai.com/user/account 或者也可以到這個網站,這樣只要按左上方的 models 就可以安裝了
接著來安裝所謂的套件管理器
cd custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager.git

ComfyUI-Manager 是一個用來管理和安裝 ComfyUI 擴充套件的工具,它讓使用者能夠更方便地安裝、更新和管理與 ComfyUI 相容的第三方模組或插件。隨著 ComfyUI 的普及,越來越多開發者創建了各種擴充功能,使得 ComfyUI 的工作流程變得更加強大和多樣化。透過這樣的工具,使用者能快速地擴展 ComfyUI 的功能,無需手動管理各種依賴和文件,並確保擴充功能的安裝和更新過程都自動化且穩定。這樣的整合讓 ComfyUI 在生成式 AI、UI 優化或其他特定需求領域的應用變得更加方便。

git clone https://github.com/heshengtao/comfyui_LLM_party.git
cd comfyui_LLM_party
pip install -r requirements.txt
這個則是意外在網路上找到的一個感覺不錯的工具
comfyui_LLM_party 是一個專為 ComfyUI 設計的擴充模組,主要用途是將大型語言模型(LLM, Large Language Models)整合到 ComfyUI 的工作流程中,使得使用者能夠在 ComfyUI 這個圖形化介面中方便地調用和運行語言模型進行文本生成、對話或其他語言處理任務。comfyui_LLM_party 提供了一個強大的語言模型處理模組,讓使用者可以輕鬆地將 LLM 的功能整合到 ComfyUI 中進行文本生成、語言理解等多種應用,極大提升了工作流程的自動化與多樣性。

有沒有覺得,還是得需要來個中文化 ? XD
cd ComfyUI/custom_nodes
git clone https://github.com/AIGODLIKE/AIGODLIKE-COMFYUI-TRANSLATION.git
最後則是用 cloudflare來做 tunnel 囉 ! 對於不能直接在公網在運作的來說,是個方便的 tunnel 工具
dpkg -i cloudflared-linux-amd64.deb

cloudflared tunnel --url http://localhost:8188

寫到這邊,其實差點忘記這個動作,因為你想讓它生成你想要的東西,勢必就得要做微調了;但微調的效果如何呢?

export MODEL_NAME="stable-diffusion-v1-5/stable-diffusion-v1-5"  預訓練模型
export INSTANCE_DIR="./Images/"  要微調的照片
export OUTPUT_DIR="./Output/"  模型輸出的資料夾
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True

accelerate launch --mixed_precision="fp16" train_dreambooth.py  --pretratance_data_dir=$INSTANCE_DIR --output_dir=$OUTPUT_DIR  --instance_prompt="A photo of a MiNe cigarette box with a yellow warning label and an image of an eye"  --resolution=512  --train_batch_size=1  --gradient_accumulation_steps=4     --learning_rate=2e-6     --lr_scheduler="constant"     --lr_warmup_steps=0     --max_train_steps=1000

完成微調後,可能會有模型檔案格式不相容不是ComfyUI支援的模型格式,或檔案已損壞。所以得轉換一下
python scripts/convert_diffusers_to_original_stable_diffusion.py \ --model_path path_to_diffusers_model \ --checkpoint_path path_to_output_checkpoint \ --use_safetensors

嗯,到這邊,就差不多完成了這個之前聽到跟看到的一個專案,認真覺得很有趣有搞頭,但當時一直沒啥心力去關注技術細節,而且某自以為網紅的還在不投入資源就希望團隊要做出來,還說就找個工讀生來做就行,實在是讓人有點囧;好不容易,最近總算可以開心的四處打磨一下各種有機會落地變現的AI 技術應用,就心血來潮的花了點時間研究了一下ComfyUI + Multimodal Model + Segment Anything Model 2 + Stable Diffuision,想不到原本想做的事,就這樣快速打完收工 XD

到這邊,其實本來就該差不多了,無奈就一直不夠滿意,特別是繼續深挖到 FLUX 相關後,感覺上想要自己做一版 LORA 變得好簡單啊 ! 至少比用 diffuser 來做 dreambooth 簡單?
這邊就不多解釋太多,直接上50張各角度照片,做 LoRA,小練一下就整個屌打前面的了吧 XD


https://civitai.com/models/713258/flux-lora-trainer-on-comfyui

陸續下載這幾個模型
wget https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors -P models/clip/
wget https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors -P models/clip/

wget https://huggingface.co/cocktailpeanut/xulf-dev/resolve/main/ae.sft -P models/vae/

wget https://huggingface.co/cocktailpeanut/xulf-schnell/resolve/main/flux1-schnell.sft -P models/unet/
wget https://huggingface.co/cocktailpeanut/xulf-dev/resolve/main/flux1-dev.sft -P models/unet/



首先當然是先建 conda,官網也有 docker 安裝啦
conda create -n fluxgym python=3.10
conda activate fluxgym

就是陸續先 clone 這兩個 repo 跟安裝依賴
git clone https://github.com/cocktailpeanut/fluxgym
cd fluxgym
git clone -b sd3 https://github.com/kohya-ss/sd-scripts
cd sd-scripts
pip install -r requirements.txt
cd ..
pip install -r requirements.txt

再來就是安裝相關 pytorch,記得注意看自己的 cuda
pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu121

最後就是陸續下載這幾個模型
wget https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/t5xxl_fp16.safetensors -P models/clip/
wget https://huggingface.co/comfyanonymous/flux_text_encoders/resolve/main/clip_l.safetensors -P models/clip/

wget https://huggingface.co/cocktailpeanut/xulf-dev/resolve/main/ae.sft -P models/vae/

wget https://huggingface.co/cocktailpeanut/xulf-schnell/resolve/main/flux1-schnell.sft -P models/unet/
wget https://huggingface.co/cocktailpeanut/xulf-dev/resolve/main/flux1-dev.sft -P models/unet/

整個目錄結構大概是這樣
/models
    /clip
        clip_l.safetensors
        t5xxl_fp16.safetensors
    /unet
        flux1-dev.sft
    /vae
        ae.sft
/sd-scripts
/outputs
/env
app.py
requirements.txt

到這邊理論上就是裝好了,直接在 fluxgym 底下執行 python app.py,預設端口是 7860

按下去之後當然就是 "怒 Train 一發 " 了