介绍一下 siglip 视觉编码器 和其网络结构

SigLIP视觉编码器结构解析
我们来详细介绍一下 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 的基础架构,但在细节上进行了优化,主要差异如下:
  1. 损失函数适配
    • CLIP 使用 InfoNCE 损失,而 SigLIP 使用 Sigmoid 交叉熵损失,这使得 SigLIP 的视觉编码器在训练时能更高效地处理负样本(不匹配的图像 - 文本对),从而提升特征对齐的精度。
  2. 模型规模扩展
    • SigLIP 提供了更大规模的视觉编码器选项(如 ViT-H/14、ViT-G/14),隐藏层维度和层数更高,能够提取更复杂的视觉特征。
  3. 训练效率优化
    • SigLIP 在训练过程中采用了更高效的并行策略和优化器配置,使得大规模视觉编码器的训练更加可行。

四、总结

SigLIP 的视觉编码器是基于 Vision Transformer(ViT) 的高效特征提取器,核心结构包括输入处理(Patch 分割、嵌入、位置编码)、Transformer 编码器主干(多头自注意力 + 前馈网络)和特征输出([CLS] Token 聚合)。
它通过优化的网络结构和训练策略,能够提取高质量的视觉特征,为 SigLIP 模型的跨模态对齐性能提供了坚实基础。
混合视觉编码器:我们使用SigLIP作为视觉编码器,从视觉输入中提取高级语义特征表示。然而,我们观察到单个SigLIP编码器难以全面解决所有现实世界问题。CLIP家族中的视觉编码器,包括SigLIP,主要是为了语义视觉表示而设计的,但在编码模糊性方面存在挑战,导致视觉上不同的图像由于所谓的“CLIP盲对”而被编码为相似(Tong et al. (2024))。与此同时,CLIP家族模型的输入分辨率相对较低(例如,224×224、336×336、384×384、512×512),这限制了它们处理需要更详细低级特征的任务(如密集OCR视觉定位任务)的能力。为了应对这些限制,最近的研究(Lin et al., 2023b; Tong et al., 2024; Wei et al., 2023)主张整合额外的视觉自监督编码器,以增强多模态模型的视觉定位能力。在此前的研究动机基础上,我们还使用了一个基于SAM-B(Kirillov et al., 2023)的视觉自监督编码器,这是一个预训练的ViTDet(Li et al., 2022)图像编码器,用于处理低级特征,它接受高分辨率1024×1024的图像输入。除了SAM-B编码器外,我们还保留了使用低分辨率384×384图像输入的SigLIP-L视觉编码器。因此,我们的混合视觉编码器结合了SAM-BSigLIP-L编码器,高效地对高分辨率1024×1024的图像进行编码,同时保留了语义详细信息。具体来说,高分辨率的SAM-B视觉编码器首先将图像调整为1024×1024的大小,并生成一个64×64×256的特征图。在SAM-B生成的高分辨率特征图(大小为64×64×256)的情况下,视觉-语言适配器最初将其插值为96×96×256的大小。随后,它使用两个步长为2的卷积层,产生一个24×24×1024的特征图,并将其重塑为576×1024。与此同时,由SigLIP-L生成的低分辨率特征图(大小为576×1024)与高分辨率特征图连接起来,结果得到576个视觉标记,每个标记具有2048个维度。这些视觉标记具有显著的能力,可以增强高级语义视觉识别低级视觉定位任务。然后,它们经过GeLU激活,并通过一个嵌入层与语言模型建立连接。
08-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值