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
zhangrui_wolf 2021-08-05 16:24:01 +08:00 committed by GitHub
parent 06f0c5de33
commit 9a05fe9fd6
12 changed files with 160 additions and 136 deletions

View File

@ -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

View File

@ -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 格式,您需要运行如下命令:

View File

@ -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 Studiocl.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)

View File

@ -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 \

View File

@ -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 (比如 5121024),我们使用 `align_corners=False`
在这个模式下,从原图中裁剪多个小图分别输入网络中进行推理。小图的大小和小图之间的距离由 `crop_size``stride` 决定,重合区域会进行平均
* `whole` 模式 (全图模式)测试的配置文件字段 `test_cfg` 会是 `dict(mode='whole')`. 在这个模式下,全图会被直接输入到网络中进行推理。
对于 769x769 下训练的模型,我们默认使用 `slide` 进行推理,其余模型用 `whole` 进行推理
* 对于输入大小为 8x+1 比如769我们使用 `align_corners=True`。其余情况,对于输入大小为 8x+1 (比如 5121024),我们使用 `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

View File

@ -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轮开始训练
### 使用多个机器训练

View File

@ -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 的一个例子

View File

@ -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(

View File

@ -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(

View File

@ -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)

View File

@ -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

View File

@ -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