当前位置: 首页 > article >正文

ComfyUI流程图生图原理详解

一、引言

ComfyUI 是一款功能强大的工具,在图像生成等领域有着广泛应用。本文补充一点ComfyUI 的安装与配置过程遇到的问题,并深入剖析图生图过程及相关参数,帮助读者快速入门并深入理解其原理。

二、ComfyUI 的安装与配置中遇到的问题

(一)安装过程中的常见问题及解决方法

  1. Python 与 PyTorch 版本兼容性
    ComfyUI 官网推荐使用 Python 3.12,而 Python 3.12 仅支持 PyTorch 2.X 版本。因此,在安装时务必确保所安装的 PyTorch 版本与 Python 版本相互兼容。
  2. PyTorch CUDA 与服务器 CUDA 版本兼容性
    若服务器的 CUDA 版本较低(如 CUDA 11.2),鉴于 PyTorch 的底层算力逻辑通常具有兼容性,可尝试安装 CUDA 11.8 的 PyTorch 版本。
  3. numpy 版本兼容性
    通常建议安装 numpy<2.0,以避免潜在的兼容性问题。

(二)解决运行时的 CUDA 错误
若在运行python main.py时遭遇 CUDA 错误,可通过以下命令解决:

python main.py --listen 0.0.0.0 --disable-cuda-malloc

(三)ComfyUI 工作流与模型管理

  1. 安装插件
    在 ComfyUI 管理器中,插件安装类似于下载 GitHub 项目。一般情况下,插件会自动通过 pip install requirement.txt 来安装所需依赖。
  2. 解决连接问题
    • 网络检查(Linux 系统):若遇到无法连接到 GitHub 项目的问题,首先检查是否能通过正常网络访问 GitHub。若网络连接问题影响插件下载,可尝试使用国内镜像或通过 VPN 解决。
    • 手动下载插件:若仍无法连接 GitHub,可手动下载插件的压缩包,解压后将其放置到 custom_nodes/ 目录下,然后手动执行 pip install requirement.txt 来安装依赖。

三、图生图原理剖析

(一)图生图基础概念

在图生图过程中,checkpoints 由以下几部分组成:

  • model:扩散模型(作用于潜在空间)
  • CLIP:文本编码器
  • VAE:编码器和解码器

在这里插入图片描述

在潜在空间中,会进行扩散操作(对应 K 采样器)。其基本流程为:encode 将输入的文本、图像编码转化为计算机可识别的向量数据,借助 clip 找到与文本对应图像相似的向量,得到文本和图像组合的潜在空间向量。在此基础上进行扩散,在 latent 里得到扩散后的潜在空间向量,最后通过 Decoder(即 vae)解码,转化为人眼可见的图像

在这里插入图片描述

(二)图生图(Image - to - Image)过程及相关参数解析

  1. CLIP 文本编码的正向和负向条件
    CLIP 的文本编码
    CLIP(Contrastive Language - Image Pretraining)模型旨在将文本和图像映射到同一潜在空间,以便相互检索,主要采用对比学习方法进行训练。

    假设文本输入为 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 个词汇。CLIP 使用 Transformer 模型对文本进行编码,得到文本的嵌入向量 z T z_T zT,即:
    z T = f T ( T ) z_T = f_T(T) zT=fT(T)
    其中, f T f_T fT 是文本编码器,负责将文本映射到潜在的嵌入空间。

    正向条件 (Positive Condition)
    正向条件用于衡量生成图像与文本描述的相似性,目标是使生成图像符合输入文本描述。在图生图任务中,正向条件通常由文本来引导生成图像的内容。 正向条件公式为:
    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=logi=1Nexp(zTTzi/τ)exp(zTTzI/τ)
    其中, τ \tau τ 是温度参数,用于控制对比学习的难度。生成过程的目标是通过生成的图像 I ′ I' I 和输入文本描述的语义嵌入 z T z_T zT 来最小化对比损失。

    负向条件 (Negative Condition)
    在图像生成过程中,CLIP 模型通过对比学习最大化正向条件和负向条件之间的相似度差异。负向条件通过增加对比损失中的 “负样本” 来实现,这些负样本通常是与目标图像无关或对立的文本描述。 对比损失公式(包含负向条件)为:
    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=logi=1Nexp(zTTzi/τ)exp(zTTzI/τ)logj=1Mexp(zTTzjneg/τ)exp(zTTzI/τ)
    其中:

    • z T z_T zT 是文本的嵌入向量, z I z_I zI 是图像的嵌入向量。
    • z j neg z_j^{\text{neg}} zjneg 是与文本 T T T 语义不相关的负样本图像的嵌入。
    • τ \tau τ 是温度参数,用于调整正负样本之间的相似度,控制对比学习的难度。
    • M M M是负样本的数量。

