- 计算机视觉
- 深度学习
- 预训练
【免费下载链接】gluon-cv
Gluon CV Toolkit
本文以 GluonCV 官方 Model Zoo 文档(docs/model_zoo/action_recognition.rst)为骨架,系统介绍视频动作识别任务中可用的一系列预训练模型——覆盖 MXNet 与 PyTorch 双框架、五大公开数据集(Kinetics400 / Kinetics700 / UCF101 / HMDB51 / Something-Something-V2)。读完本文,你将掌握:如何通过get_model与 hashtag 机制精确下载指定版本的预训练权重、如何用train_recognizer.py/train_ddp_pytorch.py复现论文精度、如何用test_recognizer.py完成多视角评测,以及如何用inference.py对任意视频做端到端分类推理。
模型动物园总览:从 2D 到 3D 的动作识别模型矩阵
动作识别(Action Recognition / Video Classification)是计算机视觉的核心任务之一,目标是判断一段视频中人类正在执行的动作类别。GluonCV 的 Model Zoo 页(docs/model_zoo/index.rst)将 Action Recognition 与分类、检测、分割、姿态估计、深度估计并列,提供了完整的模型选择入口,同时按框架划分为MXNet与PyTorch两大体系(分别由 action_recognition_mxnet.rst 与 action_recognition_torch.rst 组织)。
从模型家族看,仓库覆盖了动作识别领域的经典与前沿架构:
- 2D 时序聚合类:TSN(Temporal Segment Networks)系列,基于 InceptionV1 / InceptionV3 / ResNet v1b / VGG16 骨干;
- 3D 卷积类:C3D、P3D(Pseudo-3D Residual Networks)、R2+1D(Channel-Separated 3D Conv)、I3D(Inflated 3D ConvNets)及其 Non-local 变体;
- 双流多速率类:SlowFast(Slow 与 Fast 双分支)、I3D Slow-only 系列;
- 多尺度时序金字塔类:TPN(Temporal Pyramid Network);
- 通道分离卷积类:IR-CSN(Channel-Separated Convolutional Networks)。
这些模型定义均可在源码中找到,例如 gluoncv/model_zoo/action_recognition/init.py 中导出了c3d、p3d、r2plus1d、i3d_resnet、i3d_inceptionv1、i3d_inceptionv3、slowfast、i3d_slow、actionrec_vgg16、actionrec_inceptionv1/3、actionrec_resnetv1b等模块;PyTorch 侧对应实现位于 gluoncv/torch/model_zoo/action_recognition。
预训练权重下载:get_model与 hashtag 机制
文档强调,同一模型可能存在多组不同训练方式得到的参数,通过hashtag(哈希标签)加以区分。加载方式有两种:
# 方式一:加载默认预训练权重 net = get_model('i3d_resnet50_v1_kinetics400', pretrained=True) # 方式二:通过 hashtag 加载指定版本的权重 net = get_model('i3d_resnet50_v1_kinetics400', pretrained='568a722e')从 gluoncv/model_zoo/model_zoo.py 的get_model实现可以看出其工作机理:pretrained参数既可以是布尔值(加载默认权重),也可以是字符串(代表特定版本的 hashtag);内部通过_models注册表(如'i3d_slow_resnet101_f16s4_kinetics700': i3d_slow_resnet101_f16s4_kinetics700)按名称查找构造函数,未注册的名称会抛出带完整模型列表的ValueError。权重文件默认存放在~/.mxnet/models目录下。
下文各数据集的模型表格中,Hashtag列即为可传入pretrained='xxx'的字符串;表格中标注为灰色名称的模型(即表中的非默认版本),均可通过传入对应 hashtag 下载。
MXNet 实战:训练、测试与推理三件套
MXNet 侧提供了三份核心脚本,均可从文档直接下载使用,位于 scripts/action-recognition 目录:
| 脚本 | 用途 |
|---|---|
train_recognizer.py | 在公开或自定义数据集上训练动作识别模型 |
test_recognizer.py | 评估模型在验证集上的 Top-1 / Top-5 精度 |
inference.py | 对自定义视频列表做端到端推理(演示用途) |
训练:train_recognizer.py 关键参数解析
训练脚本的完整命令行参数定义见 scripts/action-recognition/train_recognizer.py,核心参数如下:
数据与数据集
--dataset:可选ucf101、kinetics400、somethingsomethingv2、hmdb51、custom,默认ucf101;--data-dir/--val-data-dir:训练/验证数据路径,默认~/.mxnet/datasets/ucf101/rawframes;--train-list/--val-list:训练/验证样本列表文件路径;--num-classes:类别数,默认 101;--num-segments:将视频均匀切分的片段数(TSN 核心参数),默认 1;--new-length/--new-step:视频序列长度与采样步长;--video-loader/--use-decord:设为 True 时直接读取视频而非逐帧图片,并优先使用 Decord 视频解码器(否则回退 mmcv loader);--input-5d:输入为 4D 还是 5D 张量,5D 用于 3D CNN 模型。
模型与初始化
--model(必填):模型名称,如i3d_resnet50_v1_kinetics400;--use-pretrained:启用 GluonCV 预训练权重;若同时传入--hashtag,则加载该 hashtag 对应的权重版本;--input-size:输入尺寸,默认 224(InceptionV3 为 299,C3D / R2+1D 为 112);--use-tsn:是否启用 Temporal Segment Networks;--partial-bn/--freeze-bn:仅训练首个 BN 层 / 冻结全部 BN 层(对 Kinetics 这类大模型迁移到小数据集非常实用,源码中以正则train_patterns过滤可训练参数实现,见 train_recognizer.py);--slowfast:启用 SlowFast 专用的双分支数据加载器,同时会配合--slow-temporal-stride(默认 16)与--fast-temporal-stride(默认 2)做稀疏采样。
训练策略
--num-epochs、--batch-size(单设备 batch size,源码会自动乘以 GPU 数)、--num-gpus;--lr(默认 0.1)、--momentum(0.9)、--wd(0.0001);--lr-mode:step/poly/cosine;--lr-decay-epoch(默认40,60)、--lr-decay(0.1);--warmup-lr/--warmup-epochs:学习率预热;--mixup/--mixup-alpha/--mixup-off-epoch:mixup 数据增强;--label-smoothing、--last-gamma、--no-wd、--use-gn(GroupNorm);--use-amp:自动混合精度训练(源码中通过mxnet.contrib.amp的init/scale_loss实现);--accumulate:梯度累积,大于 1 时等效放大 batch size(源码将梯度模式设为add并在累积步数处step);--partial-bn之外,--mode可指定symbolic/imperative/hybrid;--save-dir、--save-frequency、--resume-epoch、--resume-params、--resume-states:模型保存与断点续训。
数据增强管线
--data-aug参数支持v1/v2/v3/v4四种管线(见 train_recognizer.py):
v1:GluonCV 风格,不保持宽高比的多尺度裁剪(配合--scale-ratios,默认1.0, 0.875, 0.75, 0.66);v2:GluonCV 风格但保持宽高比,同 mmaction 风格;v3:PySlowFast 风格,随机短边尺度抖动;v4:mmaction 风格,仅用于 SlowFast 家族,与v3类似。
测试:test_recognizer.py 多视角评测
scripts/action-recognition/test_recognizer.py 除参数与训练脚本大体一致外,还提供评测视角控制与量化部署能力:
--ten-crop/--three-crop:10 裁剪 / 3 裁剪多视角评测,内部自动设置num_crop = 10 / 3;--benchmark:用随机 dummy 数据做吞吐量基准测试(含 dry run 预热);--calibration/--num-calib-batches/--calib-mode(none/naive/entropy)/--quantized-dtype:对 FP32 模型做 INT8 量化校准与导出;--quantized:直接加载 INT8 预训练模型(模型名自动追加_int8后缀);--use-softmax:输出 softmax 分数;--deploy/--model-prefix:加载导出的静态 SymbolBlock 模型做部署推理。
测试逻辑本身(test_recognizer.py)使用Accuracy与TopKAccuracy(5)两个 metric 计算 Top-1 / Top-5 精度,并对多视角输入做reshape((-1,) + X.shape[2:])融合。
推理:inference.py 对自定义视频做预测
scripts/action-recognition/inference.py 面向演示场景,支持:
- 直接给定视频列表
--data-list(每行一个视频路径),配合--need-root决定是否拼接--data-dir根路径; - 使用 Decord 解码器读取视频,按测试模式采样
segment_indices与skip_offsets(复用VideoClsCustom的采样方法); --num-classes默认 400,模型名含kinetics400/ucf101/hmdb51/sthsth时自动加载对应数据集的类别名,将预测索引翻译为可读的动作标签;--save-logits/--save-preds:逐视频保存 logits 或预测标签为.npy文件;- 结果输出形如
0001/0100: xxx.mp4 is predicted to class drinking,并写入--save-dir(默认./predictions)。
此外,feat_extract.py(scripts/action-recognition/feat_extract.py)可基于预训练模型批量提取视频特征,供下游任务使用。
PyTorch 实战:DDP 分布式训练与 YAML 配置
PyTorch 侧的入口脚本为train_ddp_pytorch.py与test_ddp_pytorch.py(位于 scripts/action-recognition),均以--config-file CONFIG方式运行:
# 训练 python train_ddp_pytorch.py --config-file CONFIG # 测试(若想使用 Model Zoo 预训练权重,请在配置文件中设置 MODEL.PRETRAINED = True) python test_ddp_pytorch.py --config-file CONFIG从 scripts/action-recognition/train_ddp_pytorch.py 的源码可以看出完整的训练链路:get_cfg_defaults(name='action_recognition')加载默认配置 →merge_from_file(args.config_file)合并 YAML →spawn_workers(main_worker, cfg)启动分布式 worker;主循环中依次完成模型创建(get_model(cfg))、数据加载(build_dataloader(cfg))、SGD 优化器与学习率调度(Step 或 Cosine,配合GradualWarmupScheduler预热)、训练与周期性验证(train_classification/validation_classification)、按LOG.SAVE_FREQ保存 checkpoint。
以 configuration/i3d_resnet50_v1_kinetics400.yaml 为例,配置分四大块:
DDP_CONFIG(分布式环境)
WORLD_SIZE/WORLD_RANK/GPU_WORLD_SIZE/GPU_WORLD_RANK:分布式拓扑;DIST_URL:初始化方法 URL(tcp 协议);DIST_BACKEND:nccl;DISTRIBUTED:是否启用分布式训练。
CONFIG.TRAIN(训练超参)
EPOCH_NUM(i3d_resnet50 配置为 100)、BATCH_SIZE(8)、LR(0.01)、MOMENTUM(0.9)、W_DECAY(1e-5);LR_POLICY:Step或Cosine;LR_MILESTONE(如[40, 80])与STEP(0.1)用于 Step 衰减,WARMUP_EPOCHS(如 slowfast 配置中的 34)配合USE_WARMUP使用;- SlowFast 家族配置(如 slowfast_4x16_resnet50_kinetics400.yaml)通常使用
Cosine策略、196 个 epoch 与 34 个预热 epoch。
CONFIG.DATA(数据管线)
TRAIN_ANNO_PATH/VAL_ANNO_PATH:训练/验证标注列表;TRAIN_DATA_PATH/VAL_DATA_PATH:帧或视频根目录;NUM_CLASSES(400)、CLIP_LEN(32)、FRAME_RATE(2,即跳帧率)、NUM_SEGMENT(1)、NUM_CROP(1);TEST_NUM_SEGMENT(10)/TEST_NUM_CROP(3):测试时使用的多视角数,对应文档中"3D 网络 30 views(10 clips × 3 crops)"的约定;KEEP_ASPECT_RATIO:是否保持宽高比。
CONFIG.MODEL 与 CONFIG.LOG
NAME:模型名(如i3d_resnet50_v1_kinetics400);PRETRAINED:是否加载 Model Zoo 权重,评测时务必设为True;BASE_PATH/LOG_DIR(tensorboard 日志)/SAVE_DIR(checkpoint)/EVAL_DIR/SAVE_FREQ。
预训练模型清单:五个数据集的精度速查表
文档指出,所有预训练模型均复现了近期 SOTA 论文报告的结果,细节请参阅各论文原文(见文末参考文献)。以下表格整理了文档中的完整模型清单(MXNet 与 PyTorch 两个体系;Segments/Clip Length含义见下一节约定)。
Kinetics400 数据集(MXNet 版)
| 模型名 | 预训练 | Segments | Clip Length | Top-1 (%) | Hashtag |
|---|---|---|---|---|---|
| inceptionv1_kinetics400 | ImageNet | 7 | 1 | 69.1 | 6dcdafb1 |
| inceptionv3_kinetics400 | ImageNet | 7 | 1 | 72.5 | 8a4a6946 |
| resnet18_v1b_kinetics400 | ImageNet | 7 | 1 | 65.5 | 46d5a985 |
| resnet34_v1b_kinetics400 | ImageNet | 7 | 1 | 69.1 | 8a8d0d8d |
| resnet50_v1b_kinetics400 | ImageNet | 7 | 1 | 69.9 | cc757e5c |
| resnet101_v1b_kinetics400 | ImageNet | 7 | 1 | 71.3 | 5bb6098e |
| resnet152_v1b_kinetics400 | ImageNet | 7 | 1 | 71.5 | 9bc70c66 |
| c3d_kinetics400 | Scratch | 1 | 16 (32/2) | 59.5 | a007b5fa |
| p3d_resnet50_kinetics400 | Scratch | 1 | 16 (32/2) | 71.6 | 671ba81c |
| p3d_resnet101_kinetics400 | Scratch | 1 | 16 (32/2) | 72.6 | b30e3a63 |
| r2plus1d_resnet18_kinetics400 | Scratch | 1 | 16 (32/2) | 70.8 | 5a14d1f9 |
| r2plus1d_resnet34_kinetics400 | Scratch | 1 | 16 (32/2) | 71.6 | de2e592b |
| r2plus1d_resnet50_kinetics400 | Scratch | 1 | 16 (32/2) | 73.9 | deaefb14 |
| i3d_inceptionv1_kinetics400 | ImageNet | 1 | 32 (64/2) | 71.8 | 81e0be10 |
| i3d_inceptionv3_kinetics400 | ImageNet | 1 | 32 (64/2) | 73.6 | f14f8a99 |
| i3d_resnet50_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 74.0 | 568a722e |
| i3d_resnet101_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.1 | 6b69f655 |
| i3d_nl5_resnet50_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.2 | 3c0e47ea |
| i3d_nl10_resnet50_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.3 | bfb58c41 |
| i3d_nl5_resnet101_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 76.0 | fbfc1d30 |
| i3d_nl10_resnet101_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 76.1 | 59186c31 |
| slowfast_4x16_resnet50_kinetics400 | Scratch | 1 | 36 (64/1) | 75.3 | 9d650f51 |
| slowfast_8x8_resnet50_kinetics400 | Scratch | 1 | 40 (64/1) | 76.6 | d6b25339 |
| slowfast_8x8_resnet101_kinetics400 | Scratch | 1 | 40 (64/1) | 77.2 | fbde1a7c |
Kinetics400 数据集(PyTorch 版)
| 模型名 | 预训练 | Segment | Clip Length | Top-1 (%) | Hashtag |
|---|---|---|---|---|---|
| resnet18_v1b_kinetics400 | ImageNet | 7 | 1 | 66.73 | 854b23e4 |
| resnet34_v1b_kinetics400 | ImageNet | 7 | 1 | 69.85 | 124a2fa4 |
| resnet50_v1b_kinetics400 | ImageNet | 7 | 1 | 70.88 | 9939dbdf |
| resnet101_v1b_kinetics400 | ImageNet | 7 | 1 | 72.25 | 172afa3b |
| resnet152_v1b_kinetics400 | ImageNet | 7 | 1 | 72.45 | 3dedb835 |
| r2plus1d_v1_resnet18_kinetics400 | Scratch | 1 | 16 (32/2) | 71.72 | 340a5952 |
| r2plus1d_v1_resnet34_kinetics400 | Scratch | 1 | 16 (32/2) | 72.63 | 5102fd17 |
| r2plus1d_v1_resnet50_kinetics400 | Scratch | 1 | 16 (32/2) | 74.92 | 9a3b665c |
| r2plus1d_v2_resnet152_kinetics400 | IG65M | 1 | 16 (32/2) | 81.34 | 42707ffc |
| ircsn_v2_resnet152_f32s2_kinetics400 | IG65M | 1 | 32 (64/2) | 83.18 | 82855d2c |
| i3d_resnet50_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 74.87 | 18545497 |
| i3d_resnet101_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.1 | a9bb4f89 |
| i3d_nl5_resnet50_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.17 | 9df1e103 |
| i3d_nl10_resnet50_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.93 | 281e1e8a |
| i3d_nl5_resnet101_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.81 | 2cea8edd |
| i3d_nl10_resnet101_v1_kinetics400 | ImageNet | 1 | 32 (64/2) | 75.93 | 526a2ed0 |
| slowfast_4x16_resnet50_kinetics400 | Scratch | 1 | 32 (64/2) | 75.25 | 1d1eadb2 |
| slowfast_8x8_resnet50_kinetics400 | Scratch | 1 | 32 (64/2) | 76.66 | e94e9a57 |
| slowfast_8x8_resnet101_kinetics400 | Scratch | 1 | 32 (64/2) | 76.95 | db5e9fef |
| i3d_slow_resnet50_f32s2_kinetics400 | Scratch | 1 | 32 (64/2) | 77.89 | 078c817b |
| i3d_slow_resnet50_f16s4_kinetics400 | Scratch | 1 | 16 (64/4) | 76.36 | a3e419f1 |
| i3d_slow_resnet50_f8s8_kinetics400 | Scratch | 1 | 8 (64/8) | 74.41 | 1c3d98a1 |
| i3d_slow_resnet101_f32s2_kinetics400 | Scratch | 1 | 32 (64/2) | 78.57 | db37cd51 |
| i3d_slow_resnet101_f16s4_kinetics400 | Scratch | 1 | 16 (64/4) | 77.11 | cb6b78d9 |
| i3d_slow_resnet101_f8s8_kinetics400 | Scratch | 1 | 8 (64/8) | 76.15 | 82e399c1 |
| tpn_resnet50_f8s8_kinetics400 | Scratch | 1 | 8 (64/8) | 77.04 | 368108eb |
| tpn_resnet50_f16s4_kinetics400 | Scratch | 1 | 16 (64/4) | 77.33 | 6bf899df |
| tpn_resnet50_f32s2_kinetics400 | Scratch | 1 | 32 (64/2) | 78.9 | 27710ce8 |
| tpn_resnet101_f8s8_kinetics400 | Scratch | 1 | 8 (64/8) | 78.1 | 092c2f7f |
| tpn_resnet101_f16s4_kinetics400 | Scratch | 1 | 16 (64/4) | 79.39 | 647080df |
| tpn_resnet101_f32s2_kinetics400 | Scratch | 1 | 32 (64/2) | 79.7 | a94422a9 |
说明:PyTorch 版
r2plus1d_v2_resnet152、ircsn_v2_resnet152与 TPN 家族的权重由 VMZ 与 TPN 官方仓库移植而来,训练配置可暂不关注。上述模型的对应训练配置均可在 scripts/action-recognition/configuration 中找到同名 YAML 文件。
Kinetics700 数据集
两个框架下均提供i3d_slow_resnet101_f16s4_kinetics700:MXNet 版 Top-1 67.65(hashtag299b1d9d),PyTorch 版 Top-1 67.65(hashtagb5be1a2e),预训练方式均为 Scratch,Segments 1、Clip Length 16 (64/4)。
UCF101 数据集(MXNet 版)
| 模型名 | 预训练 | Segments | Clip Length | Top-1 (%) | Hashtag |
|---|---|---|---|---|---|
| vgg16_ucf101 | ImageNet | 3 | 1 | 83.4 | d6dc1bba |
| vgg16_ucf101 | ImageNet | 1 | 1 | 81.5 | 05e319d4 |
| inceptionv3_ucf101 | ImageNet | 3 | 1 | 88.1 | 13ef5c3b |
| inceptionv3_ucf101 | ImageNet | 1 | 1 | 85.6 | 0c453da8 |
| i3d_resnet50_v1_ucf101 | ImageNet | 1 | 32 (64/2) | 83.9 | 7afc7286 |
| i3d_resnet50_v1_ucf101 | ImageNet, K400 | 1 | 32 (64/2) | 95.4 | 760d0981 |
注意:UCF101 的 Top-1 为官方 split 1 的结果,而非 3 个 split 的平均值;
K400表示以 Kinetics400 预训练权重初始化,可以显著提升精度(I3D 从 83.9 提升至 95.4)。
HMDB51 数据集(MXNet 版)
| 模型名 | 预训练 | Segments | Clip Length | Top-1 (%) | Hashtag |
|---|---|---|---|---|---|
| resnet50_v1b_hmdb51 | ImageNet | 3 | 1 | 55.2 | 682591e2 |
| resnet50_v1b_hmdb51 | ImageNet | 1 | 1 | 52.2 | ba66ee4b |
| i3d_resnet50_v1_hmdb51 | ImageNet | 1 | 32 (64/2) | 48.5 | 0d0ad559 |
| i3d_resnet50_v1_hmdb51 | ImageNet, K400 | 1 | 32 (64/2) | 70.9 | 2ec6bf01 |
HMDB51 同样报告官方 split 1 的 Top-1;使用 Kinetics400 预训练后 I3D 从 48.5 大幅提升至 70.9。
Something-Something-V2 数据集
| 框架 | 模型名 | 预训练 | Segments/Clip Length | Top-1 (%) | Hashtag |
|---|---|---|---|---|---|
| MXNet | resnet50_v1b_sthsthv2 | ImageNet | 8 / 1 | 35.5 | 80ee0c6b |
| MXNet | i3d_resnet50_v1_sthsthv2 | ImageNet | 1 / 16 (32/2) | 50.6 | 01961e4c |
| PyTorch | resnet50_v1b_sthsthv2 | ImageNet | 8 / 1 | 35.16 | cbb9167b |
| PyTorch | i3d_resnet50_v1_sthsthv2 | ImageNet | 1 / 16 (32/2) | 49.61 | e975d989 |
Something-Something-V2 以"物体交互动作"为主(如推、拉、放),对时序建模要求更高,因此 I3D 等 3D 模型优势明显。
关键约定:输入尺寸、Clip Length 与 Segments 的语义
理解上述表格中的数字是正确复现精度的前提,文档给出了三条重要约定:
- 输入尺寸:除特别说明外,所有模型使用 224×224 训练;
InceptionV3使用 299×299,C3D与R2+1D使用 112×112(PyTorch 版 R2+1D 同样为 112×112); - Clip Length:一个输入 clip 内的帧数。
32 (64/2)表示实际使用 32 帧,但这 32 帧是从视频中随机选取 64 个连续帧后每隔一帧跳帧得到——该策略被广泛采用以降低计算与显存开销; - Segments 与测试视角:
Segments为训练时使用的分段数;测试时遵循惯例,2D 网络使用 250 views(25 frames × 10 crops),3D 网络使用 30 views(10 clips × 3 crops)。这一约定与 PyTorch 配置中的TEST_NUM_SEGMENT: 10、TEST_NUM_CROP: 3一一对应。
关于 SlowFast 的一个已知差距:文档明确指出,SlowFast 家族的性能与论文报告数字存在小幅差距,原因是官方 SlowFast 实现强制将每个视频重编码为固定 30fps,而 GluonCV 为与其他方法公平对比未采用该策略,因而造成这一小差异。这是复现时需要注意的已知现象。
源码佐证:数据类、模型注册与调用链
- 数据集实现:Kinetics400 / UCF101 / SomethingSomethingV2 / HMDB51 / VideoClsCustom 等数据集类定义在 gluoncv/data(如 gluoncv/data/kinetics400/classification.py),训练脚本通过 gluoncv/data/init.py 统一导入;
- 数据变换:
VideoGroupTrainTransform、VideoGroupValTransform及其 V2/V3/V4 变体、VideoTenCrop、VideoThreeCrop等定义于 gluoncv/data/transforms/video.py,是--data-aug参数的实际执行者; - 模型注册:MXNet 侧所有动作识别模型通过 gluoncv/model_zoo/model_zoo.py 的
_models字典注册(如'i3d_slow_resnet101_f16s4_kinetics700': i3d_slow_resnet101_f16s4_kinetics700),PyTorch 侧对应 gluoncv/torch/model_zoo/model_zoo.py;get_model_list()可列出全部可用模型名; - 评测指标:训练/测试脚本使用
mx.metric.Accuracy与mx.metric.TopKAccuracy(5)计算 Top-1 / Top-5,指标实现位于 gluoncv/utils/metrics/accuracy.py; - 分布式采样:多机训练时使用 gluoncv/data/sampler.py 中的
SplitSampler/ShuffleSplitSampler配合 MXNet KVStore 实现数据并行切分。
从模型选择到落地的推荐路径
综合文档与脚本能力,一条完整的实战路径可归纳为:
- 选模型:根据精度需求与硬件约束,在本文模型表中挑选架构(轻量选 TSN/ResNet,精度优先选 I3D Non-local / SlowFast / TPN);
- 拿权重:
get_model(name, pretrained=True)或pretrained='<hashtag>'精确获取指定版本权重,存放于~/.mxnet/models; - 复现/微调:MXNet 用
train_recognizer.py(公开数据集直接跑,自定义数据用--dataset custom+--train-list);PyTorch 用train_ddp_pytorch.py --config-file <yaml>,微调只需改CONFIG.DATA的标注路径与CONFIG.MODEL.PRETRAINED; - 评测:
test_recognizer.py/test_ddp_pytorch.py配合--ten-crop/--three-crop复现文档报告精度; - 推理落地:
inference.py对自定义视频列表输出可读动作标签,或用feat_extract.py抽取特征供给下游任务。
参考文献
- Limin Wang, Yuanjun Xiong, Zhe Wang and Yu Qiao. "Towards Good Practices for Very Deep Two-Stream ConvNets." arXiv preprint arXiv:1507.02159, 2015.(TSN)
- Du Tran, Lubomir Bourdev, Rob Fergus, Lorenzo Torresani and Manohar Paluri. "Learning Spatiotemporal Features with 3D Convolutional Networks." ICCV 2015.(C3D)
- Limin Wang, Yuanjun Xiong, Zhe Wang, Yu Qiao, Dahua Lin, Xiaoou Tang and Luc Van Gool. "Temporal Segment Networks: Towards Good Practices for Deep Action Recognition." ECCV 2016.(TSN)
- Joao Carreira and Andrew Zisserman. "Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset." CVPR 2017.(I3D)
- Zhaofan Qiu, Ting Yao and Tao Mei. "Learning Spatio-Temporal Representation with Pseudo-3D Residual Networks." ICCV 2017.(P3D)
- Du Tran, Heng Wang, Lorenzo Torresani, Jamie Ray, Yann LeCun and Manohar Paluri. "A Closer Look at Spatiotemporal Convolutions for Action Recognition." CVPR 2018.(R2+1D)
- Xiaolong Wang, Ross Girshick, Abhinav Gupta and Kaiming He. "Non-local Neural Networks." CVPR 2018.(Non-local)
- Christoph Feichtenhofer, Haoqi Fan, Jitendra Malik and Kaiming He. "SlowFast Networks for Video Recognition." ICCV 2019.(SlowFast)
- Yang, Ceyuan and Xu, Yinghao and Shi, Jianping and Dai, Bo and Zhou, Bolei. "Temporal Pyramid Network for Action Recognition." CVPR 2020.(TPN)
- Du Tran, Heng Wang, Lorenzo Torresani and Matt Feiszli. "Video Classification with Channel-Separated Convolutional Networks." ICCV 2019.(IR-CSN)
- 计算机视觉
- 深度学习
- 预训练
【免费下载链接】gluon-cv
Gluon CV Toolkit
相关推荐
Kubernetes 新贡献者研讨会工作区设置:从活动组织到本地开发环境搭建的完整指南
Kubernetes 新贡献者研讨会工作区设置:从活动组织到本地开发环境搭建的完整指南 本文面向 Kubernetes 社区中新贡献者研讨会(New Contr
计算机视觉深度学习预训练Detectron2模型动物园:预训练模型全解析
Detectron2模型动物园:预训练模型全解析 本文全面解析了Detectron2模型动物园中的预训练模型,重点围绕COCO数据集上不同模型的性能对比展开。详
人工智能计算机视觉深度学习机器学习Freeze.rs实战案例:如何绕过用户态与内核态EDR监控
Freeze.rs实战案例:如何绕过用户态与内核态EDR监控 Freeze.rs是一款基于Rust开发的EDR绕过工具包,通过挂起进程和直接系统调用技术,帮助安
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考