InternVideo核心代码解析:从3D位置编码到Flash Attention的模型源码深读
InternVideo核心代码解析从3D位置编码到Flash Attention的模型源码深读【免费下载链接】InternVideo[ECCV2024] Video Foundation Models Data for Multimodal Understanding项目地址: https://gitcode.com/OpenGVLab/InternVideo本文带你深读 InternVideo 视频基础模型的核心源码聚焦两大关键模块3D 位置编码让模型理解视频的时间空间结构与Flash Attention让视频 Transformer 训练效率大幅提升。即使你是刚接触 Transformer 的新手也能跟着本文快速看懂 InternVideo2 视觉骨干的设计思路与工程技巧。项目结构一览核心代码在哪里InternVideo 仓库覆盖了 InternVideo1 → InternVideo3 的完整演进而单模态视觉骨干的源码集中在 InternVideo2/single_modality/ 目录。与本文主题相关的三个关键文件文件职责pos_embed.py1D / 2D / 3D 正弦余弦位置编码flash_attention_class.pyFlash Attention 封装模块internvideo2.pyInternVideo2 主模型Attention、Block、PatchEmbed、forward 全流程其他变体如 internvideo2_pretrain.py预训练版、internvideo2_ap.py注意力池化版、internvideo2_teacher.py蒸馏教师版共享同一套位置编码与注意力设计。3D位置编码给视频模型时空感知的关键静态图像只需要 2D 位置信息而视频还多了一个时间维度。InternVideo 的解法在 pos_embed.py#L9-L54 的get_3d_sincos_pos_embed函数中思路非常优雅维度切分把嵌入维度embed_dim切成 4 份其中 3/4 分给空间2D1/4 分给时间1D空间编码调用get_2d_sincos_pos_embed_from_grid分别对高度、宽度坐标做正弦余弦编码pos_embed.py#L98-L110时间编码对帧索引做 1D 正弦余弦编码pos_embed.py#L113-L131底层公式就是经典的sin/cos(pos × 10000^(-2i/d))拼接对齐时间编码沿空间位置重复、空间编码沿时间位置重复最后按[T, H, W]顺序拼接成完整的 3D 位置编码。正弦余弦编码的最大优点是无需训练、天然支持外推且解析式生成、零存储成本。两种初始化模式联合 vs 可分离在 internvideo2.py#L440-L464 的init_pos_embed方法中InternVideo2 支持两种位置编码方案联合模式默认用 3D sincos 编码一次性初始化一个pos_embed参数之后可学习可分离模式sep_pos_embedTrue空间编码pos_embed_spatial与时间编码pos_embed_temporal各自独立学习forward 时再做相加组合internvideo2.py#L510-L524。可分离方案参数更少、分辨率泛化更强而联合方案表达更灵活——两种模式在代码中通过一个布尔开关无缝切换是很好的工程参考。Flash Attention视频 Transformer 提速的核心视频帧数多、Token 数量巨大标准注意力 O(N²) 的显存开销是训练视频模型的最大瓶颈。InternVideo 的解法在 flash_attention_class.py#L10-L71一个轻量级FlashAttention封装类。封装类的设计要点输入格式接受 QKV 打包张量(B, S, 3, H, D)直接对接底层flash_attn_varlen_qkvpacked_func算子变长序列支持当存在key_padding_mask时先用unpad_input把有效 Token 压紧成连续序列算完注意力再pad_input还原避免为无效填充位浪费算力硬件约束强制要求float16/bfloat16且运行在 CUDA 上flash_attention_class.py#L36-L37这正是 Flash Attention 高效的前提。双路径切换_naive_attn 与 _flash_attnAttention 类 同时实现了两条前向路径路径说明_naive_attn标准 PyTorch 注意力作为 CPU / 调试时的回退方案_flash_attn走 Flash Attention 内核配合 QK-Normalization 与融合 RMSNormforward里一行代码完成切换internvideo2.py#L217-L219而模型构造函数通过断言保证use_flash_attn、use_fused_rmsnorm、use_fused_mlp三个开关必须一致internvideo2.py#L370-L371——因为融合算子之间在内存布局上相互依赖。配套的Block类internvideo2.py#L249-L299还集成了 LayerScale、DropPath随机深度与梯度检查点是大规模视频训练省显存的常用组合拳。串起来看InternVideo2 前向全流程以 forward 方法 为主线数据流清晰可见3D 切块PatchEmbed 用一个Conv3d时间维步长tubelet_size、空间维步长patch_size把视频一次性切成时空 Token输出网格尺寸为(T, H, W)拼接 CLS Token在序列头部插入可学习的分类 Token随后加上位置编码N 层 Transformer BlockRMSNorm → 注意力 → LayerScale → MLP逐块堆叠默认深度 40 层、1408 维嵌入注意力池化投影AttentionPoolingBlock用交叉注意力把数百个视频 Token 压缩成一个向量投影到 768 维的 CLIP 空间internvideo2.py#L109-L116实现与文本塔的语义对齐分类头输出LayerNorm Linear 得到最终类别分数。新手学习路线建议 如果你想继续深入 InternVideo 源码建议按以下顺序阅读先跑通 run_pretraining.py 与 run_finetuning.py建立数据 → 模型 → 损失的全局认知精读 pos_embed.py 与 flash_attention_class.py掌握本文两大核心模块对照 scripts/finetuning/ 下的训练脚本理解各模型规模的超参差异关注 MODEL_ZOO.md 与 INSTALL.md补齐权重下载与部署知识。总结InternVideo 的源码把视频时空建模与大模型训练效率两个难题分别用可组合的 3D sincos 位置编码和双路径 Flash Attention 封装给出了解答。理解了这两个模块你就掌握了读懂大多数视频 Transformer 骨干的核心钥匙 。【免费下载链接】InternVideo[ECCV2024] Video Foundation Models Data for Multimodal Understanding项目地址: https://gitcode.com/OpenGVLab/InternVideo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

文华财经公式育龙指标公式

文华财经公式育龙指标公式

HH1:(EMA(CLOSE,12) - EMA(CLOSE,26))*100; LL1:EMA(HH1,9); DRAWTEXT(CROSS(HH1,LL1),90,众),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),90,4),COLORYELLOW; DRAWTEXT(CROSS(HH1,LL1),60,龙),COLORWHITE; DRAWTEXT(CROSS(LL1,HH1),60,8),COLORYELLOW; DRAWTEXT(CROSS(HH1,LL1),70,…

2026/10/4 3:00:20 阅读更多 →
Ubuntu 20.04 WiFi连接全攻略:图形界面与netplan命令行配置及驱动排错

Ubuntu 20.04 WiFi连接全攻略:图形界面与netplan命令行配置及驱动排错

简介:这份PDF文档面向刚安装Ubuntu 20.04却遇到无法连接Wi-Fi、系统托盘缺少无线图标的用户,尤其适合Linux入门者与运维初学者排查网卡驱动缺失或网络配置错误的问题。资源包共1个PDF文件,大小约27KB,内容紧凑,便于在终…

2026/10/4 3:00:20 阅读更多 →
iPhone与Mac备忘录无法同步?9种iCloud同步故障排查方法全解析

iPhone与Mac备忘录无法同步?9种iCloud同步故障排查方法全解析

去年我接过一个朋友的求助电话,说她在Mac上写的备忘录,过了整整一个下午都没在iPhone上出现。电话里她特别着急,以为是哪边漏存了。这种“iPhone和Mac之间备忘录无法同步”的情况,我这些年帮人排查过很多次,说实话&…

2026/10/4 3:00:20 阅读更多 →

最新新闻

MATLAB预构建场景库:自动驾驶仿真的核心基础设施

MATLAB预构建场景库:自动驾驶仿真的核心基础设施

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 3:26:40 阅读更多 →
10. AI辅助开发从野蛮生长到规范落地:问题、标准、提示词与评审体系全指南

10. AI辅助开发从野蛮生长到规范落地:问题、标准、提示词与评审体系全指南

随着代码大模型、AI代码助手、智能体工具深度融入研发流程,AI已经从“辅助工具”变成了团队日常开发的基础设施。AI确实能大幅提升原型搭建、重复编码、文档编写、问题排查的效率,但多数团队仍处于野蛮生长阶段:无规范使用、无审核机制、无风险管控。 效率提升的背后,是大…

2026/10/4 3:26:40 阅读更多 →
S7-1200数据日志原理与CSV乱码/下载失败实战解析

S7-1200数据日志原理与CSV乱码/下载失败实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 3:26:39 阅读更多 →
如何读懂MingLi-Bench评测报告?从整体准确率到12大命理类别的完整指南

如何读懂MingLi-Bench评测报告?从整体准确率到12大命理类别的完整指南

如何读懂MingLi-Bench评测报告?从整体准确率到12大命理类别的完整指南 【免费下载链接】MingLi-Bench A benchmark for evaluating LLMs on Chinese traditional fortune telling — Bazi (八字) and Ziwei Doushu (紫微斗数). 项目地址: https://gitcode.com/gh_…

2026/10/4 3:26:39 阅读更多 →
基于MR25H40CDF与TM4C129X的工业级MRAM存储方案

基于MR25H40CDF与TM4C129X的工业级MRAM存储方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 3:26:39 阅读更多 →
简单分析C++指针的操作和运算

简单分析C++指针的操作和运算

那么它也应该有对应的操作或运算,正如整数能做加减乘除一样。但是每一种操作或运算都应该对这种数据类型有意义。比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运算,因为比较虚数的大小是没有意义的。对于指针类型来…

2026/10/4 3:25:38 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →