From 2c1b3ba21135cdde8f7f5bc27ff2c395971fd5cb Mon Sep 17 00:00:00 2001 From: zhangrui_wolf Date: Thu, 5 Aug 2021 16:24:01 +0800 Subject: [PATCH] Correct docs (#696) * Correct get_started.md * Correct dataset_prepare.md * Correct model_zoo.md * Correct train.md * Correct inference.md * Correct config.md * Correct customize_datasets.md * Correct data_pipeline.md * Correct customize_models.md * Correct training_tricks.md * Correct customize_runtime.md * Correct useful_tools.md and translate "model serving" * Fix typos * fix lint * Modify the content of useful_tools.md to meet the requirements, and modify some of the content by referring to the Chinese documentation of mmcls. * Modify the use_tools.md file based on feedback. Adjusted some translations according to "English-Chinese terminology comparison". * Modify get_start.md . Adjusted some translations according to "English-Chinese terminology comparison". * Modify dataset_prepare.md. * Modify the English version and the Chinese version of model_zoo.md. Adjusted some translations according to "English-Chinese terminology comparison". * Modify train.md. Adjusted some translations according to "English-Chinese terminology comparison". * Modify inference.md. Adjusted some translations according to "English-Chinese terminology comparison". * Modify config.md. Adjusted some translations according to "English-Chinese terminology comparison". * Modify customize_datasets.md. * Modify data_pipeline.md. Adjusted some translations according to "English-Chinese terminology comparison". The main corrected term is: pipeline. * Modify customize_models.md. * Modify training_tricks.md. * Modify customize_runtime.md. Adjusted some translations according to "English-Chinese terminology comparison". * fix full point usage in items * fix typo * fix typo * fix typo * fix typo * Update useful_tools.md Co-authored-by: Junjun2016 Co-authored-by: MengzhangLI --- docs/model_zoo.md | 16 +++ docs_zh-CN/dataset_prepare.md | 6 +- docs_zh-CN/get_started.md | 46 +++++---- docs_zh-CN/inference.md | 24 ++--- docs_zh-CN/model_zoo.md | 18 ++-- docs_zh-CN/train.md | 12 +-- docs_zh-CN/tutorials/config.md | 14 +-- docs_zh-CN/tutorials/customize_datasets.md | 10 +- docs_zh-CN/tutorials/customize_models.md | 10 +- docs_zh-CN/tutorials/customize_runtime.md | 18 ++-- docs_zh-CN/tutorials/data_pipeline.md | 14 +-- docs_zh-CN/useful_tools.md | 108 ++++++++++----------- 12 files changed, 160 insertions(+), 136 deletions(-) diff --git a/docs/model_zoo.md b/docs/model_zoo.md index b514d84..3806495 100644 --- a/docs/model_zoo.md +++ b/docs/model_zoo.md @@ -131,6 +131,22 @@ Please refer to [CGNet](https://github.com/open-mmlab/mmsegmentation/blob/master Please refer [Mixed Precision (FP16) Training](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/fp16) for details. +### U-Net + +Please refer to [U-Net](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/unet/README.md) for details. + +### ViT + +Please refer to [ViT](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/vit/README.md) for details. + +### Swin + +Please refer to [Swin](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/swin/README.md) for details. + +### SETR + +Please refer to [SETR](https://github.com/open-mmlab/mmsegmentation/blob/master/configs/setr/README.md) for details. + ## Speed benchmark ### Hardware diff --git a/docs_zh-CN/dataset_prepare.md b/docs_zh-CN/dataset_prepare.md index 5f566d4..55d5649 100644 --- a/docs_zh-CN/dataset_prepare.md +++ b/docs_zh-CN/dataset_prepare.md @@ -97,7 +97,7 @@ Pascal VOC 2012 可以在 [这里](http://host.robots.ox.ac.uk/pascal/VOC/voc201 python tools/convert_datasets/voc_aug.py data/VOCdevkit data/VOCdevkit/VOCaug --nproc 8 ``` -关于如何拼接数据集 (concatenate) 并一起训练它们,更多细节请参考 [拼接连接 数据集](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/tutorials/new_dataset.md#concatenate-dataset) 。 +关于如何拼接数据集 (concatenate) 并一起训练它们,更多细节请参考 [拼接连接数据集](https://github.com/open-mmlab/mmsegmentation/blob/master/docs/tutorials/new_dataset.md#concatenate-dataset) 。 ### ADE20K @@ -146,7 +146,7 @@ python tools/convert_datasets/drive.py /path/to/training.zip /path/to/test.zip ### HRF -首先,下载 [healthy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy.zip), [glaucoma.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma.zip), [diabetic_retinopathy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy.zip), [healthy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy_manualsegm.zip), [glaucoma_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma_manualsegm.zip) 以及 [diabetic_retinopathy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy_manualsegm.zip). +首先,下载 [healthy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy.zip) [glaucoma.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma.zip), [diabetic_retinopathy.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy.zip), [healthy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/healthy_manualsegm.zip), [glaucoma_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/glaucoma_manualsegm.zip) 以及 [diabetic_retinopathy_manualsegm.zip](https://www5.cs.fau.de/fileadmin/research/datasets/fundus-images/diabetic_retinopathy_manualsegm.zip) 。 为了将 HRF 数据集转换成 MMSegmentation 格式,您需要运行如下命令: @@ -158,7 +158,7 @@ python tools/convert_datasets/hrf.py /path/to/healthy.zip /path/to/healthy_manua ### STARE -首先,下载 [stare-images.tar](http://cecas.clemson.edu/~ahoover/stare/probing/stare-images.tar), [labels-ah.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-ah.tar) 和 [labels-vk.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-vk.tar). +首先,下载 [stare-images.tar](http://cecas.clemson.edu/~ahoover/stare/probing/stare-images.tar), [labels-ah.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-ah.tar) 和 [labels-vk.tar](http://cecas.clemson.edu/~ahoover/stare/probing/labels-vk.tar) 。 为了将 STARE 数据集转换成 MMSegmentation 格式,您需要运行如下命令: diff --git a/docs_zh-CN/get_started.md b/docs_zh-CN/get_started.md index a15748b..2f5730e 100644 --- a/docs_zh-CN/get_started.md +++ b/docs_zh-CN/get_started.md @@ -25,11 +25,12 @@ | 0.7.0 | mmcv-full>=1.1.2, <1.2.0 | | 0.6.0 | mmcv-full>=1.1.2, <1.2.0 | -注意: 如果您已经安装好 mmcv, 您首先需要运行 `pip uninstall mmcv`。如果 mmcv 和 mmcv-full 同时被安装,会报错 `ModuleNotFoundError`。 +注意: 如果您已经安装好 mmcv, 您首先需要运行 `pip uninstall mmcv`。 +如果 mmcv 和 mmcv-full 同时被安装,会报错 `ModuleNotFoundError`。 ## 安装 -a. 创建一个 conda 虚拟环境并激活它。 +a. 创建一个 conda 虚拟环境并激活它 ```shell conda create -n open-mmlab python=3.7 -y @@ -37,18 +38,19 @@ conda activate open-mmlab ``` -b. 按照[官方教程](https://pytorch.org/) 安装 PyTorch 和 totchvision。 -这里我们使用 PyTorch1.6.0 和 CUDA10.1。 -您也可以切换至其他版本。 +b. 按照[官方教程](https://pytorch.org/) 安装 PyTorch 和 totchvision, +这里我们使用 PyTorch1.6.0 和 CUDA10.1, +您也可以切换至其他版本 ```shell conda install pytorch=1.6.0 torchvision cudatoolkit=10.1 -c pytorch ``` -c. 按照 [官方教程](https://mmcv.readthedocs.io/en/latest/#installation) 安装 [MMCV](https://mmcv.readthedocs.io/en/latest/) 。 -`mmcv` 或 `mmcv-full` 和 MMSegmentation 均兼容,但对于 CCNet 和 PSANet,`mmcv-full` 里的 CUDA 运算是必须的。 +c. 按照 [官方教程](https://mmcv.readthedocs.io/en/latest/#installation) +安装 [MMCV](https://mmcv.readthedocs.io/en/latest/) , +`mmcv` 或 `mmcv-full` 和 MMSegmentation 均兼容,但对于 CCNet 和 PSANet,`mmcv-full` 里的 CUDA 运算是必须的 -**在 Linux 下安装 mmcv:** +**在 Linux 下安装 mmcv:** 通过运行 @@ -59,9 +61,9 @@ pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.5 可以安装好 mmcv-full (PyTorch 1.5 和 CUDA 10.1) 版本。 其他 PyTorch 和 CUDA 版本的 MMCV 安装请参照[这里](https://mmcv.readthedocs.io/en/latest/#install-with-pip) -**在 Windows 下安装 mmcv (有风险):** +**在 Windows 下安装 mmcv (有风险):** -对于 Windows, MMCV 的安装需要本地 C++ 编译工具, 例如 cl.exe. 请添加编译工具至 %PATH%. +对于 Windows, MMCV 的安装需要本地 C++ 编译工具, 例如 cl.exe。 请添加编译工具至 %PATH%。 如果您已经在电脑上安装好Windows SDK 和 Visual Studio,cl.exe 的一个典型路径看起来如下: @@ -87,7 +89,7 @@ pip install mmcv 当前,mmcv-full 并不完全在 windows 上支持。 -d. 安装 MMSegmentation. +d. 安装 MMSegmentation ```shell pip install mmsegmentation # 安装最新版本 @@ -109,11 +111,14 @@ pip install -e . # 或者 "python setup.py develop" 注意: -1. 当在 windows 下训练和测试模型时,请确保路径下所有的'\\' 被替换成 '/'。在 python 代码里可以使用`.replace('\\', '/')`处理路径的字符串。 -2. `version+git_hash` 也将被保存进 meta 训练模型里,即0.5.0+c415a2e。 -3. 当 MMsegmentation 以 `dev` 模式被安装时,本地对代码的修改将不需要重新安装即可产生作用。 -4. 如果您想使用 `opencv-python-headless` 替换 `opencv-python`,您可以在安装 MMCV 前安装它。 -5. 一些依赖项是可选的。简单的运行 `pip install -e .` 将仅安装最必要的一些依赖。为了使用可选的依赖项如`cityscapessripts`,要么手动使用 `pip install -r requirements/optional.txt` 安装,要么专门从pip下安装(即 `pip install -e .[optional]`, 其中选项可设置为 `all`, `tests`, `build`, 和 `optional`). +1. 当在 windows 下训练和测试模型时,请确保路径下所有的'\\' 被替换成 '/', + 在 python 代码里可以使用`.replace('\\', '/')`处理路径的字符串 +2. `version+git_hash` 也将被保存进 meta 训练模型里,即0.5.0+c415a2e +3. 当 MMsegmentation 以 `dev` 模式被安装时,本地对代码的修改将不需要重新安装即可产生作用 +4. 如果您想使用 `opencv-python-headless` 替换 `opencv-python`,您可以在安装 MMCV 前安装它 +5. 一些依赖项是可选的。简单的运行 `pip install -e .` 将仅安装最必要的一些依赖。为了使用可选的依赖项如`cityscapessripts`, + 要么手动使用 `pip install -r requirements/optional.txt` 安装,要么专门从pip下安装(即 `pip install -e .[optional]`, + 其中选项可设置为 `all`, `tests`, `build`, 和 `optional`) ### 完成的安装脚本 @@ -135,9 +140,10 @@ mkdir data ln -s $DATA_ROOT data ``` -#### Windows(有风险) +#### Windows (有风险) -这里便是一个完整安装 MMSegmentation 的脚本,使用 conda 并链接了数据集的路径(以您的数据集路径为 %DATA_ROOT% 来安装)。注意:它必须是一个绝对路径。 +这里便是一个完整安装 MMSegmentation 的脚本,使用 conda 并链接了数据集的路径(以您的数据集路径为 %DATA_ROOT% 来安装)。 +注意:它必须是一个绝对路径。 ```shell conda create -n open-mmlab python=3.7 -y @@ -196,7 +202,7 @@ for frame in video: 当您完成 MMSegmentation 的安装时,上述代码应该可以成功运行。 -我们还提供一个 demo 脚本去可视化单张图片 +我们还提供一个 demo 脚本去可视化单张图片。 ```shell python demo/image_demo.py ${IMAGE_FILE} ${CONFIG_FILE} ${CHECKPOINT_FILE} [--device ${DEVICE_NAME}] [--palette-thr ${PALETTE}] @@ -209,4 +215,4 @@ python demo/image_demo.py demo/demo.jpg configs/pspnet/pspnet_r50-d8_512x1024_40 checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth --device cuda:0 --palette cityscapes ``` -推理的 demo 文档可在此查询:[demo/inference_demo.ipynb](../demo/inference_demo.ipynb). +推理的 demo 文档可在此查询:[demo/inference_demo.ipynb](../demo/inference_demo.ipynb) 。 diff --git a/docs_zh-CN/inference.md b/docs_zh-CN/inference.md index 669ef79..85d9ff0 100644 --- a/docs_zh-CN/inference.md +++ b/docs_zh-CN/inference.md @@ -1,6 +1,6 @@ ## 使用预训练模型推理 -我们提供测试脚本来评估完整数据集(Cityscapes, PASCAL VOC, ADE20k 等) 上的结果,同时为了使其他项目的整合更容易,也提供一些高级 API。 +我们提供测试脚本来评估完整数据集(Cityscapes, PASCAL VOC, ADE20k 等)上的结果,同时为了使其他项目的整合更容易,也提供一些高级 API。 ### 测试一个数据集 @@ -20,17 +20,17 @@ python tools/test.py ${配置文件} ${检查点文件} [--out ${结果文件}] 可选参数: -- `RESULT_FILE`: pickle 格式的输出结果的文件名,如果不专门指定,结果将不会被专门保存成文件。 -- `EVAL_METRICS`: 在结果里将被评估的指标。这主要取决于数据集, `mIoU` 对于所有数据集都可获得,像 Cityscapes 数据集可以通过 `cityscapes` 命令来专门评估,就像标准的 `mIoU`一样。 -- `--show`: 如果被指定,分割结果将会在一张图像里画出来并且在另一个窗口展示。它仅仅是用来调试与可视化,并且仅针对单卡 GPU 测试。请确认 GUI 在您的环境里可用,否则您也许会遇到报错 `cannot connect to X server` -- `--show-dir`: 如果被指定,分割结果将会在一张图像里画出来并且保存在指定文件夹里。它仅仅是用来调试与可视化,并且仅针对单卡GPU测试。使用该参数时,您的环境不需要 GUI。 -- `--eval-options`: 评估时的可选参数,当设置 `efficient_test=True` 时,它将会保存中间结果至本地文件里以节约 CPU 内存。请确认您本地硬盘有足够的存储空间(大于20GB)。 +- `RESULT_FILE`: pickle 格式的输出结果的文件名,如果不专门指定,结果将不会被专门保存成文件 +- `EVAL_METRICS`: 在结果里将被评估的指标,这主要取决于数据集, `mIoU` 对于所有数据集都可获得,像 Cityscapes 数据集可以通过 `cityscapes` 命令来专门评估,就像标准的 `mIoU`一样 +- `--show`: 如果被指定,分割结果将会在一张图像里画出来并且在另一个窗口展示,它仅仅是用来调试与可视化,并且仅针对单卡 GPU 测试,请确认 GUI 在您的环境里可用,否则您也许会遇到报错 `cannot connect to X server` +- `--show-dir`: 如果被指定,分割结果将会在一张图像里画出来并且保存在指定文件夹里,它仅仅是用来调试与可视化,并且仅针对单卡GPU测试,使用该参数时,您的环境不需要 GUI +- `--eval-options`: 评估时的可选参数,当设置 `efficient_test=True` 时,它将会保存中间结果至本地文件里以节约 CPU 内存,请确认您本地硬盘有足够的存储空间(大于20GB) 例子: 假设您已经下载检查点文件至文件夹 `checkpoints/` 里。 -1. 测试 PSPNet 并可视化结果。按下任何键会进行到下一张图。 +1. 测试 PSPNet 并可视化结果。按下任何键会进行到下一张图 ```shell python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ @@ -38,7 +38,7 @@ python tools/test.py ${配置文件} ${检查点文件} [--out ${结果文件}] --show ``` -2. 测试 PSPNet 并保存画出的图以便于之后的可视化。 +2. 测试 PSPNet 并保存画出的图以便于之后的可视化 ```shell python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ @@ -46,7 +46,7 @@ python tools/test.py ${配置文件} ${检查点文件} [--out ${结果文件}] --show-dir psp_r50_512x1024_40ki_cityscapes_results ``` -3. 在数据集 PASCAL VOC (不保存测试结果) 上测试 PSPNet 并评估 mIoU。 +3. 在数据集 PASCAL VOC (不保存测试结果) 上测试 PSPNet 并评估 mIoU ```shell python tools/test.py configs/pspnet/pspnet_r50-d8_512x1024_20k_voc12aug.py \ @@ -54,7 +54,7 @@ python tools/test.py ${配置文件} ${检查点文件} [--out ${结果文件}] --eval mAP ``` -4. 使用4卡 GPU 测试 PSPNet,并且在标准 mIoU 和 cityscapes 指标里评估模型。 +4. 使用4卡 GPU 测试 PSPNet,并且在标准 mIoU 和 cityscapes 指标里评估模型 ```shell ./tools/dist_test.sh configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ @@ -64,7 +64,7 @@ python tools/test.py ${配置文件} ${检查点文件} [--out ${结果文件}] 注意:在 cityscapes mIoU 和我们的 mIoU 指标会有一些差异 (~0.1%) 。因为 cityscapes 默认是根据类别样本数的多少进行加权平均,而我们对所有的数据集都是采取直接平均的方法来得到 mIoU。 -5. 在 cityscapes 数据集上4卡 GPU 测试 PSPNet, 并生成 png 文件以便提交给官方评估服务器。 +5. 在 cityscapes 数据集上4卡 GPU 测试 PSPNet, 并生成 png 文件以便提交给官方评估服务器 首先,在配置文件里添加内容: `configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py`, @@ -86,7 +86,7 @@ python tools/test.py ${配置文件} ${检查点文件} [--out ${结果文件}] 您会在文件夹 `./pspnet_test_results` 里得到生成的 png 文件。 您也许可以运行 `zip -r results.zip pspnet_test_results/` 并提交 zip 文件给 [evaluation server](https://www.cityscapes-dataset.com/submit/)。 -6. 在 Cityscapes 数据集上使用 CPU 高效内存选项来测试 DeeplabV3+ `mIoU` 指标 (没有保存测试结果)。 +6. 在 Cityscapes 数据集上使用 CPU 高效内存选项来测试 DeeplabV3+ `mIoU` 指标 (没有保存测试结果) ```shell python tools/test.py \ diff --git a/docs_zh-CN/model_zoo.md b/docs_zh-CN/model_zoo.md index 56fb663..e5674f0 100644 --- a/docs_zh-CN/model_zoo.md +++ b/docs_zh-CN/model_zoo.md @@ -4,16 +4,16 @@ * 我们默认使用 4 卡分布式训练 * 所有 PyTorch 风格的 ImageNet 预训练网络由我们自己训练,和 [论文](https://arxiv.org/pdf/1812.01187.pdf) 保持一致。 - 我们的 ResNet 网络是基于 ResNetV1c 的变种,在这里输入层的 7x7 卷积被 3个 3x3 取代。 + 我们的 ResNet 网络是基于 ResNetV1c 的变种,在这里输入层的 7x7 卷积被 3个 3x3 取代 * 为了在不同的硬件上保持一致,我们以 `torch.cuda.max_memory_allocated()` 的最大值作为 GPU 占用率,同时设置 `torch.backends.cudnn.benchmark=False`。 - 注意,这通常比 `nvidia-smi` 显示的要少。 -* 我们以网络 forward 和后处理的时间加和作为推理时间,除去数据加载时间。我们使用脚本 `tools/benchmark.py` 来获取推理时间,它在 `torch.backends.cudnn.benchmark=False` 的设定下,计算 200 张图片的平均推理时间。 -* 在框架中,有两种推理模式。 + 注意,这通常比 `nvidia-smi` 显示的要少 +* 我们以网络 forward 和后处理的时间加和作为推理时间,除去数据加载时间。我们使用脚本 `tools/benchmark.py` 来获取推理时间,它在 `torch.backends.cudnn.benchmark=False` 的设定下,计算 200 张图片的平均推理时间 +* 在框架中,有两种推理模式 * `slide` 模式(滑动模式):测试的配置文件字段 `test_cfg` 会是 `dict(mode='slide', crop_size=(769, 769), stride=(513, 513))`. - 在这个模式下,从原图中裁剪多个小图分别输入网络中进行推理。小图的大小和小图之间的距离由 `crop_size` 和 `stride` 决定,重合区域会进行平均。 - * `whole` 模式 (全图模式):测试的配置文件字段 `test_cfg` 会是 `dict(mode='whole')`. 在这个模式下,全图会被直接输入到网络中进行推理。 - 对于 769x769 下训练的模型,我们默认使用 `slide` 进行推理,其余模型用 `whole` 进行推理。 -* 对于输入大小为 8x+1 (比如769),我们使用 `align_corners=True`。其余情况,对于输入大小为 8x+1 (比如 512,1024),我们使用 `align_corners=False`。 + 在这个模式下,从原图中裁剪多个小图分别输入网络中进行推理。小图的大小和小图之间的距离由 `crop_size` 和 `stride` 决定,重合区域会进行平均 + * `whole` 模式 (全图模式):测试的配置文件字段 `test_cfg` 会是 `dict(mode='whole')`. 在这个模式下,全图会被直接输入到网络中进行推理。 + 对于 769x769 下训练的模型,我们默认使用 `slide` 进行推理,其余模型用 `whole` 进行推理 +* 对于输入大小为 8x+1 (比如769),我们使用 `align_corners=True`。其余情况,对于输入大小为 8x+1 (比如 512,1024),我们使用 `align_corners=False` ## 基线 @@ -149,4 +149,4 @@ Please refer [Mixed Precision (FP16) Training](https://github.com/open-mmlab/mms | [CASILVision](https://github.com/CSAILVision/semantic-segmentation-pytorch) | 1.15 | N/A | | [vedaseg](https://github.com/Media-Smart/vedaseg) | 0.95 | 1.25 | -注意:DeepLabV3+ 的输出步长为 8。 +注意:DeepLabV3+ 的输出步长为 8 diff --git a/docs_zh-CN/train.md b/docs_zh-CN/train.md index 52fd9cf..b03b95d 100644 --- a/docs_zh-CN/train.md +++ b/docs_zh-CN/train.md @@ -31,15 +31,15 @@ python tools/train.py ${配置文件} [可选参数] 可选参数可以为: -- `--no-validate` (**不推荐**): 训练时代码库默认会在每 k 轮迭代后在验证集上进行评估,如果不需评估使用命令 `--no-validate`。 -- `--work-dir ${工作路径}`: 在配置文件里重写工作路径文件夹。 -- `--resume-from ${检查点文件}`: 继续使用先前的检查点 (checkpoint) 文件(可以继续训练过程)。 -- `--load-from ${检查点文件}`: 从一个检查点 (checkpoint) 文件里加载权重(对另一个任务进行精调)。 +- `--no-validate` (**不推荐**): 训练时代码库默认会在每 k 轮迭代后在验证集上进行评估,如果不需评估使用命令 `--no-validate` +- `--work-dir ${工作路径}`: 在配置文件里重写工作路径文件夹 +- `--resume-from ${检查点文件}`: 继续使用先前的检查点 (checkpoint) 文件(可以继续训练过程) +- `--load-from ${检查点文件}`: 从一个检查点 (checkpoint) 文件里加载权重(对另一个任务进行精调) `resume-from` 和 `load-from` 的区别: -- `resume-from` 加载出模型权重和优化器状态包括迭代轮数等。 -- `load-from` 仅加载模型权重,从第0轮开始训练。 +- `resume-from` 加载出模型权重和优化器状态包括迭代轮数等 +- `load-from` 仅加载模型权重,从第0轮开始训练 ### 使用多个机器训练 diff --git a/docs_zh-CN/tutorials/config.md b/docs_zh-CN/tutorials/config.md index 72d8659..48e9da1 100644 --- a/docs_zh-CN/tutorials/config.md +++ b/docs_zh-CN/tutorials/config.md @@ -18,7 +18,7 @@ ## 配置文件命名风格 -我们按照下面的风格去命名配置文件。社区贡献者被建议使用同样的风格。 +我们按照下面的风格去命名配置文件,社区贡献者被建议使用同样的风格。 ``` {model}_{backbone}_[misc]_[gpu x batch_per_gpu]_{resolution}_{schedule}_{dataset} @@ -26,12 +26,12 @@ `{xxx}` 是被要求的文件 `[yyy]` 是可选的。 -- `{model}`: 模型种类,例如 `psp`, `deeplabv3` 等等。 -- `{backbone}`: 主干网络种类,例如 `r50` (ResNet-50), `x101` (ResNeXt-101)。 -- `[misc]`: 模型中各式各样的设置/插件,例如 `dconv`, `gcb`, `attention`, `mstrain`。 -- `[gpu x batch_per_gpu]`: GPU数目 和每个 GPU 的样本数, 默认为 `8x2` 。 -- `{schedule}`: 训练方案, `20ki` 意思是 20k 迭代轮数. -- `{dataset}`: 数据集,如 `cityscapes`, `voc12aug`, `ade`。 +- `{model}`: 模型种类,例如 `psp`, `deeplabv3` 等等 +- `{backbone}`: 主干网络种类,例如 `r50` (ResNet-50), `x101` (ResNeXt-101) +- `[misc]`: 模型中各式各样的设置/插件,例如 `dconv`, `gcb`, `attention`, `mstrain` +- `[gpu x batch_per_gpu]`: GPU数目 和每个 GPU 的样本数, 默认为 `8x2` +- `{schedule}`: 训练方案, `20ki` 意思是 20k 迭代轮数 +- `{dataset}`: 数据集,如 `cityscapes`, `voc12aug`, `ade` ## PSPNet 的一个例子 diff --git a/docs_zh-CN/tutorials/customize_datasets.md b/docs_zh-CN/tutorials/customize_datasets.md index fc4975a..fb62a91 100644 --- a/docs_zh-CN/tutorials/customize_datasets.md +++ b/docs_zh-CN/tutorials/customize_datasets.md @@ -75,7 +75,7 @@ dataset_A_train = dict( 1. 如果您想拼接的数据集是同样的类型,但有不同的标注文件, 您可以按如下操作去拼接数据集的配置文件: - 1. 您也许可以拼接两个标注文件夹 `ann_dir`。 + 1. 您也许可以拼接两个标注文件夹 `ann_dir` ```python dataset_A_train = dict( @@ -86,7 +86,7 @@ dataset_A_train = dict( ) ``` - 2. 您也可以去拼接两个 `split` 文件列表。 + 2. 您也可以去拼接两个 `split` 文件列表 ```python dataset_A_train = dict( @@ -98,7 +98,7 @@ dataset_A_train = dict( ) ``` - 3. 您也可以同时拼接 `ann_dir` 文件夹和 `split` 文件列表。 + 3. 您也可以同时拼接 `ann_dir` 文件夹和 `split` 文件列表 ```python dataset_A_train = dict( @@ -110,7 +110,7 @@ dataset_A_train = dict( ) ``` - 在这样的情况下, `ann_dir_1` 和 `ann_dir_2` 分别对应于 `split_1.txt` 和 `split_2.txt`。 + 在这样的情况下, `ann_dir_1` 和 `ann_dir_2` 分别对应于 `split_1.txt` 和 `split_2.txt` 2. 如果您想拼接不同的数据集,您可以如下去拼接数据集的配置文件: @@ -130,7 +130,7 @@ dataset_A_train = dict( ) ``` -一个更复杂的例子如下:分别重复 `Dataset_A` 和 `Dataset_B` N 次和 M 次,然后再去拼接重复后的数据集。 +一个更复杂的例子如下:分别重复 `Dataset_A` 和 `Dataset_B` N 次和 M 次,然后再去拼接重复后的数据集 ```python dataset_A_train = dict( diff --git a/docs_zh-CN/tutorials/customize_models.md b/docs_zh-CN/tutorials/customize_models.md index 6d929dc..c92d7db 100644 --- a/docs_zh-CN/tutorials/customize_models.md +++ b/docs_zh-CN/tutorials/customize_models.md @@ -71,14 +71,14 @@ class CocktailOptimizerConstructor(object): MMSegmentation 里主要有2种组件: -- 主干网络 (backbone): 通常是卷积网络的堆叠,来做特征提取,例如 ResNet, HRNet。 -- 解码头 (decoder head): 用于语义分割图的解码的组件(得到分割结果)。 +- 主干网络 (backbone): 通常是卷积网络的堆叠,来做特征提取,例如 ResNet, HRNet +- 解码头 (decoder head): 用于语义分割图的解码的组件(得到分割结果) ### 添加新的主干网络 这里我们以 MobileNet 为例,展示如何增加新的主干组件: -1. 创建一个新的文件 `mmseg/models/backbones/mobilenet.py`. +1. 创建一个新的文件 `mmseg/models/backbones/mobilenet.py` ```python import torch.nn as nn @@ -99,13 +99,13 @@ class MobileNet(nn.Module): pass ``` -2. 在 `mmseg/models/backbones/__init__.py` 里面导入模块。 +2. 在 `mmseg/models/backbones/__init__.py` 里面导入模块 ```python from .mobilenet import MobileNet ``` -3. 在您的配置文件里使用它。 +3. 在您的配置文件里使用它 ```python model = dict( diff --git a/docs_zh-CN/tutorials/customize_runtime.md b/docs_zh-CN/tutorials/customize_runtime.md index f67dd00..6331789 100644 --- a/docs_zh-CN/tutorials/customize_runtime.md +++ b/docs_zh-CN/tutorials/customize_runtime.md @@ -15,7 +15,7 @@ optimizer = dict(type='Adam', lr=0.0003, weight_decay=0.0001) 使用者可以参照 PyTorch 的 [API 文档](https://pytorch.org/docs/stable/optim.html?highlight=optim#module-torch.optim) 直接设置参数。 -### 自定义 自己实现的优化器 +### 自定义自己实现的优化器 #### 1. 定义一个新的优化器 @@ -42,15 +42,15 @@ class MyOptimizer(Optimizer): 为了让上述定义的模块被框架发现,首先这个模块应该被导入到主命名空间 (main namespace) 里。 有两种方式可以实现它。 -- 修改 `mmseg/core/optimizer/__init__.py` 来导入它。 +- 修改 `mmseg/core/optimizer/__init__.py` 来导入它 - 新的被定义的模块应该被导入到 `mmseg/core/optimizer/__init__.py` 这样注册表将会发现新的模块并添加它。 + 新的被定义的模块应该被导入到 `mmseg/core/optimizer/__init__.py` 这样注册表将会发现新的模块并添加它 ```python from .my_optimizer import MyOptimizer ``` -- 在配置文件里使用 `custom_imports` 去手动导入它。 +- 在配置文件里使用 `custom_imports` 去手动导入它 ```python custom_imports = dict(imports=['mmseg.core.optimizer.my_optimizer'], allow_failed_imports=False) @@ -109,7 +109,8 @@ class MyOptimizerConstructor(object): 如果您有更多的设置,欢迎在 PR 和 issue 里面提交。 - __使用梯度截断 (gradient clip) 去稳定训练__: - 一些模型需要梯度截断去稳定训练过程,如下所示: + + 一些模型需要梯度截断去稳定训练过程,如下所示 ```python optimizer_config = dict( @@ -119,6 +120,7 @@ class MyOptimizerConstructor(object): 如果您的配置继承自已经设置了 `optimizer_config` 的基础配置 (base config),您可能需要 `_delete_=True` 来重写那些不需要的设置。更多细节请参照 [配置文件文档](https://mmsegmentation.readthedocs.io/en/latest/config.html) 。 - __使用动量计划表 (momentum schedule) 去加速模型收敛__: + 我们支持动量计划表去让模型基于学习率修改动量,这样可能让模型收敛地更快。 动量计划表经常和学习率计划表 (LR scheduler) 一起使用,例如如下配置文件就在 3D 检测里经常使用以加速收敛。 更多细节请参考 [CyclicLrUpdater](https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/lr_updater.py#L327) 和 [CyclicMomentumUpdater](https://github.com/open-mmlab/mmcv/blob/f48241a65aebfe07db122e9db320c31b685dc674/mmcv/runner/hooks/momentum_updater.py#L130) 的实现。 @@ -179,11 +181,11 @@ workflow = [('train', 1)] **注意**: -1. 模型的参数在验证的阶段不会被自动更新。 -2. 配置文件里的关键词 `total_epochs` 仅控制训练的 epochs 数目,而不会影响验证时的工作流。 +1. 模型的参数在验证的阶段不会被自动更新 +2. 配置文件里的关键词 `total_epochs` 仅控制训练的 epochs 数目,而不会影响验证时的工作流 3. 工作流 `[('train', 1), ('val', 1)]` 和 `[('train', 1)]` 将不会改变 `EvalHook` 的行为,因为 `EvalHook` 被 `after_train_epoch` 调用而且验证的工作流仅仅影响通过调用 `after_val_epoch` 的钩子 (hooks)。因此, `[('train', 1), ('val', 1)]` 和 `[('train', 1)]` - 的区别仅在于 runner 将在每次训练 epoch 结束后计算在验证集上的损失。 + 的区别仅在于 runner 将在每次训练 epoch 结束后计算在验证集上的损失 ## 自定义钩 (hooks) diff --git a/docs_zh-CN/tutorials/data_pipeline.md b/docs_zh-CN/tutorials/data_pipeline.md index 6ac16ae..64d3993 100644 --- a/docs_zh-CN/tutorials/data_pipeline.md +++ b/docs_zh-CN/tutorials/data_pipeline.md @@ -5,13 +5,13 @@ 按照通常的惯例,我们使用 `Dataset` 和 `DataLoader` 做多线程的数据加载。`Dataset` 返回一个数据内容的字典,里面对应于模型前传方法的各个参数。 因为在语义分割中,输入的图像数据具有不同的大小,我们在 MMCV 里引入一个新的 `DataContainer` 类别去帮助收集和分发不同大小的输入数据。 -更多细节,请查看[这里](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py). +更多细节,请查看[这里](https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py) 。 数据的准备流程和数据集是解耦的。通常一个数据集定义了如何处理标注数据(annotations)信息,而一个数据流程定义了准备一个数据字典的所有步骤。一个流程包括了一系列操作,每个操作里都把一个字典作为输入,然后再输出一个新的字典给下一个变换操作。 这些操作可分为数据加载 (data loading),预处理 (pre-processing),格式变化 (formatting) 和测试时数据增强 (test-time augmentation) 。 -下面的例子就是 PSPNet 的一个流程: +下面的例子就是 PSPNet 的一个流程: ```python img_norm_cfg = dict( @@ -96,19 +96,19 @@ test_pipeline = [ `ToTensor` -- 更新: 由 `keys` 指定. +- 更新: 由 `keys` 指定 `ImageToTensor` -- 更新: 由 `keys` 指定. +- 更新: 由 `keys` 指定 `Transpose` -- 更新: 由 `keys` 指定. +- 更新: 由 `keys` 指定 `ToDataContainer` -- 更新: 由 `keys` 指定. +- 更新: 由 `keys` 指定 `DefaultFormatBundle` @@ -125,7 +125,7 @@ test_pipeline = [ ## 拓展和使用自定义的流程 -1. 在任何一个文件里写一个新的流程,例如 `my_pipeline.py`。它以一个字典作为输入并且输出一个字典。 +1. 在任何一个文件里写一个新的流程,例如 `my_pipeline.py`,它以一个字典作为输入并且输出一个字典 ```python from mmseg.datasets import PIPELINES diff --git a/docs_zh-CN/useful_tools.md b/docs_zh-CN/useful_tools.md index e274fee..65b571d 100644 --- a/docs_zh-CN/useful_tools.md +++ b/docs_zh-CN/useful_tools.md @@ -43,7 +43,7 @@ python tools/publish_model.py ${INPUT_FILENAME} ${OUTPUT_FILENAME} python tools/publish_model.py work_dirs/pspnet/latest.pth psp_r50_hszhao_200ep.pth ``` -最终输出文件将是 `psp_r50_512x1024_40ki_cityscapes-{hash id}.pth`. +最终输出文件将是 `psp_r50_512x1024_40ki_cityscapes-{hash id}.pth`。 ### 导出 ONNX (试验性) @@ -67,18 +67,18 @@ python tools/pytorch2onnx.py \ 各个参数的描述: -- `config` : 模型配置文件的路径。 -- `--checkpoint` : 模型检查点文件的路径。 -- `--output-file`: 输出的 ONNX 模型的路径。如果没有专门指定,它默认是 `tmp.onnx`。 -- `--input-img` : 用来转换和可视化的一张输入图像的路径。 -- `--shape`: 模型的输入张量的高和宽。如果没有专门指定,它将被设置成 `test_pipeline` 的 `img_scale`。 -- `--rescale-shape`: 改变输出的形状。设置这个值来避免 OOM,它仅在 `slide` 模式下可以用。 -- `--show`: 是否打印输出模型的结构。如果没有被专门指定,它将被设置成 `False`。 -- `--verify`: 是否验证一个输出模型的正确性 (correctness)。如果没有被专门指定,它将被设置成 `False`。 -- `--dynamic-export`: 是否导出形状变化的输入与输出的 ONNX 模型。如果没有被专门指定,它将被设置成 `False`。 -- `--cfg-options`: 更新配置选项。 +- `config` : 模型配置文件的路径 +- `--checkpoint` : 模型检查点文件的路径 +- `--output-file`: 输出的 ONNX 模型的路径。如果没有专门指定,它默认是 `tmp.onnx` +- `--input-img` : 用来转换和可视化的一张输入图像的路径 +- `--shape`: 模型的输入张量的高和宽。如果没有专门指定,它将被设置成 `test_pipeline` 的 `img_scale` +- `--rescale-shape`: 改变输出的形状。设置这个值来避免 OOM,它仅在 `slide` 模式下可以用 +- `--show`: 是否打印输出模型的结构。如果没有被专门指定,它将被设置成 `False` +- `--verify`: 是否验证一个输出模型的正确性 (correctness)。如果没有被专门指定,它将被设置成 `False` +- `--dynamic-export`: 是否导出形状变化的输入与输出的 ONNX 模型。如果没有被专门指定,它将被设置成 `False` +- `--cfg-options`: 更新配置选项 -**注意**: 这个工具仍然是试验性的,目前一些自定义操作还没有被支持。 +**注意**: 这个工具仍然是试验性的,目前一些自定义操作还没有被支持 ### 评估 ONNX 模型 @@ -92,7 +92,7 @@ python tools/pytorch2onnx.py \ pip install onnx onnxruntime-gpu ``` -- 参考 [如何在 MMCV 里构建 tensorrt 插件](https://mmcv.readthedocs.io/en/latest/tensorrt_plugin.html#how-to-build-tensorrt-plugins-in-mmcv) 安装TensorRT (可选)。 +- 参考 [如何在 MMCV 里构建 tensorrt 插件](https://mmcv.readthedocs.io/en/latest/tensorrt_plugin.html#how-to-build-tensorrt-plugins-in-mmcv) 安装TensorRT (可选) #### 使用方法 @@ -112,21 +112,21 @@ python tools/deploy_test.py \ 各个参数的描述: -- `config`: 模型配置文件的路径。 -- `model`: 被转换的模型文件的路径。 -- `backend`: 推理的后端,可选项:`onnxruntime`, `tensorrt`。 -- `--out`: 输出结果成 pickle 格式文件的路径。 +- `config`: 模型配置文件的路径 +- `model`: 被转换的模型文件的路径 +- `backend`: 推理的后端,可选项:`onnxruntime`, `tensorrt` +- `--out`: 输出结果成 pickle 格式文件的路径 - `--format-only` : 不评估直接给输出结果的格式。通常用在当您想把结果输出成一些测试服务器需要的特定格式时。如果没有被专门指定,它将被设置成 `False`。 注意这个参数是用 `--eval` 来 **手动添加** -- `--eval`: 评估指标,取决于每个数据集的要求,例如 "mIoU" 是大多数据集的指标而 "cityscapes" 仅针对 Cityscapes 数据集。注意这个参数是用 `--format-only` 来 **手动添加**。 +- `--eval`: 评估指标,取决于每个数据集的要求,例如 "mIoU" 是大多数据集的指标而 "cityscapes" 仅针对 Cityscapes 数据集。注意这个参数是用 `--format-only` 来 **手动添加** - `--show`: 是否展示结果 -- `--show-dir`: 涂上结果的图像被保存的文件夹的路径。 -- `--options`: 重写配置文件里的一些设置。`xxx=yyy` 格式的键值对将被覆盖到配置文件里。 -- `--eval-options`: 自定义的评估的选项。 `xxx=yyy` 格式的键值对将成为 `dataset.evaluate()` 函数的参数变量。 -- `--opacity`: 涂上结果的分割图的透明度。范围在 (0, 1] 之间。 +- `--show-dir`: 涂上结果的图像被保存的文件夹的路径 +- `--options`: 重写配置文件里的一些设置,`xxx=yyy` 格式的键值对将被覆盖到配置文件里 +- `--eval-options`: 自定义的评估的选项, `xxx=yyy` 格式的键值对将成为 `dataset.evaluate()` 函数的参数变量 +- `--opacity`: 涂上结果的分割图的透明度,范围在 (0, 1] 之间 #### 结果和模型 -| 模型 | 配置文件 | 数据集 | 评价指标 | PyTorch | ONNX 运行时间 | TensorRT-fp32 | TensorRT-fp16 | +| 模型 | 配置文件 | 数据集 | 评价指标 | PyTorch | ONNXRuntime | TensorRT-fp32 | TensorRT-fp16 | | :--------: | :---------------------------------------------: | :--------: | :----: | :-----: | :---------: | :-----------: | :-----------: | | FCN | fcn_r50-d8_512x1024_40k_cityscapes.py | cityscapes | mIoU | 72.2 | 72.2 | 72.2 | 72.2 | | PSPNet | pspnet_r50-d8_512x1024_40k_cityscapes.py | cityscapes | mIoU | 77.8 | 77.8 | 77.8 | 77.8 | @@ -155,21 +155,21 @@ python tools/pytorch2torchscript.py \ 各个参数的描述: -- `config` : pytorch 模型的配置文件的路径。 -- `--checkpoint` : pytorch 模型的检查点文件的路径。 -- `--output-file`: TorchScript 模型输出的路径。 如果没有被专门指定,它将被设置成 `tmp.pt`。 -- `--input-img` : 用来转换和可视化的输入图像的路径。 -- `--shape`: 模型的输入张量的宽和高。如果没有被专门指定,它将被设置成 `512 512`。 -- `--show`: 是否打印输出模型的追踪图 (traced graph)。如果没有被专门指定,它将被设置成 `False`。 -- `--verify`: 是否验证一个输出模型的正确性 (correctness)。如果没有被专门指定,它将被设置成 `False`。 +- `config` : pytorch 模型的配置文件的路径 +- `--checkpoint` : pytorch 模型的检查点文件的路径 +- `--output-file`: TorchScript 模型输出的路径,如果没有被专门指定,它将被设置成 `tmp.pt` +- `--input-img` : 用来转换和可视化的输入图像的路径 +- `--shape`: 模型的输入张量的宽和高。如果没有被专门指定,它将被设置成 `512 512` +- `--show`: 是否打印输出模型的追踪图 (traced graph),如果没有被专门指定,它将被设置成 `False` +- `--verify`: 是否验证一个输出模型的正确性 (correctness),如果没有被专门指定,它将被设置成 `False` -**注意**: 目前仅支持 PyTorch>=1.8.0 版本. +**注意**: 目前仅支持 PyTorch>=1.8.0 版本 -**注意**: 这个工具仍然是试验性的,一些自定义操作符目前还不被支持。 +**注意**: 这个工具仍然是试验性的,一些自定义操作符目前还不被支持 例子: -- 导出 PSPNet 在 cityscapes 数据集上的 pytorch 模型。 +- 导出 PSPNet 在 cityscapes 数据集上的 pytorch 模型 ```shell python tools/pytorch2torchscript.py configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py \ @@ -180,12 +180,12 @@ python tools/pytorch2torchscript.py \ ### 导出 TensorRT (试验性) -一个导出 [ONNX](https://github.com/onnx/onnx) 模型成 [TensorRT](https://developer.nvidia.com/tensorrt) 格式的脚本。 +一个导出 [ONNX](https://github.com/onnx/onnx) 模型成 [TensorRT](https://developer.nvidia.com/tensorrt) 格式的脚本 先决条件 -- 按照 [ONNXRuntime in mmcv](https://mmcv.readthedocs.io/en/latest/onnxruntime_op.html) 和 [TensorRT plugin in mmcv](https://github.com/open-mmlab/mmcv/blob/master/docs/tensorrt_plugin.md) ,用 ONNXRuntime 自定义运算 (custom ops) 和 TensorRT 插件安装 `mmcv-full`。 -- 使用 [pytorch2onnx](#convert-to-onnx-experimental) 将模型从 PyTorch 转成 ONNX。 +- 按照 [ONNXRuntime in mmcv](https://mmcv.readthedocs.io/en/latest/onnxruntime_op.html) 和 [TensorRT plugin in mmcv](https://github.com/open-mmlab/mmcv/blob/master/docs/tensorrt_plugin.md) ,用 ONNXRuntime 自定义运算 (custom ops) 和 TensorRT 插件安装 `mmcv-full` +- 使用 [pytorch2onnx](#convert-to-onnx-experimental) 将模型从 PyTorch 转成 ONNX 使用方法 @@ -203,20 +203,20 @@ python ${MMSEG_PATH}/tools/onnx2tensorrt.py \ 各个参数的描述: -- `config` : 模型的配置文件。 -- `model` : 输入的 ONNX 模型的路径。 -- `--trt-file` : 输出的 TensorRT 引擎的路径。 -- `--max-shape` : 模型的输入的最大形状。 -- `--min-shape` : 模型的输入的最小形状。 -- `--fp16` : 做 fp16 模型转换。 -- `--workspace-size` : 在 GiB 里的最大工作空间大小 (Max workspace size)。 -- `--input-img` : 用来可视化的图像。 -- `--show` : 做结果的可视化。 -- `--dataset` : Palette provider, 默认为 `CityscapesDataset`。 -- `--verify` : 验证 ONNXRuntime 和 TensorRT 的输出。 -- `--verbose` : 当创建 TensorRT 引擎时,是否详细做信息日志。默认为 False。 +- `config` : 模型的配置文件 +- `model` : 输入的 ONNX 模型的路径 +- `--trt-file` : 输出的 TensorRT 引擎的路径 +- `--max-shape` : 模型的输入的最大形状 +- `--min-shape` : 模型的输入的最小形状 +- `--fp16` : 做 fp16 模型转换 +- `--workspace-size` : 在 GiB 里的最大工作空间大小 (Max workspace size) +- `--input-img` : 用来可视化的图像 +- `--show` : 做结果的可视化 +- `--dataset` : Palette provider, 默认为 `CityscapesDataset` +- `--verify` : 验证 ONNXRuntime 和 TensorRT 的输出 +- `--verbose` : 当创建 TensorRT 引擎时,是否详细做信息日志。默认为 False -**注意**: 仅在全图测试模式 (whole mode) 下测试过。 +**注意**: 仅在全图测试模式 (whole mode) 下测试过 ## 其他内容 @@ -233,9 +233,9 @@ python tools/print_config.py \ 各个参数的描述: -- `config` : pytorch 模型的配置文件的路径。 -- `--graph` : 是否打印模型的图 (models graph)。 -- `--options`: 自定义替换配置文件的选项。 +- `config` : pytorch 模型的配置文件的路径 +- `--graph` : 是否打印模型的图 (models graph) +- `--options`: 自定义替换配置文件的选项 ### 对训练日志 (training logs) 画图 @@ -247,13 +247,13 @@ python tools/analyze_logs.py xxx.log.json [--keys ${KEYS}] [--legend ${LEGEND}] 示例: -- 对 mIoU, mAcc, aAcc 指标画图。 +- 对 mIoU, mAcc, aAcc 指标画图 ```shell python tools/analyze_logs.py log.json --keys mIoU mAcc aAcc --legend mIoU mAcc aAcc ``` -- 对 loss 指标画图。 +- 对 loss 指标画图 ```shell python tools/analyze_logs.py log.json --keys loss --legend loss