mirror of https://github.com/open-mmlab/mmpose
103 lines
3.1 KiB
Markdown
103 lines
3.1 KiB
Markdown
# Model Analysis
|
||
|
||
## Get Model Params & FLOPs
|
||
|
||
MMPose provides [tools/analysis_tools/get_flops.py](https://github.com/open-mmlab/mmpose/blob/dev-1.x/tools/analysis_tools/get_flops.py) to get model parameters and FLOPs.
|
||
|
||
```shell
|
||
python tools/analysis_tools/get_flops.py ${CONFIG_FILE} [--shape ${INPUT_SHAPE}] [--cfg-options ${CFG_OPTIONS}]
|
||
```
|
||
|
||
Description of all arguments:
|
||
|
||
`CONFIG_FILE` : The path of a model config file.
|
||
|
||
`--shape`: The input shape to the model.
|
||
|
||
`--input-constructor`: If specified as batch, it will generate a batch tensor to calculate FLOPs.
|
||
|
||
`--batch-size`:If `--input-constructor` is specified as batch, it will generate a random tensor with shape `(batch_size, 3, **input_shape)` to calculate FLOPs.
|
||
|
||
`--cfg-options`: If specified, the key-value pair optional `cfg` will be merged into config file.
|
||
|
||
Example:
|
||
|
||
```shell
|
||
python tools/analysis_tools/get_flops.py configs/body_2d_keypoint/topdown_heatmap/coco/td-hm_hrnet-w32_8xb64-210e_coco-256x192.py
|
||
```
|
||
|
||
We will get the following results:
|
||
|
||
```text
|
||
==============================
|
||
Input shape: (1, 3, 256, 192)
|
||
Flops: 7.7 GFLOPs
|
||
Params: 28.54 M
|
||
==============================
|
||
```
|
||
|
||
```{note}
|
||
This tool is still experimental and we do not guarantee that the number is absolutely correct. Some operators are not counted into FLOPs like GN and custom operators.
|
||
```
|
||
|
||
## Log Analysis
|
||
|
||
MMPose provides [tools/analysis_tools/analyze_logs.py](https://github.com/open-mmlab/mmpose/blob/dev-1.x/tools/analysis_tools/analyze_logs.py) to analyze the training log. The log file can be either a json file or a text file. The json file is recommended, because it is more convenient to parse and visualize.
|
||
|
||
Currently, the following functions are supported:
|
||
|
||
- Plot loss/accuracy curves
|
||
- Calculate training time
|
||
|
||
### Plot Loss/Accuracy Curves
|
||
|
||
The function depends on `seaborn`, please install it first by running `pip install seaborn`.
|
||
|
||

|
||
|
||
```shell
|
||
python tools/analysis_tools/analyze_logs.py plot_curve ${JSON_LOGS} [--keys ${KEYS}] [--title ${TITLE}] [--legend ${LEGEND}] [--backend ${BACKEND}] [--style ${STYLE}] [--out ${OUT_FILE}]
|
||
```
|
||
|
||
Examples:
|
||
|
||
- Plot loss curve
|
||
|
||
```shell
|
||
python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys loss_kpt --legend loss_kpt
|
||
```
|
||
|
||
- Plot accuracy curve and export to PDF file
|
||
|
||
```shell
|
||
python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys acc_pose --out results.pdf
|
||
```
|
||
|
||
- Plot multiple log files on the same figure
|
||
|
||
```shell
|
||
python tools/analysis_tools/analyze_logs.py plot_curve log1.json log2.json --keys loss_kpt --legend run1 run2 --title loss_kpt --out loss_kpt.png
|
||
```
|
||
|
||
### Calculate Training Time
|
||
|
||
```shell
|
||
python tools/analysis_tools/analyze_logs.py cal_train_time ${JSON_LOGS} [--include-outliers]
|
||
```
|
||
|
||
Examples:
|
||
|
||
```shell
|
||
python tools/analysis_tools/analyze_logs.py cal_train_time log.json
|
||
```
|
||
|
||
The result is as follows:
|
||
|
||
```text
|
||
-----Analyze train time of hrnet_w32_256x192.json-----
|
||
slowest epoch 56, average time is 0.6924
|
||
fastest epoch 1, average time is 0.6502
|
||
time std over epochs is 0.0085
|
||
average iter time: 0.6688 s/iter
|
||
```
|