【代码问题】mmcv+mmseg版本升级报错

本文讲述了在升级mmseg库过程中遇到的各种问题,如ImportError和ModuleNotFoundError,以及相应的解决策略,包括修改导入方式、降级版本、使用mim安装等。重点介绍了mmseg核心包的迁移和操作模块的调整路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

真的离谱,狗屎库那么难维护

新措施:如果你的代码里已经有了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迁移

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则会出现大问题,这时候安装他要求的运行方式即可。这是路径引用问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值