MMAction2 学习笔记 (四)——实用工具及demo演示

  • Post author:
  • Post category:其他




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- 模型转换

  1. 导出 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
  1. 发布模型


    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



版权声明:本文为Jason_____Wang原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。