基于ADE20K数据集的SETR模型训练
安装
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
conda install torch==1.12.0+cu116 torchvision==0.13.0+cu116 -f https://download.pytorch.org/whl/torch_stable.html
pip install mmcv-full==1.6.0 -f https://download.openmmlab.com/mmcv/dist/cu116/torch1.12.0/index.html
git clone https://github.com/fudan-zvg/SETR.git
cd SETR
pip install -e .
pip install -r requirements/optional.txt
mkdir data # 将数据集放到该目录下
训练
./tools/dist_train.sh ${CONFIG_FILE} ${GPU_NUM}
例如在Cityscapes dataset,使用8 GPUs,SETR-PUP训练
./tools/dist_train.sh configs/SETR/SETR_PUP_768x768_40k_cityscapes_bs_8.py 8
或者其他
./tools/dist_train.sh configs/SETR/SETR_Naive_512x512_160k_ade20k_bs_16.py 1
本次使用:
./tools/dist_train.sh configs/SETR/SETR_MLA_512x512_160k_ade20k_bs_8.py 1
test
./tools/dist_test.sh configs/SETR/SETR_MLA_512x512_160k_ade20k_bs_8.py work_dirs/SETR_MLA_512x512_160k_ade20k_bs_8/iter_160000.pth 1 --format-only --eval-options "imgfile_prefix=./SETR_MLA_512x512_160k_ade20k_bs_8_test_results"
修改bug:
将mmseg/models/decode_heads/hlg_utils.py中的16行/19行注释掉
#from ..backbones.region_attention import LayerNorm2d
#from mmseg.models.backbones.hlg_share import AttentionShareGlobal, AttentionShareLocal, DWMlp, InnerPatchEmbed
问题解决:
1.报错:
Traceback (most recent call last):
File "./tools/train.py", line 12, in <module>
from mmseg import __version__
File "/root/autodl-tmp/SETR/mmseg/__init__.py", line 27, in <module>
f'MMCV=={mmcv.__version__} is used but incompatible. ' \
AssertionError: MMCV==1.6.0 is used but incompatible. Please install mmcv>=[1, 1, 2], <=[1, 2, 7].
解决:
将SETR/mmseg/__init__.py中
第6行
MMCV_MAX = '1.2.7'
改为:
MMCV_MAX = '1.7.0'
2.报错:
ImportError: cannot import name 'container_abcs' from 'torch._six' (/root/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/torch/_six.py)
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1) local_rank: 0 (pid: 39872) of binary: /root/miniconda3/envs/open-mmlab/bin/python
解决:
将SETR/mmseg/models/backbones/vit.py中
第6行
from torch._six import container_abcs
改为:
import collections.abc as container_abcs
将SETR/mmseg/models/backbones/vit_mla.py中
第6行
from torch._six import container_abcs
改为:
import collections.abc as container_abcs
3.报错:
File "/root/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/runner/hooks/logger/text.py", line 234, in log
self._log_info(log_dict, runner)
File "/root/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/runner/hooks/logger/text.py", line 153, in _log_info
log_str += f'time: {log_dict["time"]:.3f}, ' \
KeyError: 'data_time'
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1) local_rank: 0 (pid: 2283) of binary: /root/miniconda3/envs/open-mmlab/bin/python
解决:
打开报错文件vim /root/miniconda3/envs/open-mmlab/lib/python3.7/site-packages/mmcv/runner/hooks/logger/text.py
定位到153-154
log_str += f'time: {log_dict["time"]:.3f}, ' \
f'data_time: {log_dict["data_time"]:.3f}, '
将 log_dict["data_time"] 改为:
log_dict.get("data_time", 0.0)
继续训练
./tools/dist_train.sh configs/SETR/SETR_MLA_512x512_160k_ade20k_bs_8.py 1 --resume-from work_dirs/SETR_MLA_512x512_160k_ade20k_bs_8/iter_16000.pth
./tools/dist_train.sh configs/SETR/SETR_MLA_512x512_160k_ade20k_bs_8.py 1 --resume-from work_dirs/SETR_MLA_512x512_160k_ade20k_bs_8/iter_80000.pth
./tools/dist_train.sh configs/SETR/SETR_MLA_512x512_160k_ade20k_bs_8.py 1 --resume-from work_dirs/SETR_MLA_512x512_160k_ade20k_bs_8/latest.pth
数据集目录结构