负向条件的作用在于,通过 ∑ j = 1 M exp ⁡ ( z T T z j neg / τ ) \sum_{j=1}^M \exp(z_T^T z_j^{\text{neg}} / \tau) j=1Mexp(zTTzjneg/τ) 这部分,增加与目标图像不相关的文本条件,以对比正样本和负样本的相似度。从而使模型在生成图像时,避免生成与负向条件相关的图像表示,确保生成图像与负向文本描述的图像不同。

例如,若输入文本是 “a dog with a hat”(一只戴着帽子的狗),而负向文本是 “a dog without a hat”(一只没有帽子的狗),模型会倾向于生成戴帽子的狗,避免生成没戴帽子的狗,负向条件在此过程中对生成无帽子的狗进行惩罚。

2. K - 采样器与潜在空间的生成

  • K - 采样的过程
    K - 采样器是生成过程的关键部分,负责在潜在空间中从随机噪声开始,逐步调整生成的潜在表示,引导其趋近于目标图像。
    在扩散模型中,K - 采样器控制从潜在空间随机噪声逐步过渡到目标图像的过程,具体包括:

    • 从随机噪声开始:初始时,潜在空间的表示 z z z 接近随机噪声。
    • 逐步去噪:K - 采样器通过控制采样过程中的步数和噪声水平,逐步去除噪声,生成图像。
  • 参数解释
    在 K - 采样器的过程中,以下几个关键参数需要关注:

    • 步数(Steps):步数决定了从噪声到最终图像过渡过程的迭代次数。步数越多,去噪过程越精细,生成图像的细节越丰富。但增加步数也会增加计算开销。
    • 采样器(Sampler):采样器是负责实际去噪过程的算法,常见的有 Euler、Laplacian 等。不同的采样器采用不同的数学策略从噪声中提取图像信息,选择不同的采样器会影响图像生成的速度和质量。
    • 温度参数(Temperature, τ \tau τ:温度参数通常用于控制正向条件与负向条件之间的平衡。增大温度会使模型输出更随机、多样化;减小温度则使输出更稳定,偏向高置信度的内容。
    • 随机种子(Random Seed):随机种子控制生成过程的随机性,确保在相同输入下能够复现生成结果。改变随机种子会导致在相同文本条件下生成不同的图像。
  • K - 采样器公式
    K - 采样器的公式通常涉及生成模型的去噪过程。假设从噪声表示 x T x_T xT 开始,经过 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(xt1xt)=N(xt1;μθ(xt,t),σt2) 其中:

    • μ θ \mu_{\theta} μθ 是神经网络模型,用于预测去噪过程的均值。
    • σ t \sigma_t σt 是时间步长 t t t 对应的标准差,表示噪声的强度。

3. VAE 解码器:从潜在空间生成图像
在这里插入图片描述

VAE 解码器公式

VAE 解码器负责将潜在空间中的表示 z z z 映射回图像空间,将潜在空间中的抽象向量转化为可视化图像。
假设潜在空间中的向量为 z z z,VAE 解码器的目标是将 z z z 转换为最终的图像 x x x,公式为:
x = g θ ( z ) x = g_{\theta}(z) x=gθ(z)
其中, g θ g_{\theta} gθ 是解码器网络,将潜在向量 z z z 映射回图像空间。

VAE 损失函数

VAE 的损失函数由两部分组成:

  • 重构误差:用于衡量生成的图像与真实图像之间的差异。
  • KL 散度:用于衡量潜在变量的分布与标准正态分布之间的差异。

VAE 损失函数如下:
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θ(xz)]DKL(qϕ(zx)p(z))

其中:

  • 第一项是重构误差,反映生成图像与真实图像的相似度。
  • 第二项是 KL 散度,衡量编码器输出的潜在分布与标准正态分布之间的差异。

