這篇文略長,話說,書讀得少,在AI這條路其實也還走得不長更不夠深,比起分享新的 AI 理論或各種技術報導來蹭流量,好像比較適合幫忙找到可以實際落地變現的AI應用;另外,始終也沒去碰太多影像處理 (不知道OCR算不算? XD),更沒去玩所謂的生圖 !? xD 但這篇就從 Stable Diffuision 跟 Segment Anything Model,再一步步的從 Stable-Diffusion WebUI 到 HuggingFace 的 Diffuser 再到 ComfyUI 接著是 Flux 再到 fluxgym,其實也是花了點時間,找到了可能的應用,那就好好做個記錄吧 ! 囧
- Stable Diffusion:是一種基於擴散模型 (Diffusion Model) 的圖像生成技術,最初是由 CompVis 團隊開發的。這個模型利用大量的訓練數據來學習如何生成高質量的圖像,並且可以根據輸入的文本提示 (prompt) 創建具有相應風格或內容的圖片。具備 1. 文本到圖像生成 (Text-to-Image Generation),可以根據使用者提供的文本描述生成相應的圖像;2. 圖像修改 (Image-to-Image Translation),基於給定的圖像進行修改或重繪,例如根據原始圖像結構,生成風格化或改編的圖像版本;3. 修補 (Inpainting),修補功能允許用戶通過提供遮罩,對圖像的特定部分進行修改或替換;4. 擴展圖像 (Outpainting),對圖像內部進行修改,生成圖像邊界以外的區域。
- Flux:由Black Forest Labs推出的一款最新的文本生成圖像模型,這個團隊是由從Stable Diffusion離開的原班人馬,創立的全新用於AI繪圖的大模型。 Flux AI模型以其卓越的視覺品質、精確的提示詞遵循、多樣化的風格和複雜場景生成能力而聞名。它包含三個版本:商業用途設計的閉源模型 FLUX.1 [pro]、開源的引導蒸餾模型,適用於非商業應用的 FLUX.1 [dev] 和專為本地開發和個人使用設計的的 FLUX.1 [schnell]。Flux研發官方團隊重磅發表了最新的Flux生態工具:FLUX.1工具。官方表示:這是一套為FLUX.1文生圖模型進一步增強可控制和可操作性的模型,這將使得生產影像的修改和再次延伸創作成為可能。在本次發布中FLUX.1工具一共包含四個不同的特性模型,將作為FLUX.1 [dev]模型系列中的開放可存取模型發布,並且可在BFL API中作為FLUX.1 [pro]的補充使用
- FLUX.1 Fill @ FLUX.1 Tools:根據文字描述和二進位遮罩編輯和擴展真實圖像和生成的圖像。
- FLUX.1 Depth @ FLUX.1 Tools:從輸入影像和文字提示中提取的深度圖訓練模型,以實現結構引導。
- FLUX.1 Canny @ FLUX.1 Tools:從輸入影像和文字提示中提取的Canny 邊緣實現結構引導。
- FLUX.1 Redux @ FLUX.1 Tools:允許混合和重新建立輸入影像和文字提示的適配器。
- Shuttle 3 Diffusion:使用Flux.1 Schnell 作為其基礎模型,該模型在訓練過程中部分去蒸餾。當使用超過10步時,它進入“細化模式”,增強影像細節而不改變構圖。這裡是透過採用特殊的訓練方法克服了Schnell 系列模型的限制,從而實現了細節和顏色的改進。
- PixelWave:是一款經過精細調校的 FLUX 模型,專為藝術和照片風格的圖像生成而設計。該模型採用 FLUX 1-dev 非商業許可證,僅限於非商業用途。
- CLIPSeg (基於語意的分割):CLIPSeg是 CLIP(Contrastive Language-Image Pre-training)的擴展,用於基於自然語言的語意分割。它將文字與影像結合,實現目標區域的分割。繼承了 CLIP 的多模態對齊能力,結合了分割模型,能夠根據文字指令輸出目標區域的掩膜。從影像中分割出符合語意描述的區域 (例如:「找出圖片中的狗」)。
- SAM (Segment Anything Model) / Segment Anything Model 2 (SAM2) (通用影像分割):「Segment Anything」系列模型中的一個進階版本,主要用於圖像分割任務。這個模型的目的是在不需要大量特定標註的情況下,對圖像中的任意物體進行分割。SAM2 對物體的邊界檢測和分割更加靈活和準確,並且可以應用於各種不同的場景和物體類型。SAM 側重於精確地分割出目標區域,而不強調與文字的直接對應。
- Grounding DINO (多模態物體檢測):結合了文字與影像資訊,用於基於自然語言的物體檢測與定位。簡單來說,它可以理解人類提供的描述,並在影像中檢測對應的物體。強調文字和影像的語義理解,適用於需要精準地將文字描述與影像中的目標物體相連結的應用場景。關注在文字導向的物體偵測 (例如:「找出影像中穿紅色衣服的人」)。
- Grounded SAM / Grounded-SAM-2:將 Grounding DINO 與 Segment Anything Model (SAM) 結合,創造出一個能基於文字提示進行物件檢測與分割的新模型。不僅能檢測物體,還能直接分割出目標物體的區域,實現「文字提示 -> 影像目標檢測與分割」的完整流程。相比單獨的 Grounding DINO 提供語意驅動的目標檢測 或 SAM 提供精細分割功能;Grounded SAM 的優勢在於它將檢測結果與分割結合,打造更靈活、強大的工具,特別適合需要文字指令快速處理影像的應用。
- PuLID:ComfyUI-PuLID-Flux 是一個在 ComfyUI 中實現 PuLID(Pure and Lightning ID Customization via Contrastive Alignment)技術的專案,旨在透過 FLUX 模型進行高效的身份定制。
- OmniGen:一個統一的圖像生成模型,可以使用它來執行各種任務,包括但不限於文字到圖像生成、主題驅動生成、身份保留生成、圖像編輯和圖像條件生成。 OmniGen不需要額外的外掛程式或操作,它可以根據文字提示自動識別輸入影像中的特徵(例如所需物件、人體姿勢、深度映射)。
- 多模態模型 (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/cu121
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
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 優化或其他特定需求領域的應用變得更加方便。
有沒有覺得,還是得需要來個中文化 ? XD
cd ComfyUI/custom_nodes
git clone https://github.com/AIGODLIKE/AIGODLIKE-COMFYUI-TRANSLATION.git
是一種無須額外調參的身份客製化方法。它在保持高身份保真度的同時,有效減少了對原始模型行為的干擾,為用戶提供了一種高效且靈活的換臉解決方案。
到 custom_nodes 裡
git clone https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes.git
git clone https://github.com/balazik/ComfyUI-PuLID-Flux
接著要做一些資料夾來放相關的模型
mkdir .cache/huggingface/hub/models--QuanSun--EVA-CLIP/refs
新增這個檔案
vi .cache/huggingface/hub/models--QuanSun--EVA-CLIP/refs/main
內容為
11afd202f2ae80869d6cef18b1ec775e79bd8d12
繼續再做這些資料夾
~/ComfyUI$ mkdir .cache/huggingface/hub/models--QuanSun--EVA-CLIP/snapshots/11afd202f2ae80869d6cef18b1ec775e79bd8d12/
wget https://huggingface.co/QuanSun/EVA-CLIP/resolve/main/EVA02_CLIP_L_336_psz14_s6B.pt -P .cache/huggingface/hub/models--QuanSun--EVA-CLIP/snapshots/11afd202f2ae80869d6cef18b1ec775e79bd8d12/
PulidFluxInsightFaceLoader (參考連結)
https://huggingface.co/MonsterMMORPG/tools/resolve/main/antelopev2.zip
理論上這個會自己下載,但是它會解壓後放錯,所以要自己去搬移
cd models/insightface/models/antelopev2
cp antelopev2/* ./
forward_orig() takes from 7 to 9 positional arguments but 10 were given (參考連結)
在 Comfyui 目錄底下退回
git reset --hard cc9cf6d
如果碰到這個問題可以參考這個 issue
New ComfyUI commit broke compatibility : "TypeError: forward_orig() takes from 7 to 9 positional arguments but 10 were given" #53
最後則是用 cloudflare來做 tunnel 囉 ! 對於不能直接在公網對外運作來說,是個方便的工具
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -O cloudflared.deb
sudo dpkg -i cloudflared.deb
cloudflared tunnel --url http://localhost:8188
或者也可以使用 ngrok 啦
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null \
&& echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
| sudo tee /etc/apt/sources.list.d/ngrok.list \
&& sudo apt update \
&& sudo apt install ngrok
ngrok config add-authtoken 你的token
ngrok http 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/black-forest-labs/FLUX.1-schnell/resolve/main/ae.safetensors -P models/vae/
wget https://huggingface.co/black-forest-labs/FLUX.1-schnell/resolve/main/flux1-schnell.safetensors -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/black-forest-labs/FLUX.1-schnell/resolve/main/ae.safetensors -P models/vae/
wget https://huggingface.co/black-forest-labs/FLUX.1-schnell/resolve/main/flux1-schnell.safetensors -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,感謝滑到這邊,接著想看那方面的應用落地呢 ?