【免费下载链接】InternVideo2-Stage2_6B项目地址https://ai.gitcode.com/OpenGVLab/InternVideo2-Stage2_6B点击查看免费下载本文带你快速读懂 InternVideo2-Stage2_6B 的 3D 正弦位置编码3D Sincos Positional Encoding。这是一个约 6B 参数的多模态理解模型能同时处理视频、图像和文本。它只用一套位置编码方案就让同一个视觉编码器既看得懂单张图片也看得懂一段视频的时序变化——这正是本文要拆解的核心设计。一、为什么视频模型需要3D 位置在 ViTVision Transformer风格架构中图像会被切成小块patch每个 patch 变成一个 token 送入 Transformer。但 Transformer 本身不感知顺序——如果不告诉模型某个 token 在画面的第几行第几列它就无法理解空间关系。视频比图像多了一个维度时间。InternVideo2-Stage2_6B 的视觉编码器配置如下见 config.json配置项值含义img_size224输入分辨率 224×224patch_size14每块 14×14 像素num_frames4取 4 帧tubelet_size1时间方向不压缩d_model1408每个 patch 的向量维度因此4 帧视频会被切成一个4×16×16 的 3D 网格时间 4 层每层 16×16 个 patch网格划分逻辑见 modeling_internvideo2.py 中的PatchEmbed。位置编码要回答的问题也随之变成三维的这个 token 来自第几帧哪一行哪一列二、正弦编码原理用波的频率编号位置InternVideo2 采用的是经典的正弦-余弦位置编码源自 Transformer 原论文MoCo v3 也沿用了该方案。核心函数是 get_1d_sincos_pos_embed_from_grid先构造一组频率ω 1 / 10000^(0, 2/D, 4/D, ...)波长从 2π 到 10000·2π 对数级展开用位置编号pos分别乘以这些频率得到角度对角度同时取sin与cos把两部分拼起来作为该位置的位置向量。omega 1.0 / 10000 ** omega # 一组从高频到低频的波长 out np.einsum(m,d-md, pos, omega) # 位置 × 频率 emb np.concatenate([np.sin(out), np.cos(out)], axis1)这种设计有两个天然优势免训练位置编码是算出来的不是学出来的初始化即可用相对位置友好sin/cos 满足三角恒等式模型很容易从位置向量里读出两个位置的相对距离。在 2D 图像上get_2d_sincos_pos_embed_from_grid维度被对半分一半编码行号一半编码列号。三、3D 版的精髓一份维度三种角色get_3d_sincos_pos_embed 是本文的主角。它把embed_dim1408 维按1/4 : 3/4切成时间与空间两大部分位置分量占用维度说明时间 T第几帧352 1408 × 1/41D 正弦编码 4 个帧位置高度 H第几行528 1408 × 3/4 ÷ 22D 编码的一半宽度 W第几列5282D 编码的另一半组装方式很巧妙把时间向量沿 16×16 个空间位置重复把空间向量沿 4 个时间帧重复然后按最后一维拼接就得到形状为[T×H×W, 1408][1024, 1408]的完整位置表若启用cls_token最前面再补一行全零向量给分类 token。 空间占了 3/4 的维度、时间只占 1/4——这反映了一个工程直觉视觉细节主要在空间里时间轴上只需足够区分 4 帧即可。四、图像与视频如何共用一套编码器这是 InternVideo2-Stage2_6B 最实用的设计之一。它并不为图像另造一个编码器而是维护两套预填充的位置编码参数初始化见 init_pos_embedpos_embed视频用时间维 T4形状[1, 11024, 1408]img_pos_embed图像用等价于 T1 的 3D 编码时间分量恒定形状[1, 1256, 1408]。两者是否分开由配置项sep_image_video_pos_embed控制config.json 中设为true。在前向传播 forward 中只要use_imageTrue模型就选img_pos_embed去加到 patch token 上其余流程完全一致if use_image: pos_embed self.img_pos_embed # 图像单帧位置编码 else: pos_embed self.pos_embed # 视频4 帧 3D 位置编码 x x pos_embed若关掉分离开关模型还有一招回退方案把视频位置编码的 4 帧按时间取平均得到单帧位置编码modeling_internvideo2.py——相当于把 4 帧的位置信息摊平成 1 帧让同一份参数也能为图像服务。此外主编码器还配有clip_pos_embed/clip_img_pos_embed两份孪生参数专门服务于 CLIP 对齐分支modeling_internvideo2.py保证对齐目标与主任务各自拥有干净的位置信息。五、位置编码的特权身份不衰减、可插值位置编码在这个模型里享受两个特殊待遇不参与权重衰减。no_weight_decay 明确把pos_embed、img_pos_embed、clip_pos_embed等全部排除在 weight decay 之外——它们更像先验地图只需微调不该被正则项拉向零。帧数变了也能插值。预训练固定用 4 帧如果加载检查点时目标帧数不同interpolate_pos_embed 会先把位置表还原成[帧, 空间, 维度]的形状沿时间维做线性插值再把 cls token 原样接回——空间变化时同理做双线性插值。这让 4 帧预训练的模型能平滑迁移到其他帧数的场景。六、上手体验三行代码感受它的工作效果模型自带演示脚本 demo.py核心调用只有几行model AutoModel.from_pretrained( OpenGVLab/InternVideo2-Stage2_6B, trust_remote_codeTrue).eval() texts, probs retrieve_text(frames, text_candidates, modelmodel, topk5) feat model.get_vid_feat(vid2tensor(example1.mp4, fnum4))其中 retrieve_text 负责视频帧采样与文本特征检索get_vid_feat 则走完整的切 patch → 加 3D 位置编码 → 过 Transformer 块 → 池化流程。仓库内还附有示例视频 example1.mp4可直接验证视频-文本检索效果。七、关键文件速查表文件内容modeling_internvideo2.py#L149-L1671D 正弦位置编码核心实现modeling_internvideo2.py#L335-L3803D 位置编码组装时间 1/4 空间 3/4modeling_internvideo2.py#L858-L881视频/图像两套位置编码的初始化modeling_internvideo2.py#L924-L960前向传播中位置编码的选择与叠加config.json#L457-L486视觉编码器关键超参数demo.py / README.md使用示例与说明总结InternVideo2-Stage2_6B 的 3D 正弦位置编码本质上是一次优雅的维度分配用 1/4 的维度编码第几帧、3/4 的维度编码第几行第几列再靠图像单帧视频的视角让一套视觉编码器无缝覆盖图像与视频两大模态。位置编码免训练、可插值、不衰减的特性则保证了它在不同分辨率和帧数下的稳健性。理解了这套机制你就掌握了多模态大模型中时空统一建模的一块基石。赞分享【免费下载链接】InternVideo2-Stage2_6B项目地址https://ai.gitcode.com/OpenGVLab/InternVideo2-Stage2_6B点击查看免费下载相关推荐视频预处理完全指南看懂InternVideo2-Stage2_6B的帧采样与224×224张量转换视频预处理完全指南看懂InternVideo2 Stage2_6B的帧采样与224×224张量转换 InternVideo2 Stage2_6B 是一个 6BM-RoPE深潜ZDTaichu5.0-9B如何用3D位置编码同时搞定文本、图像与视频M RoPE深潜ZDTaichu5.0 9B如何用3D位置编码同时搞定文本、图像与视频 ZDTaichu5.0 9B 是一款 9B 级开源多模态基础模型能同人工智能大模型基础模型多模态计算机视觉具身智能AI AgentInternVideo2-Stage1-1B-224p-f8 架构拆解ViT-G视频编码器如何看懂时序数据InternVideo2 Stage1 1B 224p f8 架构拆解ViT G视频编码器如何看懂时序数据 InternVideo2 Stage1 1B 22上一篇实战指南3步实现LLM评估结果可视化与深度分析下一篇高效开源浏览器资源嗅探工具猫抓扩展深度技术解析与实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考