From 2098218bcbfd06c44fd7c8ebe37d38b84315e935 Mon Sep 17 00:00:00 2001 From: dreamerlin <528557675@qq.com> Date: Tue, 9 Mar 2021 22:00:25 +0800 Subject: [PATCH 1/5] cn useful tools --- docs/useful_tools.md | 4 +- docs_zh_CN/useful_tools_cn.md | 154 ++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 2 deletions(-) create mode 100644 docs_zh_CN/useful_tools_cn.md diff --git a/docs/useful_tools.md b/docs/useful_tools.md index 4b6d6ce02c..5de6fa9a19 100644 --- a/docs/useful_tools.md +++ b/docs/useful_tools.md @@ -51,7 +51,7 @@ Examples: python tools/analysis/analyze_logs.py cal_train_time ${JSON_LOGS} [--include-outliers] ``` -- Compute the average training speed for a config file +- Compute the average training speed for a config file. ```shell python tools/analysis/analyze_logs.py cal_train_time work_dirs/some_exp/20200422_153324.log.json @@ -137,7 +137,7 @@ The final output filename will be `tsn_r50_1x1x3_100e_kinetics400_rgb-{hash id}. ### Evaluating a metric -tools/analysis/eval_metric.py evaluates certain metrics of the results saved in a file according to a config file. +`tools/analysis/eval_metric.py` evaluates certain metrics of the results saved in a file according to a config file. The saved result file is created on `tools/test.py` by setting the arguments `--out ${RESULT_FILE}` to indicate the result file, which stores the final output of the whole model. diff --git a/docs_zh_CN/useful_tools_cn.md b/docs_zh_CN/useful_tools_cn.md new file mode 100644 index 0000000000..f9377020e6 --- /dev/null +++ b/docs_zh_CN/useful_tools_cn.md @@ -0,0 +1,154 @@ +除了 训练/测试 脚本外,MMAction2 还在 `tools/` 目录下提供了许多有用的工具。 + +## 有用的工具脚本链接 + + + +- [日志分析](#日志分析) +- [模型复杂度分析](#模型复杂度分析) +- [模型转换](#模型转换) + - [导出 MMAction2 模型为 ONNX 格式(试验阶段)](#导出-MMAction2-模型为-ONNX-格式(试验阶段)) + - [发布模型](#发布模型) +- [其他脚本](#其他脚本) + - [指标评价](#指标评价) + - [打印完整配置](#打印完整配置) + + + +## 日志分析 + +给定一个训练日志文件,可通过 `tools/analysis/analyze_logs.py` 脚本绘制 loss/top-k 曲线。要使用这个功能,则要先通过 `pip install seaborn` 安装所需的依赖包。 + +![acc_curve_image](/docs/imgs/acc_curve.png) + +```shell +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 + ``` + + You can also compute the average training speed. + + ```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](https://github.com/sovrasov/flops-counter.pytorch) 库改编的脚本,用于计算给定模型的 FLOPs 和参数量。 + +```shell +python tools/analysis/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}] +``` + +预计结果输出如下: + +```text +============================== +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) 某些算子没被列入计算中,如 GN 和一些自定义算子。更多详细信息请参考 [`mmcv.cnn.get_model_complexity_info()`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py) + +## 模型转换 + +### 导出 MMAction2 模型为 ONNX 格式(试验阶段) + +`/tools/pytorch2onnx.py` 脚本用于将模型转换为 [ONNX](https://github.com/onnx/onnx) 格式。 +它同时也支持通过比较 PyTorch 模型和 ONNX 模型的输出结果来进行验证。 +要使用这个功能,则要先通过 `pip install onnx onnxruntime` 安装所需的依赖包。 + +- 对于行为识别模型,请运行: + + ```shell + python tools/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --shape $SHAPE --verify + ``` + +- 对于时序检测模型,请运行: + + ```shell + python tools/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --is-localizer --shape $SHAPE --verify + ``` + +### 发布模型 + +`tools/publish_model.py` 脚本用于帮助用户发布模型。 + +在用户上传自己训练的模型到 MMAction2 的 AWS 服务器前,需要: + +(1) 将模型的权重向量转化为 CPU 向量。 +(2) 删除优化器状态信息。 +(3) 计算模型检查点文件的哈希值,并将哈希值添加到文件名后。 + +```shell +python tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME} +``` + +例如, + +```shell +python tools/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}` 指定的,其存储了整个模型的最终结果。 + +```shell +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` 脚本会逐词打印整个配置文件的内容,并会扩展其所有的导入变量。 + +```shell +python tools/print_config.py ${CONFIG} [-h] [--options ${OPTIONS [OPTIONS...]}] +``` From 51be3ab2b23459111011867ec3a4bc9f79956254 Mon Sep 17 00:00:00 2001 From: dreamerlin <528557675@qq.com> Date: Wed, 10 Mar 2021 12:45:44 +0800 Subject: [PATCH 2/5] polish --- docs_zh_CN/useful_tools_cn.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs_zh_CN/useful_tools_cn.md b/docs_zh_CN/useful_tools_cn.md index f9377020e6..17ea773d3b 100644 --- a/docs_zh_CN/useful_tools_cn.md +++ b/docs_zh_CN/useful_tools_cn.md @@ -1,6 +1,6 @@ -除了 训练/测试 脚本外,MMAction2 还在 `tools/` 目录下提供了许多有用的工具。 +除了训练/测试脚本外,MMAction2 还在 `tools/` 目录下提供了许多有用的工具。 -## 有用的工具脚本链接 +## 目录 @@ -17,7 +17,7 @@ ## 日志分析 -给定一个训练日志文件,可通过 `tools/analysis/analyze_logs.py` 脚本绘制 loss/top-k 曲线。要使用这个功能,则要先通过 `pip install seaborn` 安装所需的依赖包。 +给定一个训练日志文件,可通过 `tools/analysis/analyze_logs.py` 脚本绘制 loss/top-k 曲线。要使用这个功能,要先通过 `pip install seaborn` 安装所需的依赖包。 ![acc_curve_image](/docs/imgs/acc_curve.png) @@ -97,7 +97,7 @@ Params: 28.04 M `/tools/pytorch2onnx.py` 脚本用于将模型转换为 [ONNX](https://github.com/onnx/onnx) 格式。 它同时也支持通过比较 PyTorch 模型和 ONNX 模型的输出结果来进行验证。 -要使用这个功能,则要先通过 `pip install onnx onnxruntime` 安装所需的依赖包。 +要使用这个功能,要先通过 `pip install onnx onnxruntime` 安装所需的依赖包。 - 对于行为识别模型,请运行: From 3d424d707ae09d5558fe91a40fac9e0c43f17bc6 Mon Sep 17 00:00:00 2001 From: dreamerlin <528557675@qq.com> Date: Wed, 10 Mar 2021 22:41:13 +0800 Subject: [PATCH 3/5] polish --- docs_zh_CN/useful_tools_cn.md | 44 +++++++++++++++++------------------ 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/docs_zh_CN/useful_tools_cn.md b/docs_zh_CN/useful_tools_cn.md index 17ea773d3b..d669963f6f 100644 --- a/docs_zh_CN/useful_tools_cn.md +++ b/docs_zh_CN/useful_tools_cn.md @@ -7,7 +7,7 @@ - [日志分析](#日志分析) - [模型复杂度分析](#模型复杂度分析) - [模型转换](#模型转换) - - [导出 MMAction2 模型为 ONNX 格式(试验阶段)](#导出-MMAction2-模型为-ONNX-格式(试验阶段)) + - [导出 MMAction2 模型为 ONNX 格式(实验特性)](#导出-MMAction2-模型为-ONNX-格式(实验特性)) - [发布模型](#发布模型) - [其他脚本](#其他脚本) - [指标评价](#指标评价) @@ -17,7 +17,7 @@ ## 日志分析 -给定一个训练日志文件,可通过 `tools/analysis/analyze_logs.py` 脚本绘制 loss/top-k 曲线。要使用这个功能,要先通过 `pip install seaborn` 安装所需的依赖包。 +输入变量指定一个训练日志文件,可通过 `tools/analysis/analyze_logs.py` 脚本绘制 loss/top-k 曲线。本功能依赖于 `seaborn`,使用前请先通过 `pip install seaborn` 安装依赖包。 ![acc_curve_image](/docs/imgs/acc_curve.png) @@ -27,37 +27,37 @@ python tools/analysis/analyze_logs.py plot_curve ${JSON_LOGS} [--keys ${KEYS}] [ 例如: -- 绘制某结果的分类损失图。 +- 绘制某日志文件对应的分类损失曲线图。 ```shell python tools/analysis/analyze_logs.py plot_curve log.json --keys loss_cls --legend loss_cls ``` -- 绘制某结果的 top-1 和 top-5 准确率图像,并将其导出为 PDF 文件。 +- 绘制某日志文件对应的 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 准确率。 +- 在同一图像内绘制两份日志文件对应的 top-1 准确率曲线图。 ```shell python tools/analysis/analyze_logs.py plot_curve log1.json log2.json --keys top1_acc --legend run1 run2 ``` - You can also compute the average training speed. + 用户还可以通过本工具计算平均训练速度。 ```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----- @@ -69,7 +69,7 @@ python tools/analysis/analyze_logs.py plot_curve ${JSON_LOGS} [--keys ${KEYS}] [ ## 模型复杂度分析 -`/tools/analysis/get_flops.py` 文件是根据 [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) 库改编的脚本,用于计算给定模型的 FLOPs 和参数量。 +`/tools/analysis/get_flops.py` 文件是根据 [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) 库改编的脚本,用于计算输入变量指定模型的 FLOPs 和参数量。 ```shell python tools/analysis/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}] @@ -86,18 +86,18 @@ Params: 28.04 M ``` **注意**:该工具仍处于试验阶段,不保证该数字绝对正确。 -用户可以将结果用于简单比较,但若要在技术报告或论文中采用该结果之前,请仔细检查。 +用户可以将结果用于简单比较,但若要在技术报告或论文中采用该结果,请仔细检查。 -(1) FLOPs 与输入变量的形状有关,但是模型的参数量与输入变量的形状无关。2D 行为识别器的默认形状为 (1, 3, 340, 256),3D 行为识别器的默认形状为 (1, 3, 32, 340, 256)。 -(2) 某些算子没被列入计算中,如 GN 和一些自定义算子。更多详细信息请参考 [`mmcv.cnn.get_model_complexity_info()`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py) +(1) FLOPs 与输入变量尺寸有关,但是模型的参数量与输入变量尺寸无关。2D 行为识别器的默认尺寸为 (1, 3, 340, 256),3D 行为识别器的默认尺寸为 (1, 3, 32, 340, 256)。 +(2) 部分算子不参与 FLOPs 以及参数量的计算,如 GN 和一些自定义算子。更多详细信息请参考 [`mmcv.cnn.get_model_complexity_info()`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py) ## 模型转换 -### 导出 MMAction2 模型为 ONNX 格式(试验阶段) +### 导出 MMAction2 模型为 ONNX 格式(实验特性) `/tools/pytorch2onnx.py` 脚本用于将模型转换为 [ONNX](https://github.com/onnx/onnx) 格式。 -它同时也支持通过比较 PyTorch 模型和 ONNX 模型的输出结果来进行验证。 -要使用这个功能,要先通过 `pip install onnx onnxruntime` 安装所需的依赖包。 +同时,该脚本支持比较 PyTorch 模型和 ONNX 模型的输出结果,验证输出结果是否相同。 +本功能依赖于 `onnx` 以及 `onnxruntime`,使用前请先通过 `pip install onnx onnxruntime` 安装依赖包。 - 对于行为识别模型,请运行: @@ -105,7 +105,7 @@ Params: 28.04 M python tools/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --shape $SHAPE --verify ``` -- 对于时序检测模型,请运行: +- 对于时序动作检测模型,请运行: ```shell python tools/pytorch2onnx.py $CONFIG_PATH $CHECKPOINT_PATH --is-localizer --shape $SHAPE --verify @@ -113,9 +113,7 @@ Params: 28.04 M ### 发布模型 -`tools/publish_model.py` 脚本用于帮助用户发布模型。 - -在用户上传自己训练的模型到 MMAction2 的 AWS 服务器前,需要: +`tools/publish_model.py` 脚本用于进行模型发布前的准备工作,主要包括: (1) 将模型的权重向量转化为 CPU 向量。 (2) 删除优化器状态信息。 @@ -131,15 +129,15 @@ python tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME} python tools/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`。 +最终,输出文件名为 `tsn_r50_1x1x3_100e_kinetics400_rgb-{hash id}.pth`。 ## 其他脚本 ### 指标评价 -`tools/analysis/eval_metric.py` 脚本会根据给定配置文件计算结果存储文件的某一评价指标值。 +`tools/analysis/eval_metric.py` 脚本通过输入变量指定配置文件,以及对应的结果存储文件,计算某一评价指标。 -结果存储文件是通过在 `tools/test.py` 脚本中利用参数 `--out ${RESULT_FILE}` 指定的,其存储了整个模型的最终结果。 +结果存储文件通过 `tools/test.py` 脚本(通过参数 `--out ${RESULT_FILE}` 指定)生成,保存了指定模型在指定数据集中的预测结果。 ```shell python tools/analysis/eval_metric.py ${CONFIG_FILE} ${RESULT_FILE} [--eval ${EVAL_METRICS}] [--cfg-options ${CFG_OPTIONS}] [--eval-options ${EVAL_OPTIONS}] @@ -147,7 +145,7 @@ python tools/analysis/eval_metric.py ${CONFIG_FILE} ${RESULT_FILE} [--eval ${EVA ### 打印完整配置 -`tools/analysis/print_config.py` 脚本会逐词打印整个配置文件的内容,并会扩展其所有的导入变量。 +`tools/analysis/print_config.py` 脚本会解析所有输入变量,并打印完整配置信息。 ```shell python tools/print_config.py ${CONFIG} [-h] [--options ${OPTIONS [OPTIONS...]}] From 783be0f87e45e80dfb4368d2aa7acd8d8c8fc3ec Mon Sep 17 00:00:00 2001 From: dreamerlin <528557675@qq.com> Date: Wed, 10 Mar 2021 22:45:33 +0800 Subject: [PATCH 4/5] polish --- docs_zh_CN/useful_tools_cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_zh_CN/useful_tools_cn.md b/docs_zh_CN/useful_tools_cn.md index d669963f6f..aa080b7e8a 100644 --- a/docs_zh_CN/useful_tools_cn.md +++ b/docs_zh_CN/useful_tools_cn.md @@ -69,13 +69,13 @@ python tools/analysis/analyze_logs.py plot_curve ${JSON_LOGS} [--keys ${KEYS}] [ ## 模型复杂度分析 -`/tools/analysis/get_flops.py` 文件是根据 [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) 库改编的脚本,用于计算输入变量指定模型的 FLOPs 和参数量。 +`/tools/analysis/get_flops.py` 是根据 [flops-counter.pytorch](https://github.com/sovrasov/flops-counter.pytorch) 库改编的脚本,用于计算输入变量指定模型的 FLOPs 和参数量。 ```shell python tools/analysis/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}] ``` -预计结果输出如下: +预计输出结果如下所示: ```text ============================== From a54e232a23c2ae15d1d988f629fdb6fcf012a828 Mon Sep 17 00:00:00 2001 From: dreamerlin <528557675@qq.com> Date: Fri, 12 Mar 2021 00:03:14 +0800 Subject: [PATCH 5/5] polish --- docs_zh_CN/useful_tools_cn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs_zh_CN/useful_tools_cn.md b/docs_zh_CN/useful_tools_cn.md index aa080b7e8a..b70ea570b1 100644 --- a/docs_zh_CN/useful_tools_cn.md +++ b/docs_zh_CN/useful_tools_cn.md @@ -88,7 +88,7 @@ Params: 28.04 M **注意**:该工具仍处于试验阶段,不保证该数字绝对正确。 用户可以将结果用于简单比较,但若要在技术报告或论文中采用该结果,请仔细检查。 -(1) FLOPs 与输入变量尺寸有关,但是模型的参数量与输入变量尺寸无关。2D 行为识别器的默认尺寸为 (1, 3, 340, 256),3D 行为识别器的默认尺寸为 (1, 3, 32, 340, 256)。 +(1) FLOPs 与输入变量形状有关,但是模型的参数量与输入变量形状无关。2D 行为识别器的默认形状为 (1, 3, 340, 256),3D 行为识别器的默认形状为 (1, 3, 32, 340, 256)。 (2) 部分算子不参与 FLOPs 以及参数量的计算,如 GN 和一些自定义算子。更多详细信息请参考 [`mmcv.cnn.get_model_complexity_info()`](https://github.com/open-mmlab/mmcv/blob/master/mmcv/cnn/utils/flops_counter.py) ## 模型转换 @@ -115,7 +115,7 @@ Params: 28.04 M `tools/publish_model.py` 脚本用于进行模型发布前的准备工作,主要包括: -(1) 将模型的权重向量转化为 CPU 向量。 +(1) 将模型的权重张量转化为 CPU 张量。 (2) 删除优化器状态信息。 (3) 计算模型检查点文件的哈希值,并将哈希值添加到文件名后。