首先,按照文档安装,会自动安装mmcv-full==1.7.2版本
pip install -U openmim
mim install "mmcv-full<2.0.0"
运行代码后报错:
AssertionError: MMCV==1.7.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0.
错误原因在于该版本不兼容,至少安装2.0.0rc4版本的,重新安装
pip install mmcv-full==2.0.0rc4
运行代码后,再次报错:
Cannot import name 'Config' from 'mmcv'
错误原因在于mmcv在2.0.x版本之后,Config 等一些训练相关的模块被删除了
出自 v2.0.0 — mmcv 2.0.1 文档
OpenMMLab 团队于 2023 年 4 月 6 日发布 MMCV v2.0.0。在 2.x 版本中,它有以下重大变化:(1)删除了以下组件:
mmcv.fileio
模块,删除于 PR #2179。在需要使用 FileIO 的地方使用 mmengine 中的 FileIO 模块mmcv.runner
、mmcv.parallel
、mmcv.engine
和mmcv.device
,删除于 PR #2216mmcv.utils
的所有类(例如Config
和Registry
)和大部分函数,删除于 PR #2217,只保留少数和 mmcv 相关的函数mmcv.onnx
、mmcv.tensorrt
模块以及相关的函数,删除于 PR #2225- 删除 MMCV 所有的根注册器并将类或者函数注册到 MMEngine 的根注册器
(2)新增了
mmcv.transforms
数据变换模块(3)在 PR #2235 中将包名 mmcv 重命名为 mmcv-lite、 mmcv-full 重命名为 mmcv。此外,将环境变量
MMCV_WITH_OPS
的默认值从 0 改为 1
这也能理解,为什么配置mmcv环境时的混乱不堪了
# 相关代码
import mmcv
import torch
from mmengine.config import Config, DictAction
from mmcv.cnn import fuse_conv_bn
from mmengine.runner import (get_dist_info, init_dist, load_checkpoint,
wrap_fp16_model)
from mmdet.apis import multi_gpu_test, single_gpu_test
from mmdet.datasets import (build_dataloader, build_dataset,
replace_ImageToTensor)
from mmdet.models import build_detector
from mmdet.utils import (build_ddp, build_dp, compat_cfg, get_device,
replace_cfg_vals, setup_multi_processes,
update_data_root)
只能将报错的代码,逐步替换为2.0后版本的模块
参考资料:
Cannot import name ‘Config’ from ‘mmcv’ (unknown location)
问题解决——MMCV报错:ImportError: cannot import name ‘print_log‘ from “mmcv “
其中,报错内容:
ImportError: cannot import name 'Config' from 'mmcv'
ImportError: cannot import name 'get_dist_info' from 'mmengine.runner'
ImportError: cannot import name 'print_log' from 'mmcv'
后续,卸载安装了很多次,都没解决
pip uninstall mmcv
pip uninstall mmcv-full
然后摆烂了几天之后,重新安装,莫名其妙就好了。。。
且流程跟之前一模一样。。。
pip install -U openmim
mim install "mmcv-full<2.0.0"
# 之后再安装requirement文件
pip install -r requirements.txt
再之后按照文档继续安装,然后就正常运行了