本文档介绍了 ComfyUI 的 CLIP 视觉模型系统,该系统负责图像理解中视觉编码器的加载、配置和执行。这些模型将输入图像转换为嵌入向量,可用于多模态工作流中的条件设置。
有关 CLIP 文本模型、T5 和 BERT 等文本编码器信息,请参阅 文本编码器。有关 UNet 注意机制和 Transformer 架构,请参阅 UNet 和注意力。
CLIP 视觉系统由几个关键组件组成,它们协同工作以处理图像并生成嵌入。
CLIP 视觉模型处理流程
来源:comfy/clip_vision.py45-78 comfy/clip_model.py150-244
图像在输入视觉编码器之前会经过标准化的预处理
图像预处理流程
clip_preprocess 函数处理以下步骤:
该系统支持通过 JSON 配置文件加载多种视觉编码器架构
| 模型类型 | 配置文件 | 层数 | 隐藏层大小 | 图像尺寸 |
|---|---|---|---|---|
| CLIP ViT-L | clip_vision_config_vitl.json | 24 | 1024 | 224 |
| CLIP ViT-L-336 | clip_vision_config_vitl_336.json | 24 | 1024 | 336 |
| CLIP ViT-G | clip_vision_config_g.json | 48 | 1664 | 224 |
| CLIP ViT-H | clip_vision_config_h.json | 32 | 1280 | 224 |
| SigLIP-384 | clip_vision_siglip_384.json | 23 | 1152 | 384 |
| SigLIP-512 | clip_vision_siglip_512.json | 23 | 1152 | 512 |
| DINOv2 | dino2_giant.json | - | - | 224 |
load_clipvision_from_sd 函数通过检查 state_dict 结构来自动检测模型架构。
来源:comfy/clip_vision.py106-141 comfy/clip_vision_config_vitl_336_llava.json1-19
视觉模型实现了一个基于 Transformer 的架构,包含几个关键组件
CLIP 视觉架构组件
不同模型类型的关键架构差异
来源:comfy/clip_model.py150-244 comfy/clip_model.py5-74
encode_image 方法通过完整流程处理图像。
图像编码状态机
Output 类提供对不同嵌入类型的字典式访问。
| 输出键 | 描述 | 形状 | 用例 |
|---|---|---|---|
last_hidden_state | 最终 Transformer 层输出 | [B, N, D] | 完整序列特征 |
image_embeds | 池化图像表示 | [B, D] | 全局图像嵌入 |
penultimate_hidden_states | 倒数第二层 | [B, N, D] | 中间特征 |
mm_projected | 多模态投影 | [B, N, 4096] | LLaVA 集成 |
来源:comfy/clip_vision.py68-78 comfy/clip_vision.py14-18
系统采用注册表模式支持不同的编码器架构
这使得轻松扩展新视觉编码器类型成为可能。配置文件中的 model_type 字段决定了要实例化的类。
支持的激活函数
| 功能 | 实现 | 模型 |
|---|---|---|
quick_gelu | a * sigmoid(1.702 * a) | 标准 CLIP |
gelu | torch.nn.functional.gelu | 多种 |
gelu_pytorch_tanh | gelu(a, approximate="tanh") | 较新模型 |
来源:comfy/clip_vision.py39-43 comfy/clip_model.py24-27
CLIP 视觉模型与 ComfyUI 更广泛的模型管理系统集成
模型管理集成
ModelPatcher 系统允许对视觉模型进行动态修改,而不会对基础权重进行永久性更改,支持 LoRA 适配等技术。