(三)变分自编码器(VAE)模型的编码与解码过程

  1. 编码过程

    • 神经网络处理:将输入图像 x ( i ) x^{(i)} x(i) 送入作为概率编码器的神经网络(多层感知器 MLP),该网络学习将高维图像数据映射到低维空间,以提取图像的关键特征。
    • 计算分布参数:该神经网络输出近似后验 q ϕ ( z ∣ x ( i ) ) q_{\phi}(z | x^{(i)}) qϕ(zx(i)) 服从的多元高斯分布的均值 μ ( i ) \mu^{(i)} μ(i) 和标准差 σ ( i ) \sigma^{(i)} σ(i),它们是关于数据点 x ( i ) x^{(i)} x(i) 和变分参数 ϕ \phi ϕ 的非线性函数,即: 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ϕ(zx(i))=logN(z;μ(i),σ2(i)I)
    • 重参数化采样:为对采样过程进行梯度计算,采用重参数化技巧。从后验分布中采样 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 乘积。通过均值、标准差与随机噪声的运算,将图像 x ( i ) x^{(i)} x(i) 编码为低维的隐变量 z ( i , l ) z^{(i, l)} z(i,l)
  2. 解码过程

    • 确定解码器输出类型:根据数据类型,若为实值数据, p θ ( x ∣ z ) p_{\theta}(x | z) pθ(xz) 假设为多元高斯分布。
    • 解码神经网络运算:解码器同样使用 MLP。其均值 μ \mu μ 和标准差 σ \sigma σ 由 MLP 计算得出,相关公式为:
      log ⁡ p ( x ∣ z ) = log ⁡ N ( x ; μ , σ 2 I ) \log p(x | z)=\log \mathcal{N}(x ; \mu, \sigma^{2} I) logp(xz)=logN(x;μ,σ2I)
      其中:
      μ = W 4 h + b 4 \mu = W_{4} h + b_{4} μ=W4h+b4,
      log ⁡ σ 2 = W 5 h + b 5 \log \sigma^{2} = W_{5} h + b_{5} logσ2=W5h+b5,
      h = tanh ⁡ ( W 3 z + b 3 ) h = \tanh(W_{3} z + b_{3}) h=tanh(W3z+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 的权重和偏置。将编码得到的隐变量 z ( i , l ) z^{(i, l)} z(i,l) 输入到解码器中,经过一系列运算,最终输出重构图像 x ^ ( i ) \hat{x}^{(i)} x^(i)

在这里插入图片描述

  1. 图像展示
    通过以下流程图直观展示 VAE 模型的编码和解码过程:

在这里插入图片描述在该流程图中:

  • 编码过程:输入图像 x x x 进入编码神经网络(MLP),该网络输出均值 μ \mu μ 和标准差 σ \sigma σ。借助从标准正态分布采样得到的噪声 ε \varepsilon ε ε ∼ N ( 0 , I ) \varepsilon \sim \mathcal{N}(0, I) εN(0,I)),通过重参数化技巧计算得到隐变量 z z z,实现将高维图像数据压缩为低维隐变量表示,完成特征提取。
  • 解码过程:得到的隐变量 z z z 被输入到解码神经网络(MLP)。解码过程是编码的逆过程,尝试从低维隐变量中恢复出原始图像的特征,输出尽可能与输入图像相似的重构图像 x ′ x' x

http://www.kler.cn/a/543566.html

相关文章:

  • 关于 IoT DC3 中设备(Device)的理解
  • 6.深度学习在推荐系统中的应用
  • 记忆增强检索能力的实践
  • Mac上搭建宝塔环境并部署PHP项目
  • 从肠道菌群到炎症因子:读懂疾病的预警信号
  • 【05】RUST常用的集合函数宏类型
  • halcon三维点云数据处理(十四)在3D场景中去除背景的三种方式
  • [SAP ABAP] OO ALV报表练习1
  • 算法与数据结构(合并两个有序数组)
  • OpenCV2D 特征框架 (24)处理矩形框集合函数groupRectangles()的使用
  • 免费体验,一键部署!Alaya NeW应用市场正式上线DeepSeek系列模型
  • Linux零基础快速入门(非常详细),全覆盖Linux的基础知识,看完这一篇就够了。
  • 基于CanMV IDE 开发软件对K210图像识别模块的开发
  • 基于单片机的仓库安防系统(论文+源码)
  • (篇六)基于PyDracula搭建一个深度学习的软件之新版本ultralytics-8.3.28调试
  • 机器学习 - 机器学习模型的评价指标
  • HackerRank C++面试,中等难度题目 - Attribute Parser
  • 【C++高并发服务器WebServer】-18:事件处理模式与线程池
  • 基于Java的分布式系统架构设计与实现
  • Kafka的ISR是什么,HW是什么,怎么保证可靠性,Kafka怎么实现顺序消息?为什么Kafka的broker上的topic越多,效率越慢?
  • 嵌入式WebRTC压缩至670K,目标将so动态库压缩至500K,.a静态库还可以更小
  • 基于SpringBoot+Vue的扶贫助农管理系统
  • ubuntu下ollama/vllm两种方式在本地部署Deepseek-R1
  • 用语言模型探索语音风格空间:无需情感标签的情 感TTS
  • 常用HAL库
  • 【05】RUST常用的集合函数宏类型