@inproceedings{lin2019tsm,
title={TSM: Temporal Shift Module for Efficient Video Understanding},
author={Lin, Ji and Gan, Chuang and Han, Song},
booktitle={Proceedings of the IEEE International Conference on Computer Vision},
year={2019}
}
@article{NonLocal2018,
author = {Xiaolong Wang and Ross Girshick and Abhinav Gupta and Kaiming He},
title = {Non-local Neural Networks},
journal = {CVPR},
year = {2018}
}
配置文件 | 分辨率 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 | top5 准确率 | 参考代码的 top1 准确率 | 参考代码的 top5 准确率 | 推理时间 (video/s) | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
tsm_r50_1x1x8_50e_kinetics400_rgb | 340x256 | 8 | ResNet50 | ImageNet | 70.24 | 89.56 | 70.36 | 89.49 | 74.0 (8x1 frames) | 7079 | ckpt | log | json |
tsm_r50_1x1x8_50e_kinetics400_rgb | 短边 256 | 8 | ResNet50 | ImageNet | 70.59 | 89.52 | x | x | x | 7079 | ckpt | log | json |
tsm_r50_1x1x8_50e_kinetics400_rgb | 短边 320 | 8 | ResNet50 | ImageNet | 70.73 | 89.81 | x | x | x | 7079 | ckpt | log | json |
tsm_r50_1x1x8_100e_kinetics400_rgb | 短边 320 | 8 | ResNet50 | ImageNet | 71.90 | 90.03 | x | x | x | 7079 | ckpt | log | json |
tsm_r50_gpu_normalize_1x1x8_50e_kinetics400_rgb.py | 短边 256 | 8 | ResNet50 | ImageNet | 70.48 | 89.40 | x | x | x | 7076 | ckpt | log | json |
tsm_r50_video_1x1x8_50e_kinetics400_rgb | 短边 256 | 8 | ResNet50 | ImageNet | 70.25 | 89.66 | 70.36 | 89.49 | 74.0 (8x1 frames) | 7077 | ckpt | log | json |
tsm_r50_dense_1x1x8_50e_kinetics400_rgb | 短边 320 | 8 | ResNet50 | ImageNet | 73.46 | 90.84 | x | x | x | 7079 | ckpt | log | json |
tsm_r50_dense_1x1x8_100e_kinetics400_rgb | 短边 320 | 8 | ResNet50 | ImageNet | 74.55 | 91.74 | x | x | x | 7079 | ckpt | log | json |
tsm_r50_1x1x16_50e_kinetics400_rgb | 340x256 | 8 | ResNet50 | ImageNet | 72.09 | 90.37 | 70.67 | 89.98 | 47.0 (16x1 frames) | 10404 | ckpt | log | json |
tsm_r50_1x1x16_50e_kinetics400_rgb | 短边 256 | 8x4 | ResNet50 | ImageNet | 71.89 | 90.73 | x | x | x | 10398 | ckpt | log | json |
tsm_r50_1x1x16_100e_kinetics400_rgb | 短边 320 | 8 | ResNet50 | ImageNet | 72.80 | 90.75 | x | x | x | 10398 | ckpt | log | json |
tsm_nl_embedded_gaussian_r50_1x1x8_50e_kinetics400_rgb | 短边 320 | 8x4 | ResNet50 | ImageNet | 72.03 | 90.25 | 71.81 | 90.36 | x | 8931 | ckpt | log | json |
tsm_nl_gaussian_r50_1x1x8_50e_kinetics400_rgb | 短边 320 | 8x4 | ResNet50 | ImageNet | 70.70 | 89.90 | x | x | x | 10125 | ckpt | log | json |
tsm_nl_dot_product_r50_1x1x8_50e_kinetics400_rgb | 短边 320 | 8x4 | ResNet50 | ImageNet | 71.60 | 90.34 | x | x | x | 8358 | ckpt | log | json |
tsm_mobilenetv2_dense_1x1x8_100e_kinetics400_rgb | 短边 320 | 8 | MobileNetV2 | ImageNet | 68.46 | 88.64 | x | x | x | 3385 | ckpt | log | json |
tsm_mobilenetv2_dense_1x1x8_kinetics400_rgb_port | 短边 320 | 8 | MobileNetV2 | ImageNet | 69.89 | 89.01 | x | x | x | 3385 | infer_ckpt | x | x |
配置文件 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 | top5 准确率 | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|
tsm_r50_video_1x1x8_50e_diving48_rgb | 8 | ResNet50 | ImageNet | 75.99 | 97.16 | 7070 | ckpt | log | json |
tsm_r50_video_1x1x16_50e_diving48_rgb | 8 | ResNet50 | ImageNet | 81.62 | 97.66 | 7070 | ckpt | log | json |
配置文件 | 分辨率 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 (efficient/accurate) | top5 准确率 (efficient/accurate) | 参考代码的 top1 准确率 (efficient/accurate) | 参考代码的 top5 准确率 (efficient/accurate) | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|---|---|---|
tsm_r50_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 45.58 / 47.70 | 75.02 / 76.12 | 45.50 / 47.33 | 74.34 / 76.60 | 7077 | ckpt | log | json |
tsm_r50_flip_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 47.10 / 48.51 | 76.02 / 77.56 | 45.50 / 47.33 | 74.34 / 76.60 | 7077 | ckpt | log | json |
tsm_r50_randaugment_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 47.16 / 48.90 | 76.07 / 77.92 | 45.50 / 47.33 | 74.34 / 76.60 | 7077 | ckpt | log | json |
tsm_r50_ptv_randaugment_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 47.65 / 48.66 | 76.67 / 77.41 | 45.50 / 47.33 | 74.34 / 76.60 | 7077 | ckpt | log | json |
tsm_r50_ptv_augmix_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 46.26 / 47.68 | 75.92 / 76.49 | 45.50 / 47.33 | 74.34 / 76.60 | 7077 | ckpt | log | json |
tsm_r50_flip_randaugment_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 47.85 / 50.31 | 76.78 / 78.18 | 45.50 / 47.33 | 74.34 / 76.60 | 7077 | ckpt | log | json |
tsm_r50_1x1x16_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 47.77 / 49.03 | 76.82 / 77.83 | 47.05 / 48.61 | 76.40 / 77.96 | 10390 | ckpt | log | json |
tsm_r101_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 46.09 / 48.59 | 75.41 / 77.10 | 46.64 / 48.13 | 75.40 / 77.31 | 9800 | ckpt | log | json |
配置文件 | 分辨率 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 (efficient/accurate) | top5 准确率 (efficient/accurate) | 参考代码的 top1 准确率 (efficient/accurate) | 参考代码的 top5 准确率 (efficient/accurate) | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|---|---|---|
tsm_r50_1x1x8_50e_sthv2_rgb | 高 256 | 8 | ResNet50 | ImageNet | 59.11 / 61.82 | 85.39 / 86.80 | xx / 61.2 | xx / xx | 7069 | ckpt | log | json |
tsm_r50_1x1x16_50e_sthv2_rgb | 高 256 | 8 | ResNet50 | ImageNet | 61.06 / 63.19 | 86.66 / 87.93 | xx / 63.1 | xx / xx | 10400 | ckpt | log | json |
tsm_r101_1x1x8_50e_sthv2_rgb | 高 256 | 8 | ResNet101 | ImageNet | 60.88 / 63.84 | 86.56 / 88.30 | xx / 63.3 | xx / xx | 9727 | ckpt | log | json |
配置文件 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 | top5 准确率 | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|
tsm_r50_video_1x1x8_50e_diving48_rgb | 8 | ResNet50 | ImageNet | 75.99 | 97.16 | 7070 | ckpt | log | json |
tsm_r50_video_1x1x16_50e_diving48_rgb | 8 | ResNet50 | ImageNet | 81.62 | 97.66 | 7070 | ckpt | log | json |
配置文件 | 分辨率 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 (efficient/accurate) | top5 准确率 (efficient/accurate) | top1 准确率变化 (efficient/accurate) | top5 准确率变化 (efficient/accurate) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|---|---|
tsm_r50_mixup_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 46.35 / 48.49 | 75.07 / 76.88 | +0.77 / +0.79 | +0.05 / +0.70 | ckpt | log | json |
tsm_r50_cutmix_1x1x8_50e_sthv1_rgb | 高 100 | 8 | ResNet50 | ImageNet | 45.92 / 47.46 | 75.23 / 76.71 | +0.34 / -0.24 | +0.21 / +0.59 | ckpt | log | json |
配置文件 | 分辨率 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 (efficient/accurate) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|
tsm_r50_1x1x8_50e_jester_rgb | 高 100 | 8 | ResNet50 | ImageNet | 96.5 / 97.2 | ckpt | log | json |
配置文件 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 | top5 准确率 | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|
tsm_k400_pretrained_r50_1x1x8_25e_hmdb51_rgb | 8 | ResNet50 | Kinetics400 | 72.68 | 92.03 | 10388 | ckpt | log | json |
tsm_k400_pretrained_r50_1x1x16_25e_hmdb51_rgb | 8 | ResNet50 | Kinetics400 | 74.77 | 93.86 | 10388 | ckpt | log | json |
配置文件 | GPU 数量 | 主干网络 | 预训练 | top1 准确率 | top5 准确率 | GPU 显存占用 (M) | ckpt | log | json |
---|---|---|---|---|---|---|---|---|---|
tsm_k400_pretrained_r50_1x1x8_25e_ucf101_rgb | 8 | ResNet50 | Kinetics400 | 94.50 | 99.58 | 10389 | ckpt | log | json |
tsm_k400_pretrained_r50_1x1x16_25e_ucf101_rgb | 8 | ResNet50 | Kinetics400 | 94.58 | 99.37 | 10389 | ckpt | log | json |
注:
...
test_pipeline = [
dict(
type='SampleFrames',
clip_len=1,
frame_interval=1,
num_clips=16, # 当使用 8 个 视频段时,设置 `num_clips = 8`
twice_sample=True, # 设置 `twice_sample=True` 用于 accurate 方案中的 Twice Sample
test_mode=True),
dict(type='RawFrameDecode'),
dict(type='Resize', scale=(-1, 256)),
# dict(type='CenterCrop', crop_size=224), 用于 efficient 方案
dict(type='ThreeCrop', crop_size=256), # 用于 accurate 方案
dict(type='Normalize', **img_norm_cfg),
dict(type='FormatShape', input_format='NCHW'),
dict(type='Collect', keys=['imgs', 'label'], meta_keys=[]),
dict(type='ToTensor', keys=['imgs'])
]
alpha=0.2
。对于数据集准备的细节,用户可参考 数据集准备文档 中的 Kinetics400, Something-Something V1 and Something-Something V2 部分。
用户可以使用以下指令进行模型训练。
python tools/train.py ${CONFIG_FILE} [optional arguments]
例如:以一个确定性的训练方式,辅以定期的验证过程进行 TSM 模型在 Kinetics-400 数据集上的训练。
python tools/train.py configs/recognition/tsm/tsm_r50_1x1x8_50e_kinetics400_rgb.py \
--work-dir work_dirs/tsm_r50_1x1x8_100e_kinetics400_rgb \
--validate --seed 0 --deterministic
更多训练细节,可参考 基础教程 中的 训练配置 部分。
用户可以使用以下指令进行模型测试。
python tools/test.py ${CONFIG_FILE} ${CHECKPOINT_FILE} [optional arguments]
例如:在 Kinetics-400 数据集上测试 TSM 模型,并将结果导出为一个 json 文件。
python tools/test.py configs/recognition/tsm/tsm_r50_1x1x8_50e_kinetics400_rgb.py \
checkpoints/SOME_CHECKPOINT.pth --eval top_k_accuracy mean_class_accuracy \
--out result.json
更多测试细节,可参考 基础教程 中的 测试某个数据集 部分。