【免费下载链接】videomae-small-finetuned-ssv2
videomae-small-finetuned-ssv2 是一个基于 VideoMAE 架构、经自监督预训练后在 Something-Something V2(SSV2)数据集上微调的小型视频分类模型,可将视频输入识别为 174 种日常物体交互动作之一。本文将它的两大核心 API——VideoMAEForVideoClassification(分类模型)和 VideoMAEFeatureExtractor(视频特征提取器)的全部参数逐一拆解,帮你快速上手视频分类任务 🎬。
模型定位:VideoMAE 小模型能做什么?
VideoMAE 是 Masked Autoencoders(MAE)思想在视频领域的扩展,架构类似 ViT(Vision Transformer):
- 视频被切成 16×16 像素的图块(patch),并沿时间维度按 tubelet_size=2 打包成"体素块"
- 序列前加 [CLS] token,其最终隐状态即整段视频的特征表示
- 该模型已接好分类头,开箱即用于 SSV2 的 174 类动作识别
- 测试集表现:Top-1 准确率 66.8%,Top-5 准确率 90.3%
一句话总结:有 SSV2 风格的动作识别需求,或想拿它做视频特征底座微调其他任务,选它就对了。
快速上手:5 步完成视频分类
from transformers import VideoMAEFeatureExtractor, VideoMAEForVideoClassification
import numpy as np, torch
# 1. 加载特征提取器 + 模型
feature_extractor = VideoMAEFeatureExtractor.from_pretrained("MCG-NJU/videomae-small-finetuned-ssv2")
model = VideoMAEForVideoClassification.from_pretrained("MCG-NJU/videomae-small-finetuned-ssv2")
# 2. 准备视频:形状为 (num_frames, 3, H, W) 的帧列表,本模型为 (16, 3, 224, 224)
video = list(np.random.randn(16, 3, 224, 224))
# 3. 预处理:自动 resize、中心裁剪、归一化
inputs = feature_extractor(video, return_tensors="pt")
# 4. 前向推理
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
# 5. 读取预测类别
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
关键点:
| 步骤 | 要点 |
|---|---|
| 视频输入 | 帧序列列表,每帧形状 (3, 224, 224),共 16 帧 |
return_tensors="pt" | 输出 PyTorch 张量;也可用 "np" / "tf" |
| 读取类别名 | 通过 model.config.id2label 字典映射 |
VideoMAEFeatureExtractor 全参数参考
参数默认值定义在 preprocessor_config.json 中:
| 参数名 | 本模型取值 | 含义说明 |
|---|---|---|
feature_extractor_type | VideoMAEFeatureExtractor | 特征提取器类型标识 |
do_resize | true | 是否缩放输入视频帧 |
size | 224 | 缩放目标尺寸(宽高均 224) |
resample | 2 | 插值方式,2 表示 BICUBIC(双三次) |
do_center_crop | true | 是否做中心裁剪(防止非正方形画面拉伸变形) |
do_normalize | true | 是否归一化像素值 |
image_mean | [0.485, 0.456, 0.406] | ImageNet 训练集 RGB 三通道均值 |
image_std | [0.229, 0.224, 0.225] | ImageNet 训练集 RGB 三通道标准差 |
调用时可临时覆盖的参数(无需修改配置文件):
inputs = feature_extractor(
video,
return_tensors="pt", # 张量框架:pt / np / tf
do_pad=True, # 视频长短不一时是否填充对齐
padding="longest", # 以批中最长视频为准填充
)
💡 小贴士:
image_mean/image_std采用 ImageNet 统计值,如果你的视频数据色彩分布差异极大,微调时可自行调整。
VideoMAEForVideoClassification 全参数参考
模型超参定义在 config.json 中,按模块分组速查:
编码器(Encoder)核心参数
| 参数名 | 本模型取值 | 含义说明 |
|---|---|---|
model_type | videomae | 模型架构类型 |
hidden_size | 384 | 编码器隐藏层维度(决定模型"大小") |
num_hidden_layers | 12 | Transformer 编码器层数 |
num_attention_heads | 16 | 多头注意力头数(384 ÷ 16 = 24/头) |
intermediate_size | 1536 | 前馈网络(FFN)中间维度 |
image_size | 224 | 输入帧分辨率 |
patch_size | 16 | 空间图块大小(16×16,即每帧 14×14=196 个 patch) |
tubelet_size | 2 | 时间维体素块长度(每 2 帧合并为一个时间 token) |
num_frames | 16 | 固定输入帧数 |
num_channels | 3 | 输入通道数(RGB) |
hidden_act | gelu | 激活函数 |
layer_norm_eps | 1e-12 | LayerNorm 数值稳定项 |
qkv_bias | true | 注意力 Q/K/V 投影是否使用偏置 |
initializer_range | 0.02 | 权重初始化截断正态分布标准差 |
hidden_dropout_prob | 0.0 | 隐层 Dropout(推理配置为 0) |
attention_probs_dropout_prob | 0.0 | 注意力 Dropout(推理配置为 0) |
torch_dtype | float32 | 权重存储精度 |
解码器(Decoder)参数
| 参数名 | 本模型取值 | 含义说明 |
|---|---|---|
decoder_hidden_size | 192 | 解码器隐藏层维度(比编码器更窄) |
decoder_intermediate_size | 768 | 解码器 FFN 中间维度 |
decoder_num_attention_heads | 3 | 解码器注意力头数 |
decoder_num_hidden_layers | 12 | 解码器层数 |
norm_pix_loss | true | 预训练时使用像素级归一化损失(仅预训练阶段生效) |
分类头与标签参数
| 参数名 | 本模型取值 | 含义说明 |
|---|---|---|
use_mean_pooling | true | 用全部 token 均值池化(而非仅 [CLS])输出视频表示 |
id2label | 174 项字典 | 类别 ID → 动作名,如 "0": "Approaching [something] with your camera" |
label2id | 174 项字典 | 动作名 → 类别 ID 的反向映射 |
📌 完整 174 类标签列表可直接查看 config.json,涵盖抓取、倾倒、推拉、折叠等物体交互动作。
输出解读:logits 长什么样?
模型前向输出 outputs.logits 形状为 (batch_size, 174):
- 每一行对应一段视频,174 个值分别是各类别的未归一化得分
argmax(-1)取得分最高的类别 ID- 如需概率分布,套一层
torch.softmax(logits, -1)即可
probs = torch.softmax(logits, dim=-1)
top3 = torch.topk(probs[0], k=3) # 查看置信度前三的动作
for score, idx in zip(top3.values, top3.indices):
print(model.config.id2label[idx.item()], score.item())
文件清单:这个仓库里有什么?
| 文件 | 作用 |
|---|---|
| README.md | 模型卡:架构说明、使用示例、评估结果 |
| config.json | 模型超参 + 174 类标签映射(上方参数表的来源) |
| preprocessor_config.json | 视频预处理参数(resize / 裁剪 / 归一化) |
| pytorch_model.bin | PyTorch 格式模型权重 |
常见问题 FAQ
Q1:视频分类输入必须是 16 帧吗? 是的,num_frames=16 是预训练时的固定设定。实际项目中先用 OpenCV 或 decord 按固定帧率采样 16 帧,再交给 feature_extractor 处理。
Q2:能换数据集继续微调吗? 可以。将分类头换成你目标类别数(修改 id2label/label2id),加载本模型权重做监督微调即可,这正是预训练模型的价值所在。
Q3:需要安装哪些依赖? transformers、torch 为必备;读取真实视频还需 opencv-python 或 av。安装 transformers 后即可用 from_pretrained 一键加载本模型。
Q4:VideoMAEForVideoClassification 与基础 VideoMAEModel 的区别? 前者内置分类头,直接输出 174 类 logits;后者只输出隐状态,适合自建下游任务(如自训分类器、做特征提取)。
写在最后
这份速查覆盖了 videomae-small-finetuned-ssv2 视频分类模型的全部可调参数:特征侧 8 项预处理参数 + 模型侧编码器、解码器、分类头共 20 余项配置。配合上方 5 步代码骨架,你已具备完成一段视频动作识别推理的全部信息 🚀
【免费下载链接】videomae-small-finetuned-ssv2
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



