這篇文略長,話說,書讀得少,在AI這條路其實也還走得不長更不夠深,比起分享新的 AI 理論或各種技術報導來蹭流量,好像比較適合幫忙找到可以實際落地變現的AI應用;另外,始終也沒去碰太多影像處理 (不知道OCR算不算? XD),更沒去玩所謂的生圖 !? xD 但這篇就從 Stable Diffuision 跟 Segment Anything Model,再一步步的從 Stable-Diffusion WebUI 到 HuggingFace 的 Diffuser 再到 ComfyUI 接著是 Flux 再到 fluxgym,其實也是花了點時間,找到了可能的應用,那就好好做個記錄吧 ! 囧 PS:2024/10/22 Introducing Stable Diffusion 3.5
Stable Diffusion:是一種基於擴散模型 (Diffusion Model) 的圖像生成技術,最初是由 CompVis 團隊開發的。這個模型利用大量的訓練數據來學習如何生成高質量的圖像,並且可以根據輸入的文本提示 (prompt) 創建具有相應風格或內容的圖片。具備 1. 文本到圖像生成 (Text-to-Image Generation),可以根據使用者提供的文本描述生成相應的圖像;2. 圖像修改 (Image-to-Image Translation),基於給定的圖像進行修改或重繪,例如根據原始圖像結構,生成風格化或改編的圖像版本;3. 修補 (Inpainting),修補功能允許用戶通過提供遮罩,對圖像的特定部分進行修改或替換;4. 擴展圖像 (Outpainting),對圖像內部進行修改,生成圖像邊界以外的區域。
Flux AI:由Black Forest Labs推出的一款最新的文本生成圖像模型,這個團隊是由從Stable Diffusion離開的原班人馬,創立的全新用於AI繪圖的大模型。 Flux AI模型以其卓越的視覺品質、精確的提示詞遵循、多樣化的風格和複雜場景生成能力而聞名。它包含三個版本:商業用途設計的閉源模型 FLUX.1 [pro]、開源的引導蒸餾模型,適用於非商業應用的 FLUX.1 [dev] 和專為本地開發和個人使用設計的的 FLUX.1 [schnell]。
Segment Anything Model 2 (SAM2):「Segment Anything」系列模型中的一個進階版本,主要用於圖像分割任務。這個模型的目的是在不需要大量特定標註的情況下,對圖像中的任意物體進行分割。SAM2 對物體的邊界檢測和分割更加靈活和準確,並且可以應用於各種不同的場景和物體類型。
多模態模型 (Multimodal):同時處理多種不同形式(模態)的數據的模型。常見的數據模態包括文本、圖像、音頻、視頻等。這類模型的特點是能夠理解和生成不同模態之間的關聯,例如,通過分析圖像內容生成相應的文本描述,或是根據文本描述生成圖像。至於更多說明跟使用案例可以看下方的幾個踩坑連結。
2023/08 公司添購 RTX 6000 Ada 48 GB * 2 和 A 100 80GB * 4
2024/05 公司添購RTX 6000 Ada 48 GB * 8 * 2
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
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
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu122
cd ComfyUI
pip install -r requirements.txt
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 準備要出新版了
ComfyUI V1 Release:https://blog.comfy.org/comfyui-v1-release/
再來,則是要下載安裝一些模型,至於為啥是這幾個 ? 嗯 ! 總不能直接曝光我微調後的勵害的模型吧 XD 但其實繼續往下看,好像也用不到sd_xl_base_1.0_0、sd_xl_turbo_1.0 這兩個
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/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0_0.9vae.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 就可以安裝了
接著來安裝所謂的套件管理器
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
git clone https://github.com/AIGODLIKE/AIGODLIKE-COMFYUI-TRANSLATION.git
最後則是用 cloudflare來做 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 簡單?
然後這是官方放出來的 LoRA:https://huggingface.co/XLabs-AI/flux-lora-collection
當然也是可以到所謂的 C 站去下載,https://civitai.com/models;這邊補充一下在那下載和放那
comfyanonymous/flux_text_encoders 這裡面有需放在 放在 /models/clip 的 clip_l.safetensors、t5xxl_fp16.safetensors、t5xxl_fp8_e4m3fn.safetensors;另外,FLUX.1 [schnell] 裡有放在 /models/vae 的 ae.safetensors (vae) 和 放在 /models/unet 的 flux1-dev.safetensors (unet)
這邊就不多解釋太多,直接上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 一發 " 了
不過,fluxgym因為需一直開著網頁,陸續幾次都會自己莫名 kill,所以試試這個 https://github.com/ostris/ai-toolkit
但麻煩的是ai-toolkit只能單GPU運算,用力摧下去,嚇死人的久
20513/200000 [26:56:19<214:59:14, 4.31s/it, lr: 1.0e-04 loss: 4.162e-01]
30190/50000 [26:32:23<16:26:37, 2.99s/it, lr: 1.0e-04 loss: 3.839e-01]
25666/30000 [26:16:57<3:01:35, 2.51s/it, lr: 1.0e-04 loss: 3.208e-01]
git clone https://github.com/ostris/ai-toolkit.git
cd ai-toolkit
git submodule update --init --recursive
pip install -r requirements.txt
pip install --upgrade accelerate transformers diffusers huggingface_hub
後來就又回頭研究一下 fluxgym 有沒有可以 cmd 模式訓練,官方 github 並沒詳提
但看起來就是把你那個 kill 掉或之前成功的資料夾裡的 train.sh cp 到 fluxgym 根目錄
然後,改一下 train.sh 跟 dataset.toml,以及如果要限定特定的 GPU 做運算的話,改這個 ~/.cache/huggingface/accelerate/default_config.yaml 然後跑起來就舒服多了
1160/125000 [52:48<93:57:29, 2.73s/it, avr_loss=0.311]
train.sh
--max_train_epochs
--save_every_n_epochs
--output_dir
--output_name
dataset.toml
num_repeats = 100
accelerate/default_config.yaml
gpu_ids 跟 num_processes
然後就是微調後的結果,由上而下可以看出整個越來越像了 ! 😁
Unleashing the Power: NVIDIA GPUs for Object Segmentation and Influencer Matching in Sponsored Products and Interior Design
最後放上比較新的相關 repo,感謝滑到這邊,接著想看那方面的應用落地呢 ?