1.推理
在MMAction的根目录下执行如下命令:
python demo/demo_inferencer.py demo/demo.mp4 --rec tsn --print-result --label-file tools/data/kinetics/label_map_k400.txt
执行命令后可以看到控制台中打印的推理结果(如下图):
{'predictions': [{'rec_labels': [[0]], 'rec_scores': [[0.515182614326477, 0.48481735587120056]]}]}
2.准备数据集
下载官方预先准备的数据集kinetics400_tiny.zip,并将其解压到MMAction2根目录下面。或者在命令行执行以下操作:
wget https://download.openmmlab.com/mmaction/kinetics400_tiny.zip
mkdir -p data/
unzip kinetics400_tiny.zip -d data/
3.修改配置文件(指定训练集和训练参数)
使用resnet50作为主干网络来训练TSN。因为MMAction2已经拥有完整的Kinetics400数据集的配置文件(configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py
),只需要在其基础上进行部分修改。
(1)修改数据集路径
在tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py文件中,替换以下关键字:
data_root = 'data/kinetics400_tiny/train'
data_root_val = 'data/kinetics400_tiny/val'
ann_file_train = 'data/kinetics400_tiny/kinetics_tiny_train_video.txt'
ann_file_val = 'data/kinetics400_tiny/kinetics_tiny_val_video.txt'
(2)修改运行配置
在tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py中,修改以下参数:
# 设置训练批大小为 4
train_dataloader['batch_size'] = 4
# 每轮都保存权重,并且只保留最新的权重
default_hooks = dict(
checkpoint=dict(type='CheckpointHook', interval=1, max_keep_ckpts=1))
# 将最大 epoch 数设置为 10,并每 1 个 epoch验证模型
train_cfg = dict(type='EpochBasedTrainLoop', max_epochs=10, val_interval=1)
#根据 10 个 epoch调整学习率调度
param_scheduler = [
dict(
type='MultiStepLR',
begin=0,
end=10,
by_epoch=True,
milestones=[4, 8],
gamma=0.1)
]
(3)修改模型配置
在tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py中,直接添加以下代码:
model = dict(
cls_head=dict(num_classes=2))
load_from = 'https://download.openmmlab.com/mmaction/v1.0/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb_20220906-cd10898e.pth'
4.处理数据集
将训练时数据转换做帧可视化处理,将我们需要可视化的配置文件传递到browse_dataset.py脚本:
python tools/visualizations/browse_dataset.py configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py browse_out --mode pipeline
经过转换处理后的视频被放到了browse_out文件中:
执行以下操作可视化学习调度(弹出如下图所示训练学习率时间表)以确保配置符合预期:
python tools/visualizations/vis_scheduler.py configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py
5.训练
运行如下命令启动训练:
python tools/train.py configs/recognition/tsn/tsn_imagenet-pretrained-r50_8xb32-1x1x3-100e_kinetics400-rgb.py
训练日志: