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

基于 CLIP 的文本与视频编码及相关知识解析

文本输入

  • 分词 :对于clip的文本编码器而言,输入一个文本的前提是分词

例如 你把标签输入进去之前,你得利用clip.token 来分词(也有变形)
一般而言 你输入全部的类别标签,然后根据文本提示 组成一个长度为77
的上下文。
这时候会形成一个(n,77)

  • 修改形状:关于你的模型输入的要求 无疑是要修改
    一个是(n,77)(端对端),另外是(b,77)这个有两个的编码器来混合双打

  • nn.embeding 函数
    这个无疑 是生成了帮每一个词生成相应的词嵌入向量
    这时候变成了(k,77,d)

  • clip的文本编码器而言
    会将这个变成(k,77) 我之所以用k 是用k替代上面n,b

  • 后续处理 论文有自己方法 不展开讲

视频

  • 采样:这个采样很有讲法,在训练阶段,一般讲几帧,(16帧实验就出自这),
    而又比如验证阶段讲时间剪裁(3个时间剪裁救出自这)
  • 塑形: B, C, T, H, W = x.size()这个就是基本形状,由于clip是图片编码器
    x = x.permute(0, 2, 1, 3, 4).flatten(0, 1),BT C H W(这个是一个视频

为什么可以将视频输入到图像编码器?
帧作为独立图像:
每一帧视频本质上是一张静态图像。因此,可以将视频中的每一帧单独提取出来,然后分别输入到图像编码器中。
例如,对于一个形状为 (B,T,C,H,W) 的输入,可以将其重新组织为 (B×T,C,H,W),这样每一帧就变成了一个独立的图像输入。
逐帧处理:
图像编码器(如 ViT)通常设计用于处理单张图像。通过逐帧处理视频中的每一帧,我们可以利用图像编码器的强大特征提取能力来提取每一帧的特征。
例如,假设 B=4,T=8,C=3,H=224,W=224,那么输入的形状为 (4,8,3,224,224)。将其重新组织为 (32,3,224,224),这样就有 32 张独立的图像输入到图像编码器中。

  • vit(多头注意力机制)BXT,N+1,D (N为块数,1为分类标记)

  • clip的图像编码器 :(BXT,D) 采样了分类标记来做平均池化

  • 后续处理因论文而异

补充知识

  • VIT

在视频分析领域,我们常常聚焦于视频数据的结构化处理与特征提取。在此,考虑一个视频,其数学表示为 V ∈ R T × H × W × 3 V \in \mathbb{R}^{T \times H \times W \times 3} VRT×H×W×3。其中, T T T 代表该视频所包含的采样帧数, H H H W W W 分别对应视频每一帧的高度与宽度,而最后的维度 3 3 3 则表示视频每一帧的 RGB 色彩通道信息。

对视频的每一帧而言,我们依据特定的处理流程来进一步解析其数据结构。具体来说,每一帧会被划分为若干个形状为 P × P × 3 P \times P \times 3 P×P×3 的不重叠正方形块。这些块经过展平操作后,形成一组向量,我们将其记为 { x t , i ∈ R 3 P 2 } i = 1 N \{x_{t,i} \in \mathbb{R}^{3P^2}\}_{i = 1}^{N} {xt,iR3P2}i=1N。这里, t t t 明确地指代帧号,其取值范围涵盖视频中的每一个帧;而 i i i 则用于标记块号,对于每一帧内的所有块进行有序编号。值得注意的是,块的总数 N N N 可通过公式 N = H × W P 2 N=\frac{H\times W}{P^2} N=P2H×W 得出。
完成块的向量转换后,我们会将这些向量引入一个线性投影层 P emb ∈ R 3 P 2 × D P_{\text{emb}} \in \mathbb{R}^{3P^2 \times D} PembR3P2×D。经过这一投影层的处理,向量会生成标记嵌入,并且每个标记的输出维度被设定为 D D D。这种维度的转换与设定,旨在为后续的模型处理提供更具表达力的特征表示。

为了使每一帧的嵌入标记序列能够携带额外的分类信息,我们会为其添加一个特殊的分类标记 x cls ∈ R D x_{\text{cls}} \in \mathbb{R}^{D} xclsRD。最终,输入到视频编码器的每一帧标记序列可以通过以下公式清晰地描述:

z t ( 0 ) = [ x cls , P emb x t , 1 , … , P emb x t , N ] + e z^{(0)}_t = [x_{\text{cls}}, P_{\text{emb}} x_{t,1}, \ldots, P_{\text{emb}} x_{t,N}] + e zt(0)=[xcls,Pembxt,1,,Pembxt,N]+e

在上述公式中, e e e 代表位置编码。位置编码在视频数据处理中起着至关重要的作用,它为模型提供了关于视频帧中各个标记位置的信息,从而有助于模型更好地捕捉视频数据中的空间与时间特征,提升对视频内容的理解与分析能力。

  • 视频特征
    在视频特征提取中,选择使用分类标记(CLS token)还是全体帧特征的平均池化,取决于具体的应用场景和任务需求。两者各有优缺点,以下是对它们的详细比较:
  1. 分类标记(CLS token)
    优点
    全局特征表示:CLS token 是专门为分类任务设计的,它能够捕捉到每一帧的全局特征信息。在 Vision Transformer(ViT)中,CLS token 通常被设计为一个特殊的标记,用于表示整个图像的全局特征。
    简洁性:直接使用 CLS token 作为帧的特征表示,可以避免额外的聚合步骤,简化了特征提取流程。
    有效性:在许多任务中,CLS token 已经被证明是一个非常有效的特征表示,尤其是在分类任务中。
    缺点
    信息丢失:CLS token 虽然能够捕捉全局特征,但可能会丢失一些局部细节信息。对于某些需要精细局部特征的任务,CLS token 可能不够充分。
    固定表示:CLS token 是一个固定的表示,可能无法完全适应所有类型的视频特征提取任务。
  2. 全体帧特征的平均池化
    优点
    保留更多细节:平均池化会考虑每一帧的所有特征,因此能够保留更多的局部细节信息。这对于需要精细特征的任务(如目标检测、语义分割等)可能更有帮助。
    灵活性:平均池化是一种通用的聚合方法,可以适应不同的任务需求。你可以根据需要选择不同的聚合方法(如最大池化、加权平均池化等)。
    鲁棒性:平均池化对异常值具有一定的鲁棒性,因为它会考虑所有帧的特征,而不是依赖于某一个特定的标记。
    缺点
    计算复杂度:平均池化需要对所有帧的特征进行处理,这可能会增加计算复杂度,尤其是在帧数较多的情况下。
    信息冗余:如果视频中的帧之间存在大量冗余信息,平均池化可能会引入不必要的噪声。

相关文章:

  • ngx_http_core_location
  • Cookie、Session 与 Token:核心区别与应用场景解析
  • centos 7 部署FTP 服务用shell 搭建脚本,使用时稍微修改自己所需需求
  • 深克隆和浅克隆(建造者模式,内含简版)
  • 解码未来:DeepSeek开源FlashMLA,推理加速核心技术,引领AI变革
  • 低功耗可编程RTU在热网监控中的应用
  • 抽象工厂设计模式及应用案例
  • 如何在阿里云linux主机上部署Node.Js
  • ADB介绍
  • 《C语言数据类型取值范围:一场数字的“极限挑战”之旅》
  • CSS 中opacity属性和rgba颜色表示法中透明度的区别及应用场景
  • Kubernetes高级应用之-重启策略
  • 【数据库发展史】
  • 文章记单词 | 第2篇(六级)
  • 3.23[A]linux
  • 量子计算在密码学中的应用:机遇与挑战并存
  • MySQL InnoDB行锁等待时间是怎么引起的?
  • 对象的创建
  • 进程通信(进程池的模拟实现) read write函数复习 Linux ─── 第23课
  • 数据库基础知识点(系列四)