除了训练/测试脚本外,MMAction2 还在 tools/
目录下提供了许多有用的工具。
输入变量指定一个训练日志文件,可通过 tools/analysis/analyze_logs.py
脚本绘制 loss/top-k 曲线。本功能依赖于 seaborn
,使用前请先通过 pip install seaborn
安装依赖包。
python tools/analysis/analyze_logs.py plot_curve ${JSON_LOGS} [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUT_FILE}]
例如:
绘制某日志文件对应的分类损失曲线图。
shell
python tools/analysis/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls
绘制某日志文件对应的 top-1 和 top-5 准确率曲线图,并将曲线图导出为 PDF 文件。
shell
python tools/analysis/analyze_logs.py plot_curve log.json --keys top1_acc top5_acc --out results.pdf
在同一图像内绘制两份日志文件对应的 top-1 准确率曲线图。
shell
python tools/analysis/analyze_logs.py plot_curve log1.json log2.json --keys top1_acc --legend run1 run2
用户还可以通过本工具计算平均训练速度。
shell
python tools/analysis/analyze_logs.py cal_train_time ${JSON_LOGS} [--include-outliers]
计算某日志文件对应的平均训练速度。
shell
python tools/analysis/analyze_logs.py cal_train_time work_dirs/some_exp/20200422_153324.log.json
预计输出结果如下所示:
text
-----Analyze train time of work_dirs/some_exp/20200422_153324.log.json-----
slowest epoch 60, average time is 0.9736
fastest epoch 18, average time is 0.9001
time std over epochs is 0.0177
average iter time: 0.9330 s/iter
/tools/analysis/get_flops.py
是根据 flops-counter.pytorch 库改编的脚本,用于计算输入变量指定模型的 FLOPs 和参数量。
python tools/analysis/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}]
预计输出结果如下所示:
==============================
Input shape: (1, 3, 32, 340, 256)
Flops: 37.1 GMac
Params: 28.04 M
==============================
注意:该工具仍处于试验阶段,不保证该数字绝对正确。
用户可以将结果用于简单比较,但若要在技术报告或论文中采用该结果,请仔细检查。
(1) FLOPs 与输入变量形状有关,但是模型的参数量与输入变量形状无关。2D 行为识别器的默认形状为 (1, 3, 340, 256),3D 行为识别器的默认形状为 (1, 3, 32, 340, 256)。
(2) 部分算子不参与 FLOPs 以及参数量的计算,如 GN 和一些自定义算子。更多详细信息请参考 mmcv.cnn.get_model_complexity_info()
/tools/deployment/pytorch2onnx.py
脚本用于将模型转换为 ONNX 格式。
同时,该脚本支持比较 PyTorch 模型和 ONNX 模型的输出结果,验证输出结果是否相同。
本功能依赖于 onnx
以及 onnxruntime
,使用前请先通过 pip install onnx onnxruntime
安装依赖包。
请注意,可通过 --softmax
选项在行为识别器末尾添加 Softmax 层,从而获取 [0, 1]
范围内的预测结果。
对于行为识别模型,请运行:
shell
python tools/deployment/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --shape $SHAPE --verify
对于时序动作检测模型,请运行:
shell
python tools/deployment/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --is-localizer --shape $SHAPE --verify
tools/deployment/publish_model.py
脚本用于进行模型发布前的准备工作,主要包括:
(1) 将模型的权重张量转化为 CPU 张量。
(2) 删除优化器状态信息。
(3) 计算模型权重文件的哈希值,并将哈希值添加到文件名后。
python tools/deployment/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME}
例如,
python tools/deployment/publish_model.py work_dirs/tsn_r50_1x1x3_100e_kinetics400_rgb/latest.pth tsn_r50_1x1x3_100e_kinetics400_rgb.pth
最终,输出文件名为 tsn_r50_1x1x3_100e_kinetics400_rgb-{hash id}.pth
。
tools/analysis/eval_metric.py
脚本通过输入变量指定配置文件,以及对应的结果存储文件,计算某一评价指标。
结果存储文件通过 tools/test.py
脚本(通过参数 --out ${RESULT_FILE}
指定)生成,保存了指定模型在指定数据集中的预测结果。
python tools/analysis/eval_metric.py ${CONFIG_FILE} ${RESULT_FILE} [--eval ${EVAL_METRICS}] [--cfg-options ${CFG_OPTIONS}] [--eval-options ${EVAL_OPTIONS}]
tools/analysis/print_config.py
脚本会解析所有输入变量,并打印完整配置信息。
python tools/print_config.py ${CONFIG} [-h] [--options ${OPTIONS [OPTIONS...]}]
tools/analysis/check_videos.py
脚本利用指定视频编码器,遍历指定配置文件视频数据集中所有样本,寻找无效视频文件(文件破损或者文件不存在),并将无效文件路径保存到输出文件中。请注意,删除无效视频文件后,需要重新生成视频文件列表。
python tools/analysis/check_videos.py ${CONFIG} [-h] [--options OPTIONS [OPTIONS ...]] [--cfg-options CFG_OPTIONS [CFG_OPTIONS ...]] [--output-file OUTPUT_FILE] [--split SPLIT] [--decoder DECODER] [--num-processes NUM_PROCESSES] [--remove-corrupted-videos]