真的离谱,狗屎库那么难维护
新措施:如果你的代码里已经有了mmseg文件夹,并且你的引用什么的都能从文件夹发现,这时不需要安装mmsegmentation了!只需要把执行路径换到你的工程下,将使用它的py文件放到与mmseg同样目录下:
|-Your Project.(你的工程)
├── README.md
├── README_zh-CN.md
├── configs
├── mmseg
├── api
├── projects
├── your_python_script.py
0.安装
我的版本
mmcv-full 1.7.2
mmengine 0.10.3
mmsegmentation 1.2.2
安装mmcv:
pip install -U openmim
mim install "mmcv>=2.0.0rc1"
# 或者
mim install mmcv
但是出现各种报错,所以我把full也安装了:
mim install mmcv-full
安装mmseg:
pip install mmsegmentation
当然很多都是版本更新维护的问题,所以降版本也可以达到效果,我这里是对应新版本怎么修改。
1. ImportError: cannot import name ‘get_root_logger’ from ‘mmseg.utils’
新版本的mmseg的utils没有get_root_logger
把代码从:
from mmseg.utils import get_root_logger
logger = get_root_logger()
改成:(这是直接用mmcv的logging,参考报错解决方案
import logging
logger = logging.getLogger()
其实from mmseg.utils import (collect_env, get_device, get_root_logger,setup_multi_processes)
直接变更为
from mmseg.utils import (collect_env)
from mmdet.utils import get_device ,setup_multi_processes,get_root_logger
mmdet==2.X
2.ModuleNotFoundError: No module named ‘mmseg.ops’
mmseg.ops迁移到了mmseg.models.utils中,所以直接 from mmseg.models.utils import xx
即可。
from mmseg.models.utils import resize
3.安装时卡在Building wheel for mmcv_full (setup.py) / Building wheel for mmcv (setup.py)
如果使用了pip安装会出现上述情况,终止掉ctrl+c,然后使用mim安装:
mim install mmcv-full
4.ModuleNotFoundError: No module named ‘mmcv.runner’ / ImportError: cannot import name ‘print_log’ from ‘mmcv’
直接补上mmcv-full,安装好之后大概率就无了。
不行就把mmcv都卸载掉重新安装。
5.ImportError: cannot import name ‘IS_MLU_AVAILABLE’ from ‘mmcv.utils’ (unknown location)
安装mmcv即可。不行卸掉全部(mmcv+mmcv-full)重新安装。
6.ModuleNotFoundError: No module named ‘mmseg.core’
core包被删了。
我这个报错是引入build_pixel_sampler
时报的错,所以新位置:
from mmseg.structures import build_pixel_sampler
add_prefix
:
from mmseg.utils import add_prefix
7.ImportError: cannot import name ‘revert_sync_batchnorm’ from 'mmcv.cnn.utils
高版本:
from mmengine.model import revert_sync_batchnorm
8.from mmcv.runner import get_dist_info, init_dist
高版本的改成:
from mmengine.dist.utils import get_dist_info, init_dist
9.from mmcv.utils import Config, DictAction, get_git_hash
from mmengine import Config, DictAction,get_git_hash
10.ModuleNotFoundError: No module named ‘ftfy’
from mmseg.apis import init_random_seed, set_random_seed, train_segmentor
这句
注意:可以这样,直接在这里 api 和 这里 找:ctrl+F 输入你要用的api,就知道新的在哪怎么引入了。
11.from mmcv.utils import Config, DictAction, get_git_hash
变更为
from mmengine import Config, DictAction,get_git_hash
12. from mmseg.datasets import build_dataset
变更为
from mmdet.datasets import build_dataset
这里的mmdet==2.X,比如2.28
13. 评论里的train_segmentor
from mmseg.apis import init_random_seed, set_random_seed, train_segmentor
变更为
from mmengine.runner import set_random_seed
from mmengine.runner import Runner
from mmengine.dist import sync_random_seed as init_random_seed
runner = Runner.from_cfg(cfg)
runner.train(...)
# 或者
runner = Runner(...)
runner.train()
迁移
mmseg.core
在 OpenMMLab 2.0 中,core 包已被删除。core 的 hooks 和 optimizers 被移动到了 mmseg.engine
中,而 core 中的 evaluation 目前是 mmseg.evaluation
。
mmseg.ops
ops 包含 encoding 和 wrappers,它们被移到了 mmseg.models.utils
中。
还有一种情况是,项目自带mmseg目录而只需要下载mmcv即可,这时候train文件在tool里,如果你直接在vscode中运行train.py,则找不到这个mmseg,如果你直接pip install mmsegmentation则会出现大问题,这时候安装他要求的运行方式即可。这是路径引用问题。