资讯动态

解剖 VideoChat-Flash-Qwen2_5-2B_res448 视觉编码器:UMT-HD 如何用300M参数看懂10000帧

发布时间:2026/10/17 2:27:28 来源:尧图企业网站定制
【免费下载链接】VideoChat-Flash-Qwen2_5-2B_res448项目地址https://ai.gitcode.com/OpenGVLab/VideoChat-Flash-Qwen2_5-2B_res448点击查看免费下载VideoChat-Flash-Qwen2_5-2B_res448 是 OpenGVLab 推出的长视频理解模型它的视觉编码器 UMT-HD 仅约 300M 参数却能把每个视频帧压缩到 16 个 token让约 10000 帧的超长视频装进一个上下文窗口。本文带你拆解开这个视觉编码器从 448×448 高清输入、正弦位置编码到 ToMe 令牌合并一步步看懂它小身材、大胃口的秘密。一、先认识 VideoChat-Flash一个能看长视频的小模型按照 README.md 的说明该模型由两部分组成视觉端UMT-LUMT-HD约 300M 参数视频编码器输入分辨率 448×448语言端Qwen2.5-1.5B 语言模型借助 YaRN 把上下文从原生 32k 扩展到 128k。两者之间靠一个视觉-语言连接器projector对接。整个模型最巧妙之处在于每帧视频只占用 16 个 token。这意味着 10000 帧的视频大约只需 16 万视觉 token 量级的表征配合 128k 上下文就实现了一口气看完的效果。官方给出的基准成绩MVBench 70.0、LongVideoBench 58.3、VideoMME w/o sub 57.0在同体量模型中相当能打。二、UMT-HD 视觉编码器300M 参数的高清眼睛构建逻辑在 vision_tower_builder.py 中入口函数build_vision_tower检测到塔名包含umt-hd时会固定以448作为输入分辨率见 #L627-L630编码器主干24 层 Transformer隐藏维度 102416 个注意力头见build_vit#L520-L538Patch 切分16×16 像素一块448÷1628所以每帧产生 28×28784 个 patch tokenPatchEmbed#L176-L201注意力加速检测到 flash-attn 时自动切换 Flash Attention v2Attention类#L71-L140取特征层配置项mm_vision_select_layer: -2即取倒数第二层输出兼顾语义与细节。为什么叫 HD位置编码的高清插值UMT-HD 名字里的 HDHigh Definition指高分辨率能力。编码器预训练时用的是 224×22414×14 个 patch而推理时被拉大到 448×44828×28。靠什么弥合这个差距答案是正弦位置编码 双重重插值实现在get_sinusoid_encoding_table2#L239-L283空间上对 14×14 的预训练位置表做 bicubic 插值到 28×28时间上对帧维位置做 linear 插值让 4 帧窗口可以扩展到更多帧。不训练任何新参数就实现了分辨率从 224 到 448 的高清升级——这是 UMT-HD 能以小身材吃下高分辨率视频的关键。三、从 784 到 16ToMe 令牌合并压缩器如果每帧 784 个 token 直接进语言模型10000 帧就是 784 万个 token谁也消化不了。于是 mm_projector_builder.py 中的ToMe16_mlp_hd64登场由配置项mm_projector_type: tome16_mlp_hd64指定见 config.json。迭代对折784 个 token 如何变成 16 个压缩核心是ToMeToken Merging二部图软匹配实现在bipartite_soft_matching#L6-L59流程非常直观把 token 序列按奇偶位置分成两组 A、B计算两组 token 的相似度把最相似的一对合并加权平均见merge_wavgmerge_tokens#L96-L127循环执行每次砍掉一半784 → 392 → … → 16直到命中目标数量。对视频输入forward中会按 4 帧一组mm_local_num_frames: 4计算压缩目标16 × 帧数也就是每帧最终只保留 16 个 token#L131-L150。合并完成后再经过一个两层 MLP 把维度从 1024 映射到语言模型的 1536hidden_size完成视觉与语言的空间对齐。 可以这样理解ToMe 相当于给每一帧做无损感的摘要——相似的 patch 先合并画面中重复的背景被大幅精简而信息密集的前景得以保留。四、10000 帧是怎么塞进模型的每秒 1 帧的动态采样视频帧数并非全部读入。load_videomm_utils.py #L367-L390使用dynamic_fps1策略按视频时长以每秒 1 帧的节奏决定采样数并在get_frame_indices#L58-L125中均匀取每个区间的中间帧最少 64 帧起步。也就是说一段 2 小时的视频会均匀采样出几千帧而不是盲目全读。账本16 token/帧 × 128k 上下文算一笔账就明白看懂 10000 帧的含义每帧经 ToMe 压缩后 16 token语言模型上下文 128kYaRN 扩展后的 Qwen2.5-1.5B两者相除可容纳上万帧的视频表征模型因此可以回答整段视频里发生了什么这类全局问题。此外config.json 还预留了mm_llm_compress/llm_compress_type等开关可在 LLM 内部再做一轮注意力式 token 压缩见 modeling_videochat_flash.py 中prepare_inputs_labels_for_multimodal#L340-L350为更长视频留出了后手。五、配置速查关键参数一眼看懂配置项值含义mm_vision_towerumt-hd-large使用 UMT-HD 高清视觉塔mm_projector_typetome16_mlp_hd64ToMe 压到 16 token/帧 MLP 投影mm_local_num_frames44 帧为一组做局部视频编码mm_vision_select_layer-2取视觉塔倒数第 2 层特征mm_num_compress_latents128压缩潜变量数Q-Former 式压缩预留image_aspect_ratioanyres_nopad图像走任意分辨率免填充切分完整定义见 config.json视频/图像特征的分流逻辑见 modeling_videochat_flash.py 的encode_video_image#L126-L179。六、小结小参数大视野VideoChat-Flash-Qwen2_5-2B_res448 的视觉编码器设计可以用三句话概括看得清——UMT-HD 用位置编码插值把 224 预训练模型升级为 448 高清输入不增参数压得狠——ToMe 软匹配把每帧 784 个 token 迭代对折到 16 个信息密度换表征效率装得多——16 token/帧 的极省表征 128k 上下文让 10000 帧长视频成为可能。这正是300M 参数看懂 10000 帧的完整答案不是编码器本身有多大而是每一层设计都在为长视频这个目标服务。赞分享【免费下载链接】VideoChat-Flash-Qwen2_5-2B_res448项目地址https://ai.gitcode.com/OpenGVLab/VideoChat-Flash-Qwen2_5-2B_res448点击查看免费下载相关推荐uBlock Origin 广告拦截器完整免费安装指南默认配置即完工uBlock Origin 广告拦截器完整免费安装指南默认配置即完工 打开一个新闻页面后台往往已经飞出去几十条广告与跟踪请求。关掉标签页时流量和加载时间人工智能AI AgentAgent 编排后端前端任务调度认证鉴权OpenAlice 实盘回归测试揭秘AI自动跑Demo账户一轮捕获20个单元测试抓不到的BugOpenAlice 实盘回归测试揭秘AI自动跑Demo账户一轮捕获20个单元测试抓不到的Bug OpenAlice 是一个覆盖股票、加密货币、大宗商品、外汇如何解决AI应用的安全与扩展难题openai-go的Webhook验证与中间件实战指南如何解决AI应用的安全与扩展难题openai go的Webhook验证与中间件实战指南 在构建基于OpenAI API的企业级应用时我们常常面临两个核心挑战上一篇Translumo免费开源的屏幕实时翻译工具生肉字幕和游戏对白秒变中文下一篇Translumo免费的实时屏幕翻译工具无汉化游戏和生肉视频的中文字幕随台词出现创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