Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CodeCamp #139 [Feature] Support REFUGE dataset. #2420

Closed
wants to merge 71 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
f2b8d2f
doc
BLUE-coconut Nov 30, 2022
67b51b7
[Doc]Translate the 1_config.md and modify a wrong statement in 1_conf…
pofengdenihong Dec 2, 2022
4287fd2
Translate the 1_config.md and modify a wrong statement in 1_config.md
pofengdenihong Dec 2, 2022
5668182
modify part of content
BLUE-coconut Dec 3, 2022
ad470a3
Modify some expressions
pofengdenihong Dec 5, 2022
104a24d
changed parts of content
BLUE-coconut Dec 5, 2022
cc6a175
add code for convert refuge datasets
liuruiqiang Dec 5, 2022
b0e57c6
Apply suggestions from code review
MeowZheng Dec 6, 2022
9750c97
Merge pull request #2371 from pofengdenihong/dev-1.x
MeowZheng Dec 6, 2022
8a3d6cd
[Doc] Add ZN datasets.md in dev-1.x
MengzhangLI Dec 6, 2022
dc2c986
add refuge dataset in datasets
liuruiqiang Dec 6, 2022
3d1f8b7
modified
BLUE-coconut Dec 7, 2022
bdf85d8
add REFUGEdATASET in __init__.py
liuruiqiang Dec 7, 2022
addd38d
fix typo
MengzhangLI Dec 7, 2022
372a6ce
Update docs/zh_cn/user_guides/4_train_test.md
BLUE-coconut Dec 7, 2022
07462c3
delete redundant code
liuruiqiang Dec 7, 2022
dc8aa35
CodeCamp #1562 [Doc] update `overview.md`
tianleiSHI Dec 10, 2022
dddf093
Update overview.md
tianleiSHI Dec 10, 2022
44577d4
add refuge config
liuruiqiang Dec 10, 2022
5a96573
add new change for training
liuruiqiang Dec 11, 2022
ed1195a
fix bugs in config
liuruiqiang Dec 11, 2022
d179b87
fix config
liuruiqiang Dec 11, 2022
5383ea6
add init code for transforms
liuruiqiang Dec 11, 2022
e11c76f
debug
liuruiqiang Dec 12, 2022
7edb141
Merge pull request #2355 from BLUE-coconut/master
MeowZheng Dec 12, 2022
b770884
Add torch1.13 in CI
xiexinch Dec 12, 2022
02030b1
use mim install mm packages
xiexinch Dec 12, 2022
d755707
Update docs/zh_cn/overview.md
tianleiSHI Dec 12, 2022
c2042f3
Update docs/zh_cn/overview.md
tianleiSHI Dec 12, 2022
fdd1b95
install all requirements
xiexinch Dec 12, 2022
7537987
Merge pull request #2397 from tianleiSHI/dev-1.x
MeowZheng Dec 12, 2022
e2e70c3
add flip transforms
liuruiqiang Dec 12, 2022
492313b
install wheel
xiexinch Dec 13, 2022
815b24e
add ref
xiexinch Dec 13, 2022
d7b85aa
Merge pull request #2402 from xiexinch/add-torch1.13-in-ci-1.x
MeowZheng Dec 13, 2022
164fd3f
fix
MengzhangLI Dec 13, 2022
e88489e
fix
MengzhangLI Dec 13, 2022
eeee12e
Merge pull request #2387 from MengzhangLI/zn_datasets_1.x
MeowZheng Dec 13, 2022
f5b4c12
add example project
xiexinch Dec 15, 2022
81da7aa
add ci ignore
xiexinch Dec 15, 2022
69048c2
fix transforms
liuruiqiang Dec 15, 2022
adceec3
fix transforms
liuruiqiang Dec 15, 2022
532ff5b
DOC
tianleiSHI Dec 17, 2022
88945e3
train successfully
liuruiqiang Dec 18, 2022
0d59440
train successfully
liuruiqiang Dec 19, 2022
0631053
check code
liuruiqiang Dec 19, 2022
107e964
add revised code
liuruiqiang Dec 19, 2022
ab690bd
Update docs/zh_cn/get_started.md
tianleiSHI Dec 20, 2022
ca68b00
Merge pull request #2417 from tianleiSHI/get_started_doc
MeowZheng Dec 20, 2022
0529df3
fix confilcts in transforms
liuruiqiang Dec 20, 2022
534b27b
add version limits
xiexinch Dec 20, 2022
8539e22
Merge pull request #2412 from xiexinch/mmseg_projects
MeowZheng Dec 20, 2022
d6bf98c
XMerge branch 'dev-1.x' of github.com:liuruiqiang/mmsegmentation into…
MengzhangLI Dec 20, 2022
b667b60
fix code for converting data again and add notes in dataset_converter…
liuruiqiang Dec 21, 2022
6f90a93
fix code for converting data again and add notes in dataset_converter…
liuruiqiang Dec 21, 2022
2846e5a
Merge branch 'dev-1.x' of github.com:liuruiqiang/mmsegmentation into …
MengzhangLI Dec 23, 2022
df45c11
delete background in REFUGEDataset for training
liuruiqiang Dec 27, 2022
680d5e7
delete unnecessary code
liuruiqiang Dec 27, 2022
f1e74dd
Merge branch 'dev-1.x' of github.com:liuruiqiang/mmsegmentation into …
MengzhangLI Jan 5, 2023
882ceae
resolve conflicts & fix pre-commit problem
MengzhangLI Jan 5, 2023
5af7bd9
resolve conflicts
liuruiqiang Jan 6, 2023
d968cbc
Merge branch 'dev-1.x' of github.com:open-mmlab/mmsegmentation into r…
liuruiqiang Jan 6, 2023
62258f4
resolve conflicts
liuruiqiang Jan 6, 2023
b368bdd
refine refuge pr
MengzhangLI Jan 9, 2023
87c8a8d
add ut
MengzhangLI Jan 9, 2023
385a481
Merge branch 'dev-1.x' of github.com:open-mmlab/mmsegmentation into r…
liuruiqiang Jan 9, 2023
6790131
Merge branch 'dev-1.x' of github.com:liuruiqiang/mmsegmentation into …
liuruiqiang Jan 12, 2023
1cc2209
resolve conflicts
liuruiqiang Jan 12, 2023
45a8e34
update upstream dev-1.x & use smaller dataset example in ut
MengzhangLI Jan 16, 2023
fc584cd
update upstream dev-1.x & use smaller dataset example in ut
MengzhangLI Jan 16, 2023
1c16532
fix doc
MengzhangLI Feb 1, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
modified
  • Loading branch information
BLUE-coconut committed Dec 7, 2022
commit 3d1f8b7c46034eba168e46be12e1cf9de9de1158
89 changes: 45 additions & 44 deletions docs/zh_cn/user_guides/4_train_test.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 教程4:使用现有模型进行训练和测试

MMsegmentation 支持在多种设备上训练和测试模型。如下文,具体方式分别为单GPU、分布式以及计算集群的训练和测试。通过本教程,你将知晓如何用 MMsegmentation 提供的脚本进行训练和测试。
MMsegmentation 支持在多种设备上训练和测试模型。如下文,具体方式分别为单GPU、分布式以及计算集群的训练和测试。通过本教程,您将知晓如何用 MMsegmentation 提供的脚本进行训练和测试。

## 在单GPU上训练和测试

Expand All @@ -17,7 +17,7 @@ python tools/train.py ${配置文件} [可选参数]
- `--work-dir ${工作路径}`: 重新指定工作路径
- `--amp`: 使用自动混合精度计算
- `--resume`: 从工作路径中保存的最新检查点文件(checkpoint)恢复训练
- `--cfg-options ${需更覆盖的配置}`: 覆盖已载入的配置中的部分设置,并且 以 xxx=yyy 格式的键值对 将被合并到 config 配置文件中
- `--cfg-options ${需更覆盖的配置}`: 覆盖已载入的配置中的部分设置,并且 以 xxx=yyy 格式的键值对 将被合并到配置文件中
比如: '--cfg-option model.encoder.in_channels=6', 更多细节请看[指导](./1_config.md#Modify-config-through-script-arguments)。

下面是对于多GPU测试的可选参数:
Expand All @@ -27,17 +27,17 @@ python tools/train.py ${配置文件} [可选参数]

**注意:** 命令行参数 `--resume` 和在配置文件中的参数 `load_from` 的不同之处:

`--resume` 只决定是否继续使用工作路径中最新的checkpoint检查点,它常常用于恢复被意外打断的训练。
`--resume` 只决定是否继续使用工作路径中最新的检查点,它常常用于恢复被意外打断的训练。

`load_from` 会明确指定被载入的checkpoint检查点文件,且训练迭代器将从0开始。这常常用于模型微调
`load_from` 会明确指定被载入的检查点文件,且训练迭代器将从0开始,通常用于微调模型

如果你希望从指定的checkpoint检查点上恢复训练你可以使用
如果您希望从指定的检查点上恢复训练您可以使用

```python
python tools/train.py ${配置文件} --resume --cfg-options load_from=${检查点}
```

**在CPU上训练**: 如果机器没有GPU,则在CPU上训练的过程是与单GPU训练一致的。如果机器有GPUs但是不希望使用它们,我们只需要在训练前通过以下方式关闭GPUs训练功能
**在 CPU 上训练**: 如果机器没有 GPU,则在 CPU 上训练的过程是与单GPU训练一致的。如果机器有 GPU 但是不希望使用它们,我们只需要在训练前通过以下方式关闭 GPU 训练功能

```shell
export CUDA_VISIBLE_DEVICES=-1
Expand All @@ -47,19 +47,19 @@ export CUDA_VISIBLE_DEVICES=-1

### 在单GPU上测试

`tools/test.py` 文件提供了在单GPU上部署测试任务的方法
`tools/test.py` 文件提供了在单 GPU 上启动测试任务的方法

基础用法如下:

```shell
python tools/test.py ${配置文件} ${checkpoint模型参数文件} [可选参数]
python tools/test.py ${配置文件} ${模型权重文件} [可选参数]
```

这个工具有几个可选参数,包括:

- `--work-dir`: 如果指定,结果会保存在这个路径下。如果没有指定则会保存在`work_dirs/{配置路径config_path}`.
- `--show`: 当`--show-dir`有明确指定时,可以使用该参数,在程序运行过程中显示预测结果。
- `--show-dir`: 分割处理后图像的存储路基。如果该参数有具体指定,则可视化的分割掩码将被保存到 `work_dir/timestamp/show_dir`.
- `--work-dir`: 如果指定了路径,结果会保存在该路径下。如果没有指定则会保存在 `work_dirs/{配置文件名}` 路径下.
- `--show`: 当 `--show-dir` 没有指定时,可以使用该参数,在程序运行过程中显示预测结果。
- `--show-dir`: 绘制了分割掩膜图片的存储文件夹。如果指定了该参数,则可视化的分割掩膜将被保存到 `work_dir/timestamp/{指定路径}`.
- `--wait-time`: 多次可视化结果的时间间隔。当 `--show` 为激活状态时发挥作用。默认为2。
- `--cfg-options`: 如果被具体指定,以 xxx=yyy 形式的键值对将被合并入配置文件中。

Expand All @@ -85,34 +85,34 @@ OpenMMLab2.0 通过 `MMDistributedDataParallel`实现 **分布式** 训练。
sh tools/dist_train.sh ${配置文件} ${GPU数量} [可选参数]
```

可选参数与[上方](#training-on-a-single-gpu)相同并且还增加了可以指定gpu数量的参数。
可选参数与[上方](#在单GPU上训练)相同并且还增加了可以指定gpu数量的参数。

示例:

```shell
# 训练检查点和日志保存在 WORK_DIR=work_dirs/pspnet_r50-d8_4xb4-80k_ade20k-512x512/
# 如果工作路径不是一个集合,它会被自动生成
# 模型训练的检查点和日志保存在这个路径下: WORK_DIR=work_dirs/pspnet_r50-d8_4xb4-80k_ade20k-512x512/
# 如果工作路径没有被设定,它将会被自动生成
sh tools/dist_train.sh configs/pspnet/pspnet_r50-d8_4xb4-80k_ade20k-512x512.py 8 --work-dir work_dirs/pspnet_r50-d8_4xb4-80k_ade20k-512x512
```

**注意**: 在训练过程中,检查点和日志保存在同一个文件夹结构下,配置文件在`work_dirs/`
不推荐自定义的工作路径,因为评估脚本依赖于源自配置文件名的路径。如果你希望将权重保存在其他地方,请用symlink符号链接,例如:
**注意**: 在训练过程中,检查点和日志保存在`work_dirs/`下的配置文件的相同文件夹结构下
不推荐自定义的工作路径,因为评估脚本依赖于源自配置文件名的路径。如果您希望将权重保存在其他地方,请用符号链接,例如:

```shell
ln -s ${你的工作路径} ${MMSEG}/work_dirs
ln -s ${您的工作路径} ${MMSEG 路径}/work_dirs
```

### 在多GPU上测试

`tools/dist_test.sh` 文件提供了在在多GPU上部署测试任务的方法
`tools/dist_test.sh` 文件提供了在多GPU上启动测试任务的方法

基础用法如下:

```shell
sh tools/dist_test.sh ${配置文件} ${检查点文件} ${GPU数量} [可选参数]
```

可选参数与[上方](#testing-on-a-single-gpu)相同并且还增加了可以指定gpu数量的参数
可选参数与[上方](#在单GPU上测试)相同并且增加了可以指定 gpu 数量的参数

示例:

Expand All @@ -121,23 +121,23 @@ sh tools/dist_test.sh ${配置文件} ${检查点文件} ${GPU数量} [可选参
checkpoints/pspnet_r50-d8_512x1024_40k_cityscapes_20200605_003338-2966598c.pth 4
```

### 在单个机器上执行多进程任务
### 在单台机器上启动多个任务

如果你在单个机器上运行多进程任务,比如:需要4个GPU的2进程任务在有8个GPU的单个机器上,你需要为每个任务进程具体指定不同端口(默认29500),从而避免通讯冲突。否则,会有报错信息——`RuntimeError: Address already in use`(运行错误:地址已在使用中)。
如果您在单个机器上运行多个任务,比如:在8卡GPU的单个机器上执行2个各需4卡GPU的训练任务,您需要为每个任务具体指定不同端口(默认29500),从而避免通讯冲突。否则,会有报错信息——`RuntimeError: Address already in use`(运行错误:地址被使用)。

如果你使用 `dist_train.sh` 来进行训练任务,你可以通过调整环境变量 `PORT` 设置端口。
如果您使用 `dist_train.sh` 来启动训练任务,您可以通过环境变量 `PORT` 设置端口。

```shell
CUDA_VISIBLE_DEVICES=0,1,2,3 PORT=29500 sh tools/dist_train.sh ${配置文件} 4
CUDA_VISIBLE_DEVICES=4,5,6,7 PORT=29501 sh tools/dist_train.sh ${配置文件} 4
```

### Training with multiple machines
### 在多台机器上训练

MMSegmentation 依赖 `torch.distributed` 包来分布式训练
MMSegmentation 的分布式训练依赖 `torch.distributed`。
因此, 可以通过 PyTorch 的 [运行工具 launch utility](https://pytorch.org/docs/stable/distributed.html#launch-utility) 来进行分布式训练。

如果你启动多机器进行训练只用简单地通过以太网连接,你可以直接运行下方命令
如果您启动的多台机器简单地通过以太网连接,您可以直接运行下方命令

在第一个机器上:

Expand All @@ -151,53 +151,54 @@ NNODES=2 NODE_RANK=0 PORT=${主节点端口} MASTER_ADDR=${主节点地址} sh t
NNODES=2 NODE_RANK=1 PORT=${主节点端口} MASTER_ADDR=${主节点地址} sh tools/dist_train.sh ${配置文件} ${GPUS}
```

通常,如果你没有使用像无限带宽一类的高速网络,这个会过程比较慢。
通常,如果您没有使用像无限带宽一类的高速网络,这个会过程比较慢。

## 通过 Slurm 管理进程
## 通过 Slurm 管理任务

[Slurm](https://slurm.schedmd.com/) 是一个很好的为计算集群提供进程规划的系统
[Slurm](https://slurm.schedmd.com/) 是一个很好的计算集群作业调度系统

### 通过 Slurm 在集群上训练

在一个由Slurm管理的集群上,你可以使用来启动训练进程。它支持单节点和多节点的训练
在一个由Slurm管理的集群上,您可以使用`slurm_train.sh`来启动训练任务。它同时支持单节点和多节点的训练

基础用法如下:

```shell
[GPUS=${GPUS}] sh tools/slurm_train.sh ${划分} ${进程名} ${配置文件} [可选参数]
[GPUS=${GPUS}] sh tools/slurm_train.sh ${分区} ${任务名} ${配置文件} [可选参数]
```

下方是一个通过名为_dev_的Slurm划分,调用4个GPU来训练PSPNet,并设置工作路径为共享文件体系
下方是一个通过名为 `dev` 的 Slurm 分区,调用4个 GPU 来训练 PSPNet,并设置工作路径为共享文件系统

```shell
GPUS=4 sh tools/slurm_train.sh dev pspnet configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py --work-dir work_dir/pspnet
```

你可以检查 [源码](../../../tools/slurm_train.sh) 来查看全部的参数和环境变量。
您可以检查 [源码](../../../tools/slurm_train.sh) 来查看全部的参数和环境变量。

### 通过 Slurm 在集群上测试

与训练任务相同, MMSegmentation 提供 `slurm_test.sh` 文件来启动测试进程
与训练任务相同, MMSegmentation 提供 `slurm_test.sh` 文件来启动测试任务

基础用法如下:

```shell
[GPUS=${GPUS}] sh tools/slurm_test.sh ${分区} ${进程名} ${配置文件} ${检查点文件} [可选参数]
[GPUS=${GPUS}] sh tools/slurm_test.sh ${分区} ${任务名} ${配置文件} ${检查点文件} [可选参数]
```

你可以通过 [源码](../../../tools/slurm_test.sh) 来查看全部的参数和环境变量。
您可以通过 [源码](../../../tools/slurm_test.sh) 来查看全部的参数和环境变量。

**注意:** 使用 Slurm 时,需要设置端口,可从以下方式中选取一种。

1. 我们更推荐的通过`--cfg-options`设置端口,因为这不会改变原始配置:

```shell
GPUS=4 GPUS_PER_NODE=4 sh tools/slurm_train.sh ${划分} ${进程名} config1.py ${工作路径} --cfg-options env_cfg.dist_cfg.port=29500
GPUS=4 GPUS_PER_NODE=4 sh tools/slurm_train.sh ${进程名} ${工作路径} config2.py ${工作路径} --cfg-options env_cfg.dist_cfg.port=29501
GPUS=4 GPUS_PER_NODE=4 sh tools/slurm_train.sh ${分区} ${任务名} config1.py ${工作路径} --cfg-options env_cfg.dist_cfg.port=29500
GPUS=4 GPUS_PER_NODE=4 sh tools/slurm_train.sh ${任务名} ${工作路径} config2.py ${工作路径} --cfg-options env_cfg.dist_cfg.port=29501
```

2. 通过修改config配置文件,设置不同的通讯端口:
In `config1.py`:
2. 通过修改配置文件设置不同的通讯端口:

在 `config1.py`中:

```python
enf_cfg = dict(dist_cfg=dict(backend='nccl', port=29500))
Expand All @@ -209,16 +210,16 @@ GPUS=4 sh tools/slurm_train.sh dev pspnet configs/pspnet/pspnet_r50-d8_512x1024_
enf_cfg = dict(dist_cfg=dict(backend='nccl', port=29501))
```

然后你可以通过 config1.py 和 config2.py 同时启动两个任务:
然后您可以通过 config1.py 和 config2.py 同时启动两个任务:

```shell
CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 sh tools/slurm_train.sh ${划分} ${进程名} config1.py ${工作路径}
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 sh tools/slurm_train.sh ${划分} ${进程名} config2.py ${工作路径}
CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 sh tools/slurm_train.sh ${分区} ${任务名} config1.py ${工作路径}
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 sh tools/slurm_train.sh ${分区} ${任务名} config2.py ${工作路径}
```

3. 在命令行中通过环境变量 `MASTER_PORT` 设置端口 :

```shell
CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 MASTER_PORT=29500 sh tools/slurm_train.sh ${划分} ${进程名} config1.py ${工作路径}
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 MASTER_PORT=29501 sh tools/slurm_train.sh ${划分} ${进程名} config2.py ${工作路径}
CUDA_VISIBLE_DEVICES=0,1,2,3 GPUS=4 MASTER_PORT=29500 sh tools/slurm_train.sh ${分区} ${任务名} config1.py ${工作路径}
CUDA_VISIBLE_DEVICES=4,5,6,7 GPUS=4 MASTER_PORT=29501 sh tools/slurm_train.sh ${分区} ${任务名} config2.py ${工作路径}
```