文章目录一、前言二、VideoMAE v2:使用双重掩码扩展视频掩码自编码器一、论文基本信息二、研究背景与动机三、核心方法1. Dual Masking双重掩码策略2. Progressive Training渐进式训练范式3. 模型扩展Model Scaling四、主要实验结果五、开源资源与模型仓库六、总结与影响通俗解释把视频想象成一本翻页动画书第一重掩码Tube MaskingEncoder 端遮住 90%第二重掩码Running Cell MaskingDecoder 端再次遮住一部分为什么这么设计三个原因1. 视频冗余实在太多了2. Decoder 是新的瓶颈3. 为了训练巨兽级模型一句话总结三、架构图1: VideoMAE V2 双重掩码机制一、故事开场视频是怎么被切进模型的1.1 输入视频一段原始视频1.2 Cube Embedding把视频切成时空小方块二、第一幕Tube MaskingEncoder 端90% 被涂黑2.1 什么叫 Tube Masking2.2 为什么用管子而不是随机点三、第二幕Encoder 内部——用 10% 的碎片理解世界3.1 Encoder 的输入3.2 Encoder 内部在做什么四、第三幕Running Cell MaskingDecoder 端再次筛选4.1 90% 被遮住的区域现在要被二次审判4.2 为什么叫Running Cell4.3 为什么再次丢弃 45%五、第四幕C 处的融合——把线索和填空题拼在一起5.1 融合前有什么5.2 灰色方块到底是什么5.3 C 处的操作拼接Concatenate5.4 为什么要拼接六、第五幕Decoder 内部——做填空题6.1 Decoder 的输入6.2 Decoder 内部在做什么6.3 输出Reconstructed Pixel粉色方块七、第六幕损失函数——只算被选中的填空题7.1 损失计算范围7.2 谁不算损失7.3 为什么这样设计八、第七幕训练流程——三阶段渐进式毕业阶段 1大规模无监督预训练Pre-training阶段 2有监督后预训练Post-pretraining阶段 3下游任务微调Fine-tuning九、第八幕推理流程——毕业后的工作9.1 丢弃 Decoder只用 Encoder9.2 为什么能扔掉 Decoder9.3 推理时的数据流9.4 为什么推理不用掩码十、大结局Dual Masking 的完整故事线十一、为什么这个设计能训练出十亿参数的模型一、前言仅供参考未经实验验证。二、VideoMAE v2:使用双重掩码扩展视频掩码自编码器一、论文基本信息项目内容论文标题VideoMAE V2: Scaling Video Masked Autoencoders with Dual Masking作者Limin Wang, Bingkun Huang, Zhiyu Zhao, Zhan Tong, Yinan He, Yi Wang, Yali Wang, Yu Qiao机构南京大学 (Nanjing University)、上海人工智能实验室 (Shanghai AI Lab)、中国科学院 (CAS)发表会议CVPR 2023(IEEE/CVF Conference on Computer Vision and Pattern Recognition)会议页码Pages 14549–14560arXiv2303.16727GitHub 仓库https://github.com/OpenGVLab/VideoMAEv2二、研究背景与动机VideoMAE V2 是 VideoMAE (NeurIPS 2022) 的续作。随着视觉基础模型Foundation Model的兴起模型规模Scale成为构建强大泛化能力模型的关键因素。然而训练具有十亿级参数billion-level的视频基础模型仍面临巨大挑战计算瓶颈视频数据的高维度特性使得 Transformer 的计算和内存开销极为庞大。数据稀缺高质量、大规模的视频预训练数据相对图像领域更为匮乏。训练效率原始 VideoMAE 虽然通过高掩码率90%显著降低了 Encoder 的计算量但Decoder 仍需处理全部 token成为新的瓶颈。三、核心方法1. Dual Masking双重掩码策略这是 VideoMAE V2 最核心的创新。作者在Encoder 和 Decoder 两侧同时引入掩码进一步挖掘视频数据的冗余性以提升训练效率Encoder Masking沿用 VideoMAE 的Tube Masking时空管状掩码以极高比率如 90%掩码仅将可见 token 输入 Encoder。Decoder Masking提出Running Cell Masking运行单元掩码在 Decoder 输入端再次对 token 进行掩码。Decoder 只处理 Encoder 输出特征与部分可见 token 的组合而非全部 token。损失计算MSE 损失仅作用于同时被 Encoder 和 Decoder 掩码的 token即M e ∩ M d M_e \cap M_dMe∩Md既保证了重建难度又大幅减少了计算量。效率提升效果相比仅 Encoder Masking模型FLOPs内存训练时间加速比ViT-B35.48G → 25.87G631M → 328M28.4h → 15.9h1.79×ViT-g263.93G → 241.61G1753M → 1050M356h → 241h1.48×2. Progressive Training渐进式训练范式为了适配更大规模的模型和数据作者提出三阶段渐进训练策略无监督预训练在UnlabeledHybrid约135 万视频来自 Web、YouTube、Instagram、Movies 等多源数据上进行大规模自监督预训练。有监督后预训练Post-pretraining在LabeledHybridKinetics-400 Kinetics-600 Kinetics-700 混合标签数据集上进行中间监督训练作为从大规模无监督到小规模下游任务的桥梁。下游任务微调在目标数据集上进行最终微调。3. 模型扩展Model Scaling借助 Dual Masking 带来的效率提升VideoMAE V2 首次成功将视频掩码自编码器扩展到ViT-giantViT-g级别达到十亿参数规模这在视频自监督预训练领域属于开创性工作。四、主要实验结果VideoMAE V2 在多个主流视频理解基准上取得了SOTAState-of-the-Art性能数据集任务类型性能Kinetics-400动作分类90.0%Top-1Kinetics-600动作分类89.9%Top-1Something-Something V1动作分类68.7%Top-1Something-Something V2动作分类77.0%Top-1AVA时空动作检测SOTATHUMOS14 / FineAction时序动作检测SOTA此外论文还验证了模型在动作分类、动作检测、时序动作检测等多种下游任务上的强大迁移能力证明其作为通用视频表征学习器的有效性。五、开源资源与模型仓库GitHub 仓库提供了丰富的开源支持预训练代码PRETRAIN.md微调代码FINETUNE.md模型权重ViT-S、ViT-B、ViT-g 等多尺度模型蒸馏模型Distilled Models提供轻量化的学生模型Hugging Face 集成权重已迁移至 Hugging FaceVideoMAEv2-hfMMAction2 支持已合并至 MMAction2 开发版本六、总结与影响VideoMAE V2 的核心贡献在于提出 Dual Masking通过在 Decoder 侧引入掩码在不显著牺牲性能的前提下将训练速度和内存效率提升1.5–1.8 倍使得十亿级视频模型的自监督训练成为可能。建立渐进式训练范式通过无监督预训练 → 有监督后预训练 → 下游微调的流程有效缓解了大规模模型与有限下游数据之间的鸿沟。首次实现视频领域的 Billion-Scale MAE 训练成功训练 ViT-g并在 Kinetics、Something-Something 等数据集上刷新 SOTA。该工作为后续视频基础模型如 InternVideo 等的发展奠定了重要基础是视频自监督学习领域的里程碑式工作。通俗解释通俗解释一下尤其是直观地说清楚它是怎么掩码的遮住了哪里没遮住哪里为什么这么设计把视频想象成一本翻页动画书假设你有一段视频有100 帧画面像一本100页的画册。每一页都被切成很多小方格比如 16×16 像素一个格子。在视频里同一个位置的小方格连续很多帧的内容都差不多比如背景的墙壁、地板。这就是视频的冗余性——信息大量重复。第一重掩码Tube MaskingEncoder 端遮住 90%操作方式随机挑选90% 的位置比如这本书里 90% 的坐标点然后做一个残忍的操作在这些被选中的位置上把全部 100 页对应的小方格从头到尾全部涂黑。这就像一个时空管子Tube穿过整本画册管子经过的地方全部看不见。没遮住的是谁剩下10%的幸运格子它们在所有时间帧上都是可见的。为什么这么设计因为视频有很强的时间连续性。如果我只遮住某一帧的某个格子模型可能靠抄作业——直接看前一帧或后一帧同一个位置的内容——就能猜出来学不到真本事。把一整条管子全部涂黑模型就没法抄近道必须真正理解物体的运动和场景的变化才能猜出管子里原来是什么。第二重掩码Running Cell MaskingDecoder 端再次遮住一部分这是 VideoMAE V2 最狠的一招。传统 MAE 的做法Encoder 只看了 10% 的可见格子输出一些理解。然后 Decoder 要把所有被涂黑的90% 格子全部重建出来——相当于让 Decoder 做 90% 的填空题。VideoMAE V2 的做法从这 90% 被涂黑的格子里再随机挑一部分比如只挑 45%剩下的直接不管了。换句话说Decoder 的输入端再次被掩码——那些被二次选中的格子才需要重建其他的连重建任务都被取消了。遮住哪里在 Decoder 输入时大部分被 Encoder 掩码的格子再次被遮住不参与 Decoder 计算。没遮住哪里只有被双重选中的那一小部分格子才会进入 Decoder 并被重建。为什么这么设计三个原因1. 视频冗余实在太多了视频的信息密度比图片低得多。一帧 1920×1080 的画面真正在动的可能只有 10% 的区域。你不需要把每个像素都重建出来重建一半就能学到足够的本领。2. Decoder 是新的瓶颈在 VideoMAE V1 里Encoder 虽然只处理 10% 的 token但 Decoder 要处理100%10% 的 Encoder 输出 90% 的 mask token。当模型变大比如 ViT-g十亿参数Decoder 的计算和内存开销变得极其恐怖。Dual Masking 让 Decoder 也只需处理一部分 token训练速度直接提升 1.5~1.8 倍内存占用大幅下降。3. 为了训练巨兽级模型有了这个设计作者才第一次成功训练出了十亿参数ViT-g的视频自监督模型。如果没有 Dual Masking 省下来的资源这种规模的模型在视频上根本训不动。一句话总结Tube Masking是竖着挖管子空间位置固定时间轴全挖空逼模型理解运动Running Cell Masking是重建时再偷工减料Decoder 只重建一部分缺失块逼模型高效学习两者结合用更少的计算训出更大的模型。三、架构图1: VideoMAE V2 双重掩码机制一、故事开场视频是怎么被切进模型的1.1 输入视频一段原始视频假设输入是一段T 帧的视频比如 16 帧分辨率是 224×224。1.2 Cube Embedding把视频切成时空小方块模型不会直接看像素。它先用一个3D 卷积层或线性投影把视频切成很多16×16×2的小立方体Cube空间上每 16×16 像素一块时间上每 2 帧一层每个小立方体被压扁成一个向量token。假设总共切出了N 个 token。这就是图中左下角的“Cube embedding”绿色方块——它们是视频最原始的词语。二、第一幕Tube MaskingEncoder 端90% 被涂黑2.1 什么叫 Tube Masking随机选90% 的时空位置然后在这些位置上所有时间帧的对应格子全部涂黑。就像用一根吸管Tube戳穿整段视频吸管经过的地方从头到尾都是黑的。状态比例颜色去向被 Tube Masking 遮住90%白色图中不进入 Encoder可见Visible10%绿色进入 Encoder2.2 为什么用管子而不是随机点因为视频有时间连续性。如果只遮某一帧的某个格子模型可以偷看前一帧或后一帧同一个位置直接抄答案。Tube Masking 把时间维度也一并挖空彻底堵死抄近道的路逼模型真正理解运动。三、第二幕Encoder 内部——用 10% 的碎片理解世界3.1 Encoder 的输入只有那10% 的绿色 Cube embedding进入 Encoder。它们被加上位置编码告诉模型我在视频的哪个时空位置然后送入ViTVision Transformer。3.2 Encoder 内部在做什么Encoder 是一个标准的 Transformer Encoder由多层自注意力Self-Attention和前馈网络FFN组成。核心操作自注意力每个可见 token 都会看向其他可见 token比如一个 token 看到左边有个手在抬起来另一个看到右边有个球在飞通过注意力权重它们互相交换信息形成全局时空理解输出Latent Representation蓝色方块每个可见 token 经过 Encoder 后变成一个高维语义向量这个向量不再代表原始像素而是代表这里有一个运动的肢体边缘速度大概是…图中标注为“Latent representation”蓝色Encoder 的本质从 10% 的碎片中提炼出对整个视频时空结构的深层理解。四、第三幕Running Cell MaskingDecoder 端再次筛选这是 VideoMAE V2 的核心创新。4.1 90% 被遮住的区域现在要被二次审判在 Tube Masking 遮住的 90% 区域中模型再次抽签状态比例颜色命运被 Running Cell Masking 选中~45%粉色需要重建进入 Decoder被彻底丢弃~45%白色连重建任务都不给直接忽略原本可见10%蓝色作为线索进入 Decoder4.2 为什么叫Running Cell“Running” 意味着这些被选中的重建目标在时空维度上是分散跳跃的不像 Tube 那样连续像一个个奔跑的单元格Cell。4.3 为什么再次丢弃 45%因为视频的冗余度极高。如果让 Decoder 重建全部 90%就像让小学生把整本字典抄一遍——累死人但学不到多少真本事。只重建一部分比如 45%既保留了足够的难度又大幅降低了计算量。五、第四幕C 处的融合——“把线索和填空题拼在一起”这是整个图中最关键的交汇点。5.1 融合前有什么蓝色方块Encoder 输出的 Latent representation10% 可见区域的深层理解粉色方块Learnable mask token45% 被选中的重建位置的占位符5.2 灰色方块到底是什么它不是原始像素也不是零向量。它是一个可学习的嵌入向量类似 NLP 里的 [MASK] token在训练过程中不断更新。它的作用就像一个空白答题卡上的下划线“这个位置有个洞请根据上下文把它填上”。5.3 C 处的操作拼接Concatenate把蓝色序列和灰色序列拼成一个长序列[蓝色1, 蓝色2, ..., 蓝色10%, 灰色1, 灰色2, ..., 灰色45%]总长度 10% 45% 55% 的原始 token 数量。5.4 为什么要拼接因为 Decoder 是 Transformer它依靠自注意力机制工作。只有把已知线索蓝色和待填空位置灰色放在同一个序列里灰色 token 才能通过注意力层**主动询问**蓝色 token“我这边应该是什么颜色”“旁边那个可见块在做什么运动”“整体场景是室内还是室外”如果不拼接Decoder 只看到一堆空白占位符没有任何上下文根本无从重建。六、第五幕Decoder 内部——“做填空题”6.1 Decoder 的输入拼接后的序列蓝色 灰色加上位置编码。6.2 Decoder 内部在做什么Decoder 通常比 Encoder小且浅例如 Encoder 24 层Decoder 只有 4-8 层。核心操作交叉注意力 自注意力灰色 token 通过自注意力互相交流“我左边那个洞应该是什么”灰色 token 通过注意力看向蓝色 token“让我看看 Encoder 对那个可见区域的理解…”蓝色 token 作为锚点提供全局时空上下文6.3 输出Reconstructed Pixel粉色方块Decoder 的每个输出对应一个灰色位置的重建结果输出维度 原始 Cube 的像素维度如 16×16×2×3 1536这些输出是归一化后的像素值图中标注为“Reconstructed pixel”粉色。七、第六幕损失函数——只算被选中的填空题7.1 损失计算范围MSE 损失只计算那 45% 被 Running Cell Masking 选中的位置Loss MSE( Decoder 输出的粉色, 原始视频对应位置的像素 )7.2 谁不算损失被丢弃的 45%连题都没出不算原本可见的 10%Encoder 已经看过它们了不需要重建不算7.3 为什么这样设计这是MAEMasked Autoencoder的核心哲学不对称设计Encoder 重、Decoder 轻Encoder 看得少、Decoder 填得少把计算预算集中在理解上而不是复制上如果重建全部 90%Decoder 会变成像素复制机而不是语义理解器八、第七幕训练流程——三阶段渐进式毕业VideoMAE V2 不是一步到位的而是像读博士一样分阶段进阶阶段 1大规模无监督预训练Pre-training数据UnlabeledHybrid约135 万未标注视频来自 Web、YouTube、Instagram、Movies 等任务Dual Masking 自监督重建目标让模型学会通用的视频时空理解模型规模从 ViT-S 到 ViT-g十亿参数关键Dual Masking 让 ViT-g 的训练成为可能节省 1.5~1.8 倍计算阶段 2有监督后预训练Post-pretraining数据LabeledHybridK400 K600 K700 混合有标签任务用标签数据进行中间监督训练目标作为桥梁把从无标签数据学到的通用表征对齐到人类定义的动作语义上原因下游数据集如 Something-Something通常很小直接从无标签跳到微调会有语义鸿沟阶段 3下游任务微调Fine-tuning数据具体下游数据集如 Kinetics-400、Something-Something、AVA 等任务分类、检测、时序动作检测等操作加载预训练权重替换头部Head端到端微调九、第八幕推理流程——“毕业后的工作”训练完成后模型怎么在真实任务中使用9.1 丢弃 Decoder只用 Encoder在下游任务推理时Decoder 被完全扔掉。只保留Encoder和任务特定的Head分类头、检测头等。9.2 为什么能扔掉 Decoder因为 Encoder 输出的Latent representation蓝色方块已经是高质量的语义特征。Decoder 只是训练时用来监督 Encoder 学习的一个教练学完后教练就可以退休了。9.3 推理时的数据流输入视频 → Cube Embedding → Tube Masking?注意推理时不需要掩码推理时Encoder 会看全部 token100%输出全部位置的 Latent representation。然后送入任务 Head分类任务对所有 token 做全局池化Global Average Pooling送入分类头检测/分割任务保留时空特征图结构送入检测头9.4 为什么推理不用掩码掩码Masking是训练时的练习题目的是逼 Encoder 学会从残缺信息中提炼理解。推理时我们给 Encoder 看完整视频它用学到的能力提取特征自然比训练时更准。十、大结局Dual Masking 的完整故事线让我用一张图串起整个故事[输入视频] ↓ [Cube Embedding] —— 切成时空小方块绿色 ↓ [Tube Masking] —— 90% 涂黑10% 幸存绿色→Encoder ↓ [Encoder] —— 看 10%提炼深层理解蓝色 Latent ↓ [Running Cell Masking] —— 在 90% 中再选 45% 重建粉色 ↓ [C 处融合] —— 蓝色线索 灰色占位符拼接 ↓ [Decoder] —— 做填空题输出粉色重建像素 ↓ [Loss] —— 只算 45% 的 MSE ↓ [训练完成] ↓ [推理时] —— 扔掉 DecoderEncoder 看 100% 视频输出特征给下游任务十一、为什么这个设计能训练出十亿参数的模型这是 VideoMAE V2 的终极意义瓶颈原始 MAE/VideoMAE V1VideoMAE V2Dual MaskingEncoder 计算只处理 10%只处理 10%Decoder 计算处理 100%10% 输出 90% mask token只处理 55%10% 45%训练速度慢提升 1.5~1.8 倍内存占用高显著降低可训练模型规模最大到 ViT-L首次达到 ViT-g十亿级Dual Masking 的本质视频的信息冗余实在太多没必要全部重建。通过Encoder 端竖着挖管子 Decoder 端跳着做填空用更少的计算逼出更强的理解。这就是 VideoMAE V2 的完整故事一个用故意遮住大部分视频来训练十亿参数巨兽的自监督学习传奇。
VideoMAE V2的理解1——架构
发布时间:2026/7/8 8:19:16
文章目录一、前言二、VideoMAE v2:使用双重掩码扩展视频掩码自编码器一、论文基本信息二、研究背景与动机三、核心方法1. Dual Masking双重掩码策略2. Progressive Training渐进式训练范式3. 模型扩展Model Scaling四、主要实验结果五、开源资源与模型仓库六、总结与影响通俗解释把视频想象成一本翻页动画书第一重掩码Tube MaskingEncoder 端遮住 90%第二重掩码Running Cell MaskingDecoder 端再次遮住一部分为什么这么设计三个原因1. 视频冗余实在太多了2. Decoder 是新的瓶颈3. 为了训练巨兽级模型一句话总结三、架构图1: VideoMAE V2 双重掩码机制一、故事开场视频是怎么被切进模型的1.1 输入视频一段原始视频1.2 Cube Embedding把视频切成时空小方块二、第一幕Tube MaskingEncoder 端90% 被涂黑2.1 什么叫 Tube Masking2.2 为什么用管子而不是随机点三、第二幕Encoder 内部——用 10% 的碎片理解世界3.1 Encoder 的输入3.2 Encoder 内部在做什么四、第三幕Running Cell MaskingDecoder 端再次筛选4.1 90% 被遮住的区域现在要被二次审判4.2 为什么叫Running Cell4.3 为什么再次丢弃 45%五、第四幕C 处的融合——把线索和填空题拼在一起5.1 融合前有什么5.2 灰色方块到底是什么5.3 C 处的操作拼接Concatenate5.4 为什么要拼接六、第五幕Decoder 内部——做填空题6.1 Decoder 的输入6.2 Decoder 内部在做什么6.3 输出Reconstructed Pixel粉色方块七、第六幕损失函数——只算被选中的填空题7.1 损失计算范围7.2 谁不算损失7.3 为什么这样设计八、第七幕训练流程——三阶段渐进式毕业阶段 1大规模无监督预训练Pre-training阶段 2有监督后预训练Post-pretraining阶段 3下游任务微调Fine-tuning九、第八幕推理流程——毕业后的工作9.1 丢弃 Decoder只用 Encoder9.2 为什么能扔掉 Decoder9.3 推理时的数据流9.4 为什么推理不用掩码十、大结局Dual Masking 的完整故事线十一、为什么这个设计能训练出十亿参数的模型一、前言仅供参考未经实验验证。二、VideoMAE v2:使用双重掩码扩展视频掩码自编码器一、论文基本信息项目内容论文标题VideoMAE V2: Scaling Video Masked Autoencoders with Dual Masking作者Limin Wang, Bingkun Huang, Zhiyu Zhao, Zhan Tong, Yinan He, Yi Wang, Yali Wang, Yu Qiao机构南京大学 (Nanjing University)、上海人工智能实验室 (Shanghai AI Lab)、中国科学院 (CAS)发表会议CVPR 2023(IEEE/CVF Conference on Computer Vision and Pattern Recognition)会议页码Pages 14549–14560arXiv2303.16727GitHub 仓库https://github.com/OpenGVLab/VideoMAEv2二、研究背景与动机VideoMAE V2 是 VideoMAE (NeurIPS 2022) 的续作。随着视觉基础模型Foundation Model的兴起模型规模Scale成为构建强大泛化能力模型的关键因素。然而训练具有十亿级参数billion-level的视频基础模型仍面临巨大挑战计算瓶颈视频数据的高维度特性使得 Transformer 的计算和内存开销极为庞大。数据稀缺高质量、大规模的视频预训练数据相对图像领域更为匮乏。训练效率原始 VideoMAE 虽然通过高掩码率90%显著降低了 Encoder 的计算量但Decoder 仍需处理全部 token成为新的瓶颈。三、核心方法1. Dual Masking双重掩码策略这是 VideoMAE V2 最核心的创新。作者在Encoder 和 Decoder 两侧同时引入掩码进一步挖掘视频数据的冗余性以提升训练效率Encoder Masking沿用 VideoMAE 的Tube Masking时空管状掩码以极高比率如 90%掩码仅将可见 token 输入 Encoder。Decoder Masking提出Running Cell Masking运行单元掩码在 Decoder 输入端再次对 token 进行掩码。Decoder 只处理 Encoder 输出特征与部分可见 token 的组合而非全部 token。损失计算MSE 损失仅作用于同时被 Encoder 和 Decoder 掩码的 token即M e ∩ M d M_e \cap M_dMe∩Md既保证了重建难度又大幅减少了计算量。效率提升效果相比仅 Encoder Masking模型FLOPs内存训练时间加速比ViT-B35.48G → 25.87G631M → 328M28.4h → 15.9h1.79×ViT-g263.93G → 241.61G1753M → 1050M356h → 241h1.48×2. Progressive Training渐进式训练范式为了适配更大规模的模型和数据作者提出三阶段渐进训练策略无监督预训练在UnlabeledHybrid约135 万视频来自 Web、YouTube、Instagram、Movies 等多源数据上进行大规模自监督预训练。有监督后预训练Post-pretraining在LabeledHybridKinetics-400 Kinetics-600 Kinetics-700 混合标签数据集上进行中间监督训练作为从大规模无监督到小规模下游任务的桥梁。下游任务微调在目标数据集上进行最终微调。3. 模型扩展Model Scaling借助 Dual Masking 带来的效率提升VideoMAE V2 首次成功将视频掩码自编码器扩展到ViT-giantViT-g级别达到十亿参数规模这在视频自监督预训练领域属于开创性工作。四、主要实验结果VideoMAE V2 在多个主流视频理解基准上取得了SOTAState-of-the-Art性能数据集任务类型性能Kinetics-400动作分类90.0%Top-1Kinetics-600动作分类89.9%Top-1Something-Something V1动作分类68.7%Top-1Something-Something V2动作分类77.0%Top-1AVA时空动作检测SOTATHUMOS14 / FineAction时序动作检测SOTA此外论文还验证了模型在动作分类、动作检测、时序动作检测等多种下游任务上的强大迁移能力证明其作为通用视频表征学习器的有效性。五、开源资源与模型仓库GitHub 仓库提供了丰富的开源支持预训练代码PRETRAIN.md微调代码FINETUNE.md模型权重ViT-S、ViT-B、ViT-g 等多尺度模型蒸馏模型Distilled Models提供轻量化的学生模型Hugging Face 集成权重已迁移至 Hugging FaceVideoMAEv2-hfMMAction2 支持已合并至 MMAction2 开发版本六、总结与影响VideoMAE V2 的核心贡献在于提出 Dual Masking通过在 Decoder 侧引入掩码在不显著牺牲性能的前提下将训练速度和内存效率提升1.5–1.8 倍使得十亿级视频模型的自监督训练成为可能。建立渐进式训练范式通过无监督预训练 → 有监督后预训练 → 下游微调的流程有效缓解了大规模模型与有限下游数据之间的鸿沟。首次实现视频领域的 Billion-Scale MAE 训练成功训练 ViT-g并在 Kinetics、Something-Something 等数据集上刷新 SOTA。该工作为后续视频基础模型如 InternVideo 等的发展奠定了重要基础是视频自监督学习领域的里程碑式工作。通俗解释通俗解释一下尤其是直观地说清楚它是怎么掩码的遮住了哪里没遮住哪里为什么这么设计把视频想象成一本翻页动画书假设你有一段视频有100 帧画面像一本100页的画册。每一页都被切成很多小方格比如 16×16 像素一个格子。在视频里同一个位置的小方格连续很多帧的内容都差不多比如背景的墙壁、地板。这就是视频的冗余性——信息大量重复。第一重掩码Tube MaskingEncoder 端遮住 90%操作方式随机挑选90% 的位置比如这本书里 90% 的坐标点然后做一个残忍的操作在这些被选中的位置上把全部 100 页对应的小方格从头到尾全部涂黑。这就像一个时空管子Tube穿过整本画册管子经过的地方全部看不见。没遮住的是谁剩下10%的幸运格子它们在所有时间帧上都是可见的。为什么这么设计因为视频有很强的时间连续性。如果我只遮住某一帧的某个格子模型可能靠抄作业——直接看前一帧或后一帧同一个位置的内容——就能猜出来学不到真本事。把一整条管子全部涂黑模型就没法抄近道必须真正理解物体的运动和场景的变化才能猜出管子里原来是什么。第二重掩码Running Cell MaskingDecoder 端再次遮住一部分这是 VideoMAE V2 最狠的一招。传统 MAE 的做法Encoder 只看了 10% 的可见格子输出一些理解。然后 Decoder 要把所有被涂黑的90% 格子全部重建出来——相当于让 Decoder 做 90% 的填空题。VideoMAE V2 的做法从这 90% 被涂黑的格子里再随机挑一部分比如只挑 45%剩下的直接不管了。换句话说Decoder 的输入端再次被掩码——那些被二次选中的格子才需要重建其他的连重建任务都被取消了。遮住哪里在 Decoder 输入时大部分被 Encoder 掩码的格子再次被遮住不参与 Decoder 计算。没遮住哪里只有被双重选中的那一小部分格子才会进入 Decoder 并被重建。为什么这么设计三个原因1. 视频冗余实在太多了视频的信息密度比图片低得多。一帧 1920×1080 的画面真正在动的可能只有 10% 的区域。你不需要把每个像素都重建出来重建一半就能学到足够的本领。2. Decoder 是新的瓶颈在 VideoMAE V1 里Encoder 虽然只处理 10% 的 token但 Decoder 要处理100%10% 的 Encoder 输出 90% 的 mask token。当模型变大比如 ViT-g十亿参数Decoder 的计算和内存开销变得极其恐怖。Dual Masking 让 Decoder 也只需处理一部分 token训练速度直接提升 1.5~1.8 倍内存占用大幅下降。3. 为了训练巨兽级模型有了这个设计作者才第一次成功训练出了十亿参数ViT-g的视频自监督模型。如果没有 Dual Masking 省下来的资源这种规模的模型在视频上根本训不动。一句话总结Tube Masking是竖着挖管子空间位置固定时间轴全挖空逼模型理解运动Running Cell Masking是重建时再偷工减料Decoder 只重建一部分缺失块逼模型高效学习两者结合用更少的计算训出更大的模型。三、架构图1: VideoMAE V2 双重掩码机制一、故事开场视频是怎么被切进模型的1.1 输入视频一段原始视频假设输入是一段T 帧的视频比如 16 帧分辨率是 224×224。1.2 Cube Embedding把视频切成时空小方块模型不会直接看像素。它先用一个3D 卷积层或线性投影把视频切成很多16×16×2的小立方体Cube空间上每 16×16 像素一块时间上每 2 帧一层每个小立方体被压扁成一个向量token。假设总共切出了N 个 token。这就是图中左下角的“Cube embedding”绿色方块——它们是视频最原始的词语。二、第一幕Tube MaskingEncoder 端90% 被涂黑2.1 什么叫 Tube Masking随机选90% 的时空位置然后在这些位置上所有时间帧的对应格子全部涂黑。就像用一根吸管Tube戳穿整段视频吸管经过的地方从头到尾都是黑的。状态比例颜色去向被 Tube Masking 遮住90%白色图中不进入 Encoder可见Visible10%绿色进入 Encoder2.2 为什么用管子而不是随机点因为视频有时间连续性。如果只遮某一帧的某个格子模型可以偷看前一帧或后一帧同一个位置直接抄答案。Tube Masking 把时间维度也一并挖空彻底堵死抄近道的路逼模型真正理解运动。三、第二幕Encoder 内部——用 10% 的碎片理解世界3.1 Encoder 的输入只有那10% 的绿色 Cube embedding进入 Encoder。它们被加上位置编码告诉模型我在视频的哪个时空位置然后送入ViTVision Transformer。3.2 Encoder 内部在做什么Encoder 是一个标准的 Transformer Encoder由多层自注意力Self-Attention和前馈网络FFN组成。核心操作自注意力每个可见 token 都会看向其他可见 token比如一个 token 看到左边有个手在抬起来另一个看到右边有个球在飞通过注意力权重它们互相交换信息形成全局时空理解输出Latent Representation蓝色方块每个可见 token 经过 Encoder 后变成一个高维语义向量这个向量不再代表原始像素而是代表这里有一个运动的肢体边缘速度大概是…图中标注为“Latent representation”蓝色Encoder 的本质从 10% 的碎片中提炼出对整个视频时空结构的深层理解。四、第三幕Running Cell MaskingDecoder 端再次筛选这是 VideoMAE V2 的核心创新。4.1 90% 被遮住的区域现在要被二次审判在 Tube Masking 遮住的 90% 区域中模型再次抽签状态比例颜色命运被 Running Cell Masking 选中~45%粉色需要重建进入 Decoder被彻底丢弃~45%白色连重建任务都不给直接忽略原本可见10%蓝色作为线索进入 Decoder4.2 为什么叫Running Cell“Running” 意味着这些被选中的重建目标在时空维度上是分散跳跃的不像 Tube 那样连续像一个个奔跑的单元格Cell。4.3 为什么再次丢弃 45%因为视频的冗余度极高。如果让 Decoder 重建全部 90%就像让小学生把整本字典抄一遍——累死人但学不到多少真本事。只重建一部分比如 45%既保留了足够的难度又大幅降低了计算量。五、第四幕C 处的融合——“把线索和填空题拼在一起”这是整个图中最关键的交汇点。5.1 融合前有什么蓝色方块Encoder 输出的 Latent representation10% 可见区域的深层理解粉色方块Learnable mask token45% 被选中的重建位置的占位符5.2 灰色方块到底是什么它不是原始像素也不是零向量。它是一个可学习的嵌入向量类似 NLP 里的 [MASK] token在训练过程中不断更新。它的作用就像一个空白答题卡上的下划线“这个位置有个洞请根据上下文把它填上”。5.3 C 处的操作拼接Concatenate把蓝色序列和灰色序列拼成一个长序列[蓝色1, 蓝色2, ..., 蓝色10%, 灰色1, 灰色2, ..., 灰色45%]总长度 10% 45% 55% 的原始 token 数量。5.4 为什么要拼接因为 Decoder 是 Transformer它依靠自注意力机制工作。只有把已知线索蓝色和待填空位置灰色放在同一个序列里灰色 token 才能通过注意力层**主动询问**蓝色 token“我这边应该是什么颜色”“旁边那个可见块在做什么运动”“整体场景是室内还是室外”如果不拼接Decoder 只看到一堆空白占位符没有任何上下文根本无从重建。六、第五幕Decoder 内部——“做填空题”6.1 Decoder 的输入拼接后的序列蓝色 灰色加上位置编码。6.2 Decoder 内部在做什么Decoder 通常比 Encoder小且浅例如 Encoder 24 层Decoder 只有 4-8 层。核心操作交叉注意力 自注意力灰色 token 通过自注意力互相交流“我左边那个洞应该是什么”灰色 token 通过注意力看向蓝色 token“让我看看 Encoder 对那个可见区域的理解…”蓝色 token 作为锚点提供全局时空上下文6.3 输出Reconstructed Pixel粉色方块Decoder 的每个输出对应一个灰色位置的重建结果输出维度 原始 Cube 的像素维度如 16×16×2×3 1536这些输出是归一化后的像素值图中标注为“Reconstructed pixel”粉色。七、第六幕损失函数——只算被选中的填空题7.1 损失计算范围MSE 损失只计算那 45% 被 Running Cell Masking 选中的位置Loss MSE( Decoder 输出的粉色, 原始视频对应位置的像素 )7.2 谁不算损失被丢弃的 45%连题都没出不算原本可见的 10%Encoder 已经看过它们了不需要重建不算7.3 为什么这样设计这是MAEMasked Autoencoder的核心哲学不对称设计Encoder 重、Decoder 轻Encoder 看得少、Decoder 填得少把计算预算集中在理解上而不是复制上如果重建全部 90%Decoder 会变成像素复制机而不是语义理解器八、第七幕训练流程——三阶段渐进式毕业VideoMAE V2 不是一步到位的而是像读博士一样分阶段进阶阶段 1大规模无监督预训练Pre-training数据UnlabeledHybrid约135 万未标注视频来自 Web、YouTube、Instagram、Movies 等任务Dual Masking 自监督重建目标让模型学会通用的视频时空理解模型规模从 ViT-S 到 ViT-g十亿参数关键Dual Masking 让 ViT-g 的训练成为可能节省 1.5~1.8 倍计算阶段 2有监督后预训练Post-pretraining数据LabeledHybridK400 K600 K700 混合有标签任务用标签数据进行中间监督训练目标作为桥梁把从无标签数据学到的通用表征对齐到人类定义的动作语义上原因下游数据集如 Something-Something通常很小直接从无标签跳到微调会有语义鸿沟阶段 3下游任务微调Fine-tuning数据具体下游数据集如 Kinetics-400、Something-Something、AVA 等任务分类、检测、时序动作检测等操作加载预训练权重替换头部Head端到端微调九、第八幕推理流程——“毕业后的工作”训练完成后模型怎么在真实任务中使用9.1 丢弃 Decoder只用 Encoder在下游任务推理时Decoder 被完全扔掉。只保留Encoder和任务特定的Head分类头、检测头等。9.2 为什么能扔掉 Decoder因为 Encoder 输出的Latent representation蓝色方块已经是高质量的语义特征。Decoder 只是训练时用来监督 Encoder 学习的一个教练学完后教练就可以退休了。9.3 推理时的数据流输入视频 → Cube Embedding → Tube Masking?注意推理时不需要掩码推理时Encoder 会看全部 token100%输出全部位置的 Latent representation。然后送入任务 Head分类任务对所有 token 做全局池化Global Average Pooling送入分类头检测/分割任务保留时空特征图结构送入检测头9.4 为什么推理不用掩码掩码Masking是训练时的练习题目的是逼 Encoder 学会从残缺信息中提炼理解。推理时我们给 Encoder 看完整视频它用学到的能力提取特征自然比训练时更准。十、大结局Dual Masking 的完整故事线让我用一张图串起整个故事[输入视频] ↓ [Cube Embedding] —— 切成时空小方块绿色 ↓ [Tube Masking] —— 90% 涂黑10% 幸存绿色→Encoder ↓ [Encoder] —— 看 10%提炼深层理解蓝色 Latent ↓ [Running Cell Masking] —— 在 90% 中再选 45% 重建粉色 ↓ [C 处融合] —— 蓝色线索 灰色占位符拼接 ↓ [Decoder] —— 做填空题输出粉色重建像素 ↓ [Loss] —— 只算 45% 的 MSE ↓ [训练完成] ↓ [推理时] —— 扔掉 DecoderEncoder 看 100% 视频输出特征给下游任务十一、为什么这个设计能训练出十亿参数的模型这是 VideoMAE V2 的终极意义瓶颈原始 MAE/VideoMAE V1VideoMAE V2Dual MaskingEncoder 计算只处理 10%只处理 10%Decoder 计算处理 100%10% 输出 90% mask token只处理 55%10% 45%训练速度慢提升 1.5~1.8 倍内存占用高显著降低可训练模型规模最大到 ViT-L首次达到 ViT-g十亿级Dual Masking 的本质视频的信息冗余实在太多没必要全部重建。通过Encoder 端竖着挖管子 Decoder 端跳着做填空用更少的计算逼出更强的理解。这就是 VideoMAE V2 的完整故事一个用故意遮住大部分视频来训练十亿参数巨兽的自监督学习传奇。