動(dòng)漫網(wǎng)站建設(shè)方案項(xiàng)目書目錄白酒最有效的推廣方式
一、引言
ComfyUI 是一款功能強(qiáng)大的工具,在圖像生成等領(lǐng)域有著廣泛應(yīng)用。本文補(bǔ)充一點(diǎn)ComfyUI 的安裝與配置過(guò)程遇到的問(wèn)題,并深入剖析圖生圖過(guò)程及相關(guān)參數(shù),幫助讀者快速入門并深入理解其原理。
二、ComfyUI 的安裝與配置中遇到的問(wèn)題
(一)安裝過(guò)程中的常見(jiàn)問(wèn)題及解決方法
- Python 與 PyTorch 版本兼容性
ComfyUI 官網(wǎng)推薦使用 Python 3.12,而 Python 3.12 僅支持 PyTorch 2.X 版本。因此,在安裝時(shí)務(wù)必確保所安裝的 PyTorch 版本與 Python 版本相互兼容。 - PyTorch CUDA 與服務(wù)器 CUDA 版本兼容性
若服務(wù)器的 CUDA 版本較低(如 CUDA 11.2),鑒于 PyTorch 的底層算力邏輯通常具有兼容性,可嘗試安裝 CUDA 11.8 的 PyTorch 版本。 - numpy 版本兼容性
通常建議安裝 numpy<2.0,以避免潛在的兼容性問(wèn)題。
(二)解決運(yùn)行時(shí)的 CUDA 錯(cuò)誤
若在運(yùn)行python main.py
時(shí)遭遇 CUDA 錯(cuò)誤,可通過(guò)以下命令解決:
python main.py --listen 0.0.0.0 --disable-cuda-malloc
(三)ComfyUI 工作流與模型管理
- 安裝插件
在 ComfyUI 管理器中,插件安裝類似于下載 GitHub 項(xiàng)目。一般情況下,插件會(huì)自動(dòng)通過(guò)pip install requirement.txt
來(lái)安裝所需依賴。 - 解決連接問(wèn)題
- 網(wǎng)絡(luò)檢查(Linux 系統(tǒng)):若遇到無(wú)法連接到 GitHub 項(xiàng)目的問(wèn)題,首先檢查是否能通過(guò)正常網(wǎng)絡(luò)訪問(wèn) GitHub。若網(wǎng)絡(luò)連接問(wèn)題影響插件下載,可嘗試使用國(guó)內(nèi)鏡像或通過(guò) VPN 解決。
- 手動(dòng)下載插件:若仍無(wú)法連接 GitHub,可手動(dòng)下載插件的壓縮包,解壓后將其放置到
custom_nodes/
目錄下,然后手動(dòng)執(zhí)行pip install requirement.txt
來(lái)安裝依賴。
三、圖生圖原理剖析
(一)圖生圖基礎(chǔ)概念
在圖生圖過(guò)程中,checkpoints 由以下幾部分組成:
- model:擴(kuò)散模型(作用于潛在空間)
- CLIP:文本編碼器
- VAE:編碼器和解碼器
在潛在空間中,會(huì)進(jìn)行擴(kuò)散操作(對(duì)應(yīng) K 采樣器)。其基本流程為:encode 將輸入的文本、圖像編碼轉(zhuǎn)化為計(jì)算機(jī)可識(shí)別的向量數(shù)據(jù),借助 clip 找到與文本對(duì)應(yīng)圖像相似的向量,得到文本和圖像組合的潛在空間向量。在此基礎(chǔ)上進(jìn)行擴(kuò)散,在 latent 里得到擴(kuò)散后的潛在空間向量,最后通過(guò) Decoder(即 vae)解碼,轉(zhuǎn)化為人眼可見(jiàn)的圖像。
(二)圖生圖(Image - to - Image)過(guò)程及相關(guān)參數(shù)解析
-
CLIP 文本編碼的正向和負(fù)向條件
CLIP 的文本編碼
CLIP(Contrastive Language - Image Pretraining)模型旨在將文本和圖像映射到同一潛在空間,以便相互檢索,主要采用對(duì)比學(xué)習(xí)方法進(jìn)行訓(xùn)練。假設(shè)文本輸入為 T = { t 1 , t 2 , . . . , t n } T = \{ t_1, t_2,..., t_n \} T={t1?,t2?,...,tn?},其中 t i t_i ti? 是文本中的第 i i i 個(gè)詞匯。CLIP 使用 Transformer 模型對(duì)文本進(jìn)行編碼,得到文本的嵌入向量 z T z_T zT?,即:
z T = f T ( T ) z_T = f_T(T) zT?=fT?(T)
其中, f T f_T fT? 是文本編碼器,負(fù)責(zé)將文本映射到潛在的嵌入空間。正向條件 (Positive Condition)
正向條件用于衡量生成圖像與文本描述的相似性,目標(biāo)是使生成圖像符合輸入文本描述。在圖生圖任務(wù)中,正向條件通常由文本來(lái)引導(dǎo)生成圖像的內(nèi)容。 正向條件公式為:
L contrastive = ? log ? exp ? ( z T T z I / τ ) ∑ i = 1 N exp ? ( z T T z i / τ ) L_{\text{contrastive}} = -\log \frac{\exp(z_T^T z_I / \tau)}{\sum_{i=1}^N \exp(z_T^T z_i / \tau)} Lcontrastive?=?log∑i=1N?exp(zTT?zi?/τ)exp(zTT?zI?/τ)?
其中, τ \tau τ 是溫度參數(shù),用于控制對(duì)比學(xué)習(xí)的難度。生成過(guò)程的目標(biāo)是通過(guò)生成的圖像 I ′ I' I′ 和輸入文本描述的語(yǔ)義嵌入 z T z_T zT? 來(lái)最小化對(duì)比損失。負(fù)向條件 (Negative Condition)
在圖像生成過(guò)程中,CLIP 模型通過(guò)對(duì)比學(xué)習(xí)最大化正向條件和負(fù)向條件之間的相似度差異。負(fù)向條件通過(guò)增加對(duì)比損失中的 “負(fù)樣本” 來(lái)實(shí)現(xiàn),這些負(fù)樣本通常是與目標(biāo)圖像無(wú)關(guān)或?qū)α⒌奈谋久枋觥?對(duì)比損失公式(包含負(fù)向條件)為:
L contrastive = ? log ? exp ? ( z T T z I / τ ) ∑ i = 1 N exp ? ( z T T z i / τ ) ? log ? exp ? ( z T T z I / τ ) ∑ j = 1 M exp ? ( z T T z j neg / τ ) L_{\text{contrastive}} = -\log \frac{\exp(z_T^T z_I / \tau)}{\sum_{i=1}^N \exp(z_T^T z_i / \tau)} - \log \frac{\exp(z_T^T z_I / \tau)}{\sum_{j=1}^M \exp(z_T^T z_j^{\text{neg}} / \tau)} Lcontrastive?=?log∑i=1N?exp(zTT?zi?/τ)exp(zTT?zI?/τ)??log∑j=1M?exp(zTT?zjneg?/τ)exp(zTT?zI?/τ)?
其中:- z T z_T zT? 是文本的嵌入向量, z I z_I zI? 是圖像的嵌入向量。
- z j neg z_j^{\text{neg}} zjneg? 是與文本 T T T 語(yǔ)義不相關(guān)的負(fù)樣本圖像的嵌入。
- τ \tau τ 是溫度參數(shù),用于調(diào)整正負(fù)樣本之間的相似度,控制對(duì)比學(xué)習(xí)的難度。
- M M M是負(fù)樣本的數(shù)量。
負(fù)向條件的作用在于,通過(guò) ∑ j = 1 M exp ? ( z T T z j neg / τ ) \sum_{j=1}^M \exp(z_T^T z_j^{\text{neg}} / \tau) ∑j=1M?exp(zTT?zjneg?/τ) 這部分,增加與目標(biāo)圖像不相關(guān)的文本條件,以對(duì)比正樣本和負(fù)樣本的相似度。從而使模型在生成圖像時(shí),避免生成與負(fù)向條件相關(guān)的圖像表示,確保生成圖像與負(fù)向文本描述的圖像不同。
例如,若輸入文本是 “a dog with a hat”(一只戴著帽子的狗),而負(fù)向文本是 “a dog without a hat”(一只沒(méi)有帽子的狗),模型會(huì)傾向于生成戴帽子的狗,避免生成沒(méi)戴帽子的狗,負(fù)向條件在此過(guò)程中對(duì)生成無(wú)帽子的狗進(jìn)行懲罰。
2. K - 采樣器與潛在空間的生成
-
K - 采樣的過(guò)程
K - 采樣器是生成過(guò)程的關(guān)鍵部分,負(fù)責(zé)在潛在空間中從隨機(jī)噪聲開始,逐步調(diào)整生成的潛在表示,引導(dǎo)其趨近于目標(biāo)圖像。
在擴(kuò)散模型中,K - 采樣器控制從潛在空間隨機(jī)噪聲逐步過(guò)渡到目標(biāo)圖像的過(guò)程,具體包括:- 從隨機(jī)噪聲開始:初始時(shí),潛在空間的表示 z z z 接近隨機(jī)噪聲。
- 逐步去噪:K - 采樣器通過(guò)控制采樣過(guò)程中的步數(shù)和噪聲水平,逐步去除噪聲,生成圖像。
-
參數(shù)解釋
在 K - 采樣器的過(guò)程中,以下幾個(gè)關(guān)鍵參數(shù)需要關(guān)注:- 步數(shù)(Steps):步數(shù)決定了從噪聲到最終圖像過(guò)渡過(guò)程的迭代次數(shù)。步數(shù)越多,去噪過(guò)程越精細(xì),生成圖像的細(xì)節(jié)越豐富。但增加步數(shù)也會(huì)增加計(jì)算開銷。
- 采樣器(Sampler):采樣器是負(fù)責(zé)實(shí)際去噪過(guò)程的算法,常見(jiàn)的有 Euler、Laplacian 等。不同的采樣器采用不同的數(shù)學(xué)策略從噪聲中提取圖像信息,選擇不同的采樣器會(huì)影響圖像生成的速度和質(zhì)量。
- 溫度參數(shù)(Temperature, τ \tau τ):溫度參數(shù)通常用于控制正向條件與負(fù)向條件之間的平衡。增大溫度會(huì)使模型輸出更隨機(jī)、多樣化;減小溫度則使輸出更穩(wěn)定,偏向高置信度的內(nèi)容。
- 隨機(jī)種子(Random Seed):隨機(jī)種子控制生成過(guò)程的隨機(jī)性,確保在相同輸入下能夠復(fù)現(xiàn)生成結(jié)果。改變隨機(jī)種子會(huì)導(dǎo)致在相同文本條件下生成不同的圖像。
-
K - 采樣器公式
K - 采樣器的公式通常涉及生成模型的去噪過(guò)程。假設(shè)從噪聲表示 x T x_T xT? 開始,經(jīng)過(guò) t t t 步去噪生成 x 0 x_0 x0?:
p ( x t ? 1 ∣ x t ) = N ( x t ? 1 ; μ θ ( x t , t ) , σ t 2 ) p(x_{t - 1} | x_t) = N(x_{t - 1}; \mu_{\theta}(x_t, t), \sigma_t^2) p(xt?1?∣xt?)=N(xt?1?;μθ?(xt?,t),σt2?) 其中:- μ θ \mu_{\theta} μθ? 是神經(jīng)網(wǎng)絡(luò)模型,用于預(yù)測(cè)去噪過(guò)程的均值。
- σ t \sigma_t σt? 是時(shí)間步長(zhǎng) t t t 對(duì)應(yīng)的標(biāo)準(zhǔn)差,表示噪聲的強(qiáng)度。
3. VAE 解碼器:從潛在空間生成圖像
VAE 解碼器公式
VAE 解碼器負(fù)責(zé)將潛在空間中的表示 z z z 映射回圖像空間,將潛在空間中的抽象向量轉(zhuǎn)化為可視化圖像。
假設(shè)潛在空間中的向量為 z z z,VAE 解碼器的目標(biāo)是將 z z z 轉(zhuǎn)換為最終的圖像 x x x,公式為:
x = g θ ( z ) x = g_{\theta}(z) x=gθ?(z)
其中, g θ g_{\theta} gθ? 是解碼器網(wǎng)絡(luò),將潛在向量 z z z 映射回圖像空間。
VAE 損失函數(shù)
VAE 的損失函數(shù)由兩部分組成:
- 重構(gòu)誤差:用于衡量生成的圖像與真實(shí)圖像之間的差異。
- KL 散度:用于衡量潛在變量的分布與標(biāo)準(zhǔn)正態(tài)分布之間的差異。
VAE 損失函數(shù)如下:
L VAE = E q [ log ? p θ ( x ∣ z ) ] ? D KL ( q ? ( z ∣ x ) ∥ p ( z ) ) L_{\text{VAE}} = \mathbb{E}_q[\log p_{\theta}(x|z)] - D_{\text{KL}}(q_{\phi}(z|x) \| p(z)) LVAE?=Eq?[logpθ?(x∣z)]?DKL?(q??(z∣x)∥p(z))
其中:
- 第一項(xiàng)是重構(gòu)誤差,反映生成圖像與真實(shí)圖像的相似度。
- 第二項(xiàng)是 KL 散度,衡量編碼器輸出的潛在分布與標(biāo)準(zhǔn)正態(tài)分布之間的差異。
(三)變分自編碼器(VAE)模型的編碼與解碼過(guò)程
-
編碼過(guò)程
- 神經(jīng)網(wǎng)絡(luò)處理:將輸入圖像 x ( i ) x^{(i)} x(i) 送入作為概率編碼器的神經(jīng)網(wǎng)絡(luò)(多層感知器 MLP),該網(wǎng)絡(luò)學(xué)習(xí)將高維圖像數(shù)據(jù)映射到低維空間,以提取圖像的關(guān)鍵特征。
- 計(jì)算分布參數(shù):該神經(jīng)網(wǎng)絡(luò)輸出近似后驗(yàn) q ? ( z ∣ x ( i ) ) q_{\phi}(z | x^{(i)}) q??(z∣x(i)) 服從的多元高斯分布的均值 μ ( i ) \mu^{(i)} μ(i) 和標(biāo)準(zhǔn)差 σ ( i ) \sigma^{(i)} σ(i),它們是關(guān)于數(shù)據(jù)點(diǎn) x ( i ) x^{(i)} x(i) 和變分參數(shù) ? \phi ? 的非線性函數(shù),即: log ? q ? ( z ∣ x ( i ) ) = log ? N ( z ; μ ( i ) , σ 2 ( i ) I ) \log q_{\phi}(z | x^{(i)}) = \log \mathcal{N}(z ; \mu^{(i)}, \sigma^{2(i)} I) logq??(z∣x(i))=logN(z;μ(i),σ2(i)I)
- 重參數(shù)化采樣:為對(duì)采樣過(guò)程進(jìn)行梯度計(jì)算,采用重參數(shù)化技巧。從后驗(yàn)分布中采樣 z ( i , l ) z^{(i, l)} z(i,l),公式為: z ( i , l ) = μ ( i ) + σ ( i ) ⊙ ? ( l ) z^{(i, l)} = \mu^{(i)} + \sigma^{(i)} \odot \epsilon^{(l)} z(i,l)=μ(i)+σ(i)⊙?(l)
其中 ? ( l ) ~ N ( 0 , I ) \epsilon^{(l)} \sim \mathcal{N}(0, I) ?(l)~N(0,I), ⊙ \odot ⊙ 表示元素 - wise 乘積。通過(guò)均值、標(biāo)準(zhǔn)差與隨機(jī)噪聲的運(yùn)算,將圖像 x ( i ) x^{(i)} x(i) 編碼為低維的隱變量 z ( i , l ) z^{(i, l)} z(i,l)。
-
解碼過(guò)程
- 確定解碼器輸出類型:根據(jù)數(shù)據(jù)類型,若為實(shí)值數(shù)據(jù), p θ ( x ∣ z ) p_{\theta}(x | z) pθ?(x∣z) 假設(shè)為多元高斯分布。
- 解碼神經(jīng)網(wǎng)絡(luò)運(yùn)算:解碼器同樣使用 MLP。其均值 μ \mu μ 和標(biāo)準(zhǔn)差 σ \sigma σ 由 MLP 計(jì)算得出,相關(guān)公式為:
log ? p ( x ∣ z ) = log ? N ( x ; μ , σ 2 I ) \log p(x | z)=\log \mathcal{N}(x ; \mu, \sigma^{2} I) logp(x∣z)=logN(x;μ,σ2I)
其中:
μ = W 4 h + b 4 \mu = W_{4} h + b_{4} μ=W4?h+b4?,
log ? σ 2 = W 5 h + b 5 \log \sigma^{2} = W_{5} h + b_{5} logσ2=W5?h+b5?,
h = tanh ? ( W 3 z + b 3 ) h = \tanh(W_{3} z + b_{3}) h=tanh(W3?z+b3?),
θ = { W 3 , W 4 , W 5 , b 3 , b 4 , b 5 } \theta = \{W_{3}, W_{4}, W_{5}, b_{3}, b_{4}, b_{5}\} θ={W3?,W4?,W5?,b3?,b4?,b5?} 是 MLP 的權(quán)重和偏置。將編碼得到的隱變量 z ( i , l ) z^{(i, l)} z(i,l) 輸入到解碼器中,經(jīng)過(guò)一系列運(yùn)算,最終輸出重構(gòu)圖像 x ^ ( i ) \hat{x}^{(i)} x^(i)。
- 圖像展示
通過(guò)以下流程圖直觀展示 VAE 模型的編碼和解碼過(guò)程:
在該流程圖中:
- 編碼過(guò)程:輸入圖像 x x x 進(jìn)入編碼神經(jīng)網(wǎng)絡(luò)(MLP),該網(wǎng)絡(luò)輸出均值 μ \mu μ 和標(biāo)準(zhǔn)差 σ \sigma σ。借助從標(biāo)準(zhǔn)正態(tài)分布采樣得到的噪聲 ε \varepsilon ε( ε ~ N ( 0 , I ) \varepsilon \sim \mathcal{N}(0, I) ε~N(0,I)),通過(guò)重參數(shù)化技巧計(jì)算得到隱變量 z z z,實(shí)現(xiàn)將高維圖像數(shù)據(jù)壓縮為低維隱變量表示,完成特征提取。
- 解碼過(guò)程:得到的隱變量 z z z 被輸入到解碼神經(jīng)網(wǎng)絡(luò)(MLP)。解碼過(guò)程是編碼的逆過(guò)程,嘗試從低維隱變量中恢復(fù)出原始圖像的特征,輸出盡可能與輸入圖像相似的重構(gòu)圖像 x ′ x' x′。