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 <hejunjun@sjtu.edu.cn> Co-authored-by: MengzhangLI <mcmong@pku.edu.cn>pull/1801/head
parent
06f0c5de33
commit
9a05fe9fd6
|
@ -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
|
||||
|
|
|
@ -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 格式,您需要运行如下命令:
|
||||
|
||||
|
|
|
@ -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) 。
|
||||
|
|
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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轮开始训练
|
||||
|
||||
### 使用多个机器训练
|
||||
|
||||
|
|
|
@ -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 的一个例子
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue