MMAction2 学习笔记 (四)——实用工具及demo演示
0- 写在前面
继续上一篇骨骼关键点识别算法相关内容的学习,今天学习通用领域的工具使用以及网络的DIY
目前正在实习,具体的内容方向是基于骨骼关键点的动作识别(skeleton based action recognition)。 在经过了多多的调研之后,觉得目前还是mmaction2平台最香,因此希望后续工作(包括效果的验证、实验、对比等等)包括前期的端到端工作都在mmaction2工具箱上展开。
学习mmaction2的目的是能够借助该平台对数据集、算法、演示、流程、搭建等等环节都能够理解的更加清晰和透彻(毕竟目前是一个小白),为后续自己的真正实际问题解决做准备。
本篇文章主要是基于mmaction2的中文教程(链接见文末),此外还有一些参考的文章以及github库中的注释性教程。
本部分是实用工具以及demo演示的部分,分别对应mmaction2中的 tools 部分,和demo 部分。
主要是一些如训练可视化、参数分析、复杂度分析、demo生成等常见通用性功能的讲述。
1- MMAction2 简介
mmaction2是商汤和港中文联合研发的一个基于pytorch框架的人体动作识别的深度学习开源工具库,可以提供包括行为识别(分类)、时序动作检测、时空动作检测、骨骼动作识别(分类)等等多种子类问题的算法框架,包括数据集等等,可以非常方便的使用。
mmaction2 和广为人知的检测工具库mmdetection 一样,都属于open-mmlab 工具箱下属的一个模块,目前仍在不断更新与拓展功能及算法,可以预见的是,其在人体行为识别方面将被更多人使用。
2- 日志分析
输入变量指定一个训练日志文件,可通过 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}]
例如:
- 绘制某日志文件对应的分类损失曲线图:
python tools/analysis/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls
绘制某日志文件对应的 top-1 和 top-5 准确率曲线图,并将曲线图导出为 PDF 文件:
python tools/analysis/analyze_logs.py plot_curve log.json --keys top1_acc top5_acc --out results.pdf
- 在同一图像内绘制两份日志文件对应的 top-1 准确率曲线图:
python tools/analysis/analyze_logs.py plot_curve log1.json log2.json --keys top1_acc --legend run1 run2
用户还可以通过本工具计算平均训练速度
python tools/analysis/analyze_logs.py cal_train_time ${JSON_LOGS} [--include-outliers]
- 计算某日志文件对应的平均训练速度。
python tools/analysis/analyze_logs.py cal_train_time work_dirs/some_exp/20200422_153324.log.json
预计输出结果如下所示:
-----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
3- 模型复杂度分析
/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()
4- 模型转换
- 导出 MMAction2 模型为 ONNX 格式(实验特性)
/tools/deployment/pytorch2onnx.py
脚本用于将模型转换为 ONNX 格式。 同时,该脚本支持比较 PyTorch 模型和 ONNX 模型的输出结果,验证输出结果是否相同。 本功能依赖于onnx
以及onnxruntime
,使用前请先通过pip install onnx onnxruntime
安装依赖包。 请注意,可通过--softmax
选项在行为识别器末尾添加 Softmax 层,从而获取[0, 1]
范围内的预测结果。
对于行为识别模型,请运行:
python tools/deployment/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --shape $SHAPE --verify
对于时序动作检测模型,请运行:
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
。
5- 指标评价
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}]
6- 打印完整配置
tools/analysis/print_config.py
脚本会解析所有输入变量,并打印完整配置信息。
python tools/print_config.py ${CONFIG} [-h] [--options ${OPTIONS [OPTIONS...]}]
7- 检查视频
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]
8- demo演示
mmaction2 提供了各类模型的效果演示与端到端识别
参考: https://github.com/open-mmlab/mmaction2/tree/master/demo
与 : https://mmaction2.readthedocs.io/zh_CN/latest/demo.html
两篇官方文档已经足够进行解释了,在这里我就不在赘述了,可以参照其中的示例进行demo 的展示。
参考与相关链接:
mmaction2 github 官网:https://github.com/open-mmlab/mmaction2
官方中文文档教程:https://mmaction2.readthedocs.io/zh_CN/latest/index.html
官方知乎介绍文章 :https://zhuanlan.zhihu.com/p/347705276
mmaction2: 使用自定义数据集训练 PoseC3D 的教程 :https://github.com/open-mmlab/mmaction2/blob/master/configs/skeleton/posec3d/custom_dataset_training.md