☰
VideoChat-Flash视觉塔UMT-L解析:300M视频Transformer的时序编码原理
2026/10/17 2:05:12 网站建设 项目流程

【免费下载链接】VideoChat-Flash-Qwen2_5-7B-1M_res224

项目地址:https://ai.gitcode.com/OpenGVLab/VideoChat-Flash-Qwen2_5-7B-1M_res224
点击查看免费下载

VideoChat-Flash-Qwen2_5-7B-1M_res224 是一款面向长视频理解的开源多模态大模型,它由UMT-L(umt-large,约 300M 参数的视觉塔)+ Qwen2.5-7B-1M 组成,每帧仅用16 个视觉 token,即可支持约 5 万帧输入。这篇文章带你从源码层面拆解 UMT-L 的视觉处理流水线:视频如何被切成 tubelet、时序位置编码如何生成、以及 24 层 Transformer 如何把 784 个 token 压成 16 个——这也是它能"看"进 1M 上下文的关键。🎬

一、UMT-L 架构速览:300M 视频 Transformer 有多大?

UMT-L 是一个标准的 ViT 变体,核心超参定义在 build_vit 与 config.json 中:

参数取值含义
image_size224每帧输入分辨率(res224 变体)
patch_size16空间切块大小,224÷16 = 14×14 =196 patch/帧
embed_dim1024视觉 token 维度
encoder_depth24Transformer 层数
num_heads16多头注意力头数
mm_local_num_frames4一次送入视觉塔的局部帧数
tubelet_size1时间维不合并,逐帧编码
mm_vision_select_layer-2取倒数第 2 层特征

💡 一次前向的输入是4 帧 × 196 patch = 784 个视觉 token,这是 UMT-L 的"最小工作单元"。

二、第一步:视频切 tubelet(PatchEmbed)

视频进入 Transformer 前,先被 PatchEmbed 用一个Conv3d切成小块:

  • 卷积核为(tubelet_size, 16, 16)=(1, 16, 16);
  • tubelet_size=1意味着时间维度不做合并,每一帧独立切成 14×14 个 16×16 patch;
  • 卷积的 stride 与 kernel 相同,是"非重叠切块",输出经flatten(2).transpose(1,2)展平成 token 序列[B, T×14×14, 1024]。

与用tubelet_size=2把相邻 2 帧合并成一管不同,UMT-L 选择逐帧切块 + 后续显式时序编码,让时间信息更"干净"地由位置编码负责。

三、核心看点:时序编码如何生成?

UMT-L 没有可学习的绝对位置嵌入,而是使用sinusoid(正弦/余弦)位置编码,定义在 get_sinusoid_encoding_table:

位置角 = pos / 10000^(2i/d),偶数维取 sin,奇数维取 cos

它有两个关键设计:

1. 时间维可以"插值"到任意帧数 ⏱️

预训练时 UMT-L 只见过 4 帧,但推理时视觉塔按mm_local_num_frames=4分组,位置编码却需要覆盖mm_pos_num_frames=8的帧数(见 config.json)。此时函数会自动执行"帧数插值":

  1. 按 checkpoint 帧数 T 生成标准 sin-cos 表;
  2. 把序列 reshape 成[B, H, W, C, T],转置成[BHW, C, T];
  3. 用F.interpolate(..., mode='linear')沿时间维线性插值到目标帧数new_T;
  4. 再 reshape 回[B, T×H×W, C]加到 patch embedding 上。

这套机制让 4 帧预训练的视觉塔能无缝适配任意推理帧数,是 UMT-L "时序可泛化"的核心。

2. 空间维也可以"插值"(高分辨率场景)

当输入分辨率不是 224 时,会走 get_sinusoid_encoding_table2:先对空间 14×14 网格做bicubic 插值,再对时间维做 linear 插值,一次完成"空间 + 时序"两个方向的适配。

3. 视频与单图使用不同的位置编码

在 forward_features 中:

  • 视频模式:加完整的时空 sin-cos 编码pos_embed;
  • 单图模式(T==1,见 UMTVisionTower.forward):改用img_pos_embed,即只含空间网格的位置编码。

两种编码在初始化时分别生成,避免了"1 帧视频"与"单张图片"的语义混淆。

四、第二步:24 层 Transformer 编码

位置编码叠加后,token 序列进入 24 层 Block,每层结构为:

x = x + Attn(LN(x)) x = x + MLP(LN(x))

其中 Attention 优先使用FlashAttention-2(flash_attn_qkvpacked_func)加速多帧 token 的全局注意力——4 帧共 784 个 token 互相"看见",正是模型捕捉帧间运动与时序关系的地方。

最后取倒数第 2 层(mm_vision_select_layer=-2)的输出,再过一层 LayerNorm(with_ln=True),得到每个 patch 的视觉特征,形状还原为[B, T, 196, 1024]。

五、关键魔法:784 个 token 如何变成 16 个?

视觉塔输出的特征还"太胖"——5 万帧 × 196 patch 将产生近千万 token。VideoChat-Flash 的答案在投影器 ToMe16_mlp_hd64:

  1. ToMe 二分软匹配:bipartite_soft_matching 把 token 分成奇偶两组,按相似度得分找出最"像"的 r 对,用加权平均(merge_wavg)把它们合并,不损失重要语义地减少 token;
  2. 多轮迭代:merge_tokens 循环压缩,直到 4 帧的 784 个 token 被压到16 × 4 = 64个,即每帧只剩 16 个 token;
  3. MLP 对齐:两层 MLP(1024 → 3584)把维度对齐到 Qwen2.5-7B 的 hidden_size,送入语言模型。

🧮 算一笔账:每帧 16 token → 5 万帧 ≈ 80 万视觉 token,加上文本恰好落在 Yarn 扩展后的1M 上下文内。这正是"16 tokens per frame"设计的由来。

六、快速上手与文件导读 📖

想本地体验,官方用法(详见 README.md):

pip install transformers==4.40.1 pip install av imageio decord opencv-python
model = AutoModel.from_pretrained('OpenGVLab/VideoChat-Flash-Qwen2_5-7B-1M_res224', trust_remote_code=True).to(torch.bfloat16).cuda() output, history = model.chat(video_path="your_video.mp4", tokenizer=tokenizer, user_prompt="Describe this video in detail.", return_history=True, max_num_frames=512)

核心文件导读:

文件作用
vision_tower_builder.pyUMT-L 视觉塔:PatchEmbed、sin-cos 时序编码、24 层 ViT
mm_projector_builder.pyToMe token 合并 + MLP 投影器
modeling_videochat_flash.py视频分 4 帧一组编码、压缩后填入语言模型的主流程
config.json视觉塔 / 投影器 / LLM 压缩等全部配置
mm_utils.py帧采样与分辨率处理工具

总结

UMT-L 的时序编码原理可以浓缩为四句话:

  • 切块:Conv3d 按(1,16,16)逐帧切 patch,时间维交给位置编码;
  • 编码:sin-cos 编码沿时间维线性插值,让 4 帧预训练泛化到任意帧数;
  • 编码后:24 层 ViT(FlashAttention-2 加速)在全局注意力中建模帧间时序;
  • 压缩:ToMe 软匹配把每帧 196 token 压到 16,撑起 5 万帧 / 1M 上下文。

理解了这条"tubelet → 时序编码 → ViT → ToMe 压缩"流水线,你就掌握了 VideoChat-Flash 长视频建模的视觉基石。

【免费下载链接】VideoChat-Flash-Qwen2_5-7B-1M_res224

项目地址:https://ai.gitcode.com/OpenGVLab/VideoChat-Flash-Qwen2_5-7B-1M_res224
点击查看免费下载
上一篇:canvas-draw:免费打造支持PC与移动端的手写签名画板——简单又完整的HTML5 Canvas入门指南
下一篇:ComfyUI效率提升终极指南:mirrors/Comfy-Org/flux1-dev快捷键与工作流优化

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询