【VLM】SigLIp: Sigmoid Loss for Language Image Pre-Training

PaperLink: https://arxiv.org/pdf/2303.15343
code: https://github.com/mlfoundations/open_clip/blob/main/src/open_clip/loss.py
参考: https://zhuanlan.zhihu.com/p/709572492

概要

CLIP面临的挑战
1.需要较大的batch,即需要大量的GPU;
2.图像和文本的特征需要gather所有GPU上的,需考虑GPU之前的大量通信
提出SigLip(使用sigmoid计算loss,替换之前的softmax函数),减少clip对batch大小的要求。

技术细节

  • ClipLoss
    1)非对称loss,由文本–图像的softmax+图像到文本的softmax两项组成,
    2)以image–>text softmax计算为例,分子中的每个正样本对(xi, yi),都会被分母中的所有负样本(xi,yj)对进行全局归一化。每个GPU需要维护一个N*N的成对相似性矩阵(导致二次复杂)
    t为温度超参,控制softmax输出的锐度/平滑度
    softmax:
### Task-agnostic 视频语言模型 (VLM) 的预训练及其在视频理解中的应用 #### 定义与背景 Task-agnostic 视频语言模型(VLM)是一种能够处理多任务场景的通用型模型,旨在通过联合建模视频和文本数据来捕捉跨模态的信息交互。这种类型的模型通常通过对大规模未标注或多标签的数据集进行自监督学习完成预训练阶段[^2]。相比传统的任务特定模型,Task-agnostic VLM 更加灵活,在多个下游任务中表现出色。 #### 预训练方法概述 预训练的核心目标是从大量无标记或弱标记的多媒体数据中提取有用的特征表示。对于视频语言模型而言,常见的做法是将视频序列分解为离散的时间步,并将其映射到高维向量空间中。具体来说,给定一段视频片段 \( v \),以及对应的自然语言描述 \( t \),可以通过以下方式实现: 1. **Token化**: 将视频帧转换为一系列 token 嵌入,这一步骤可能涉及使用冻结的视觉编码器(如 ResNet 或 Swin Transformer)提取每帧的空间特征。 2. **时间建模**: 利用可训练的 MLP 层或其他结构进一步捕获帧间关系,从而得到最终的视频 token 表示。 3. **对比学习框架**: 在许多情况下,采用基于对比损失的目标函数优化模型参数,使得正样本对之间的相似度最大化而负样本最小化[^3]。 #### 应用于视频理解的具体案例分析 以 Meta AI 和 CMU 提出的任务无关视频语言模型为例,该架构展示了如何有效地结合来自不同源域的知识来进行广泛的视频理解和生成任务。此外,还有其他研究尝试比较不同类型 VLM 架构的效果差异,例如 BLIPBASE 和 XVLMCLIP 这两类分别代表了编解码器网络混合模式和平行流模式的设计理念。 当涉及到实际应用场景时,像 SeeDo 系统那样利用预先训练好的大型多模态语言模型去解析真实世界的演示录像成为一种新兴趋势[^1]。它不仅继承了传统模仿学习技术的优点——即把复杂的操作拆分成更易于管理的小单元;同时还引入了先进的 NLP 技术支持更加多样化的动作执行形式。 ```python import torch from transformers import VideoMAEModel, AutoTokenizer def extract_video_features(video_frames): video_encoder = VideoMAEModel.from_pretrained('videomae-base') tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased') with torch.no_grad(): frame_embeddings = video_encoder(video_frames).last_hidden_state text_input_ids = tokenizer("A man is playing basketball", return_tensors="pt")['input_ids'] # Hypothetical fusion mechanism between visual and textual embeddings. fused_representation = combine_visual_textual(frame_embeddings, text_input_ids) return fused_representation def combine_visual_textual(vis_emb, txt_id): pass # Placeholder for actual implementation details. video_data = ... # Preprocessed input data structure containing frames. result = extract_video_features(video_data) print(result.shape) ``` 上述代码片段展示了一个简单的例子说明怎样加载现成工具包里的组件并组合起来形成初步解决方案雏形。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值