我们来详细介绍一下 SigLIP(Sigmoid Loss for Language-Image Pre-training) 的视觉编码器及其网络结构。
一、SigLIP 视觉编码器的核心定位
SigLIP 是 OpenAI 在 2023 年提出的多模态预训练模型,是 CLIP 的改进版本,核心创新是用 Sigmoid 交叉熵损失(Sigmoid Cross-Entropy Loss) 替代了 CLIP 的 InfoNCE 损失,从而更高效地处理大规模多模态数据。
其视觉编码器的核心作用是:从图像中提取高质量的视觉特征向量,并与文本编码器输出的文本特征向量进行对齐,最终实现更精准的跨模态匹配(如图像分类、检索等任务)。
二、SigLIP 视觉编码器的网络结构
SigLIP 的视觉编码器完全基于 Vision Transformer(ViT)架构,并在 CLIP 的 ViT 基础上进行了优化,整体结构清晰且高效。其网络结构可分为以下几个关键部分:
1. 输入处理模块
- 图像预处理:
- 首先将输入图像 resize 到固定尺寸(如 224×224、336×336 等,根据模型规模调整)。
- 进行标准化处理(减去均值、除以标准差),确保输入数据分布稳定。
- Patch 分割:
- 将预处理后的图像分割为一个个固定大小的 图像块(Patch),例如 16×16 或 32×32(常用 16×16)。
- 假设图像尺寸为 H×W,Patch 大小为 P×P,则会得到 (H/P)×(W/P) 个 Patch(例如 224×224 图像用 16×16 Patch 会得到 14×14=196 个 Patch)。
- Patch 嵌入(Patch Embedding):
- 每个 Patch(维度为 P×P×3,3 为 RGB 通道)通过一个卷积层(卷积核大小 P×P,步长 P)转换为一个一维向量(称为 Patch Token)。
- 卷积层的输出通道数即为模型的 隐藏层维度(d_model),例如 ViT-B/16 的 d_model 为 768,ViT-L/14 的 d_model 为 1024。
- 添加位置编码(Positional Encoding):
- 由于 Transformer 架构本身不包含位置信息,需要为每个 Patch Token 手动添加位置编码(通常是可学习的一维向量),以表示 Patch 在图像中的空间位置。
- 位置编码的维度与 Patch Token 一致(d_model),添加方式为直接相加(Token + Positional Encoding)。
- 添加分类 Token([CLS]):
- 在所有 Patch Token 序列的开头,添加一个特殊的 [CLS] Token(维度为 d_model),用于最终的全局特征聚合(类似 BERT 中的 [CLS] Token)。
- 此时,输入到 Transformer 编码器的序列长度为:1([CLS]) + N(Patch 数量),例如 1 + 196 = 197。
2. Transformer 编码器主干网络
这是视觉编码器的核心部分,由 多层 Transformer 块(Transformer Block) 堆叠而成(层数根据模型规模调整,例如 ViT-B/16 为 12 层,ViT-L/14 为 24 层)。
每个 Transformer Block 包含两个关键子模块:
- 多头自注意力(Multi-Head Self-Attention, MHSA):
- 作用:让每个 Token(包括 [CLS] 和 Patch Token)能够关注到序列中其他 Token 的信息,从而捕捉图像的全局依赖关系(例如,“猫的尾巴” 与 “猫的身体” 之间的关联)。
- 原理:将输入的 Token 向量通过线性层投影为 Query、Key、Value 三个向量,然后通过多头机制并行计算多个注意力头,最后将结果拼接并线性变换得到输出。
- 优势:相比 CNN 的局部感受野,自注意力机制能更灵活地捕捉长距离依赖,适合处理复杂场景的图像。
- 前馈神经网络(Feed-Forward Network, FFN):
- 作用:对自注意力模块的输出进行非线性变换,增强模型的表达能力。
- 结构:通常包含两层全连接层,中间使用非线性激活函数(如 GELU),且两层之间的维度会扩大(例如,从 d_model 扩大到 4×d_model,再缩小回 d_model)。
- 归一化与残差连接:
- 每个子模块(MHSA 和 FFN)的输入和输出都添加了 残差连接(Residual Connection),用于缓解深层模型的梯度消失问题。
- 同时,在每个子模块前后都使用 层归一化(Layer Normalization),标准化输入数据,提升模型的稳定性和训练效率。
3. 特征输出模块
- 经过多层 Transformer 编码器处理后,序列中的每个 Token 都得到了丰富的上下文信息。
- 视觉编码器的最终输出为 [CLS] Token 对应的向量(维度为 d_model),这个向量包含了整个图像的全局语义信息,将用于与文本编码器输出的文本特征向量进行对比学习。
三、SigLIP 视觉编码器与 CLIP 视觉编码器的差异
SigLIP 的视觉编码器整体沿用了 CLIP 中 ViT 的基础架构,但在细节上进行了优化,主要差异如下:
- 损失函数适配:
- CLIP 使用 InfoNCE 损失,而 SigLIP 使用 Sigmoid 交叉熵损失,这使得 SigLIP 的视觉编码器在训练时能更高效地处理负样本(不匹配的图像 - 文本对),从而提升特征对齐的精度。
- 模型规模扩展:
- SigLIP 提供了更大规模的视觉编码器选项(如 ViT-H/14、ViT-G/14),隐藏层维度和层数更高,能够提取更复杂的视觉特征。
- 训练效率优化:
- SigLIP 在训练过程中采用了更高效的并行策略和优化器配置,使得大规模视觉编码器的训练更加可行。
四、总结
SigLIP 的视觉编码器是基于 Vision Transformer(ViT) 的高效特征提取器,核心结构包括输入处理(Patch 分割、嵌入、位置编码)、Transformer 编码器主干(多头自注意力 + 前馈网络)和特征输出([CLS] Token 聚合)。
它通过优化的网络结构和训练策略,能够提取高质量的视觉特征,为 SigLIP 模型的跨模态对齐性能提供了坚实基础。
SigLIP视觉编码器结构解析
1万+

被折叠的 条评论
为什么被折叠?



