0%

MMSegmentation平台安装报错问题解决记录

简介

在介绍MMSegmentation之前首先要介绍一下OpenMMLab,源自官方的介绍:

OpenMMLab(浦视)是上海人工智能实验室的计算机视觉算法开源体系,是深度学习时代全球领域最全面、最具影响力的视觉算法开源项目,全球最大最全的开源计算机视觉算法库,为学术和产业界提供一个可跨方向、结构精良、易复现的统一算法工具库。

OpenMMLab 已经累计开源了超过 30 个算法库,涵盖分类、检测、分割、视频理解等众多研究领域,拥有超过 300 种算法、2,400 多个预训练模型。在 GitHub 上获得超过 72,000 个标星,同时吸引了超过 1,500 名社区开发者参与项目贡献,用户遍及超过 110 个国家和地区,覆盖全国全球顶尖高校、研究机构和企业。

总之,OpenMMLab就是一个计算机视觉方向的开源算法库,是为方便开发者进行统一管理、使用而建立的,其包含了非常丰富的开源视觉算法,许多新发表的论文也会基于该平台开源自己的代码;MMSegmentation是OpenMMLab 项目中的语义分割部分,同样类似地还有物体检测的MMDetection等。

本人在安装MMSegmentation过程中遇到了一个问题,在网上也找到了许多关于同样问题的内容,官方给出解决方案极具模糊性,无法帮助本人解决该问题。本人在经过数次的卸载重装后发现了一个简单的解决方案(有点取巧的嫌疑),使得安装完可以正常运行,但不知道后续会有什么其他幺蛾子出现,但最起码目前可以正常运行了,所以在此记录一下;同时,也希望官方可以出具更合理的解决方案。

问题与解决过程

问题描述

按照官方提供的使用手册,创建conda环境,然后安装PyTorch,注意,这是第一个坑:使用手册推荐的conda安装命令会安装CPU版本的PyTorch,所以此处应该进入PyTorch官网、使用官方推荐的命令进行安装,如Fig.1所示:

image-20240529204944850

然后,手册建议安装openmim,后续通过MIM命令(类似pip)来安装mmengine、mmcv等:

1
2
3
4
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"
pip/mim install "mmsegmentation>=1.0.0"

到这一部分安装都很顺利,然后验证安装是否成功,手册中也给出了一个推理demo来验证,验证过程就出现了报错:

1
2
3
4
5
6
7
Traceback (most recent call last):                                                   
File "demo/image_demo.py", line 6, in <module>
from mmseg.apis import inference_model, init_model, show_result_pyplot
File "/home/***/codes/python/mmsegmentation/mmseg/__init__.py", line 61, in <modul
e>
assert (mmcv_min_version <= mmcv_version < mmcv_max_version), \
AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4.

解决过程

在网上搜索该报错后,发现很多网友遇到类似的问题,官方给的解释是mmcv、mmengine、mmsegmentation版本要兼容,具体版本可参考该页面,该页面的主要内容如Fig.2所示:

image-20240529210109070

根据官方的安装教程,安装完的软件版本如下所示:

1
2
3
4
5
Package         Version    Source
-------------- --------- --------------------------------------------
mmcv 2.2.0 https://github.com/open-mmlab/mmcv
mmengine 0.10.4 https://github.com/open-mmlab/mmengine
mmsegmentation 1.2.1 https://github.com/open-mmlab/mmsegmentation

但是Fig.2中给定的版本关系都是>=关系,根据查询的程序安装版本明明是满足>=关系的,但就是会报错。包括官方Github页面Issues中也是一直强调程序版本问题,但就是不知道哪一版本才可以正确对应…

于是乎,开始了程序的卸载与重装。在安装完mmcv==2.1.0之后,该demo跑通了,但跑自己的程序时仍然报错:

1
2
3
4
5
6
File "inference_manul.py", line 1, in <module>
from mmseg.apis import init_model, inference_model, show_result_pyplot
File "/home/***/codes/python/mmsegmentation/mmseg/__init__.py", line 61, in <modul
e>
assert (mmcv_min_version <= mmcv_version < mmcv_max_version), \
AssertionError: MMCV==2.1.0 is used but incompatible. Please install mmcv>=2.0.0rc4.

这就见了鬼了,明明从mmseg.apis 导入的函数都一样,为什么demo跑通了自己写的程序就是跑不通!后续又开始尝试卸载重装,甚至到了自己瞎猜mmcv版本的情况了:

image-20240529211155057

突然间,想到可以查看一下具体报错的代码,于是在ipython中导入mmseg.apis 的函数,查看具体报错内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
AssertionError                            Traceback (most recent call last)          
Cell In[1], line 1
----> 1 from mmseg.apis import init_model, inference_model, show_result_pyplot

File ~/codes/python/mmsegmentation/mmseg/__init__.py:61
57 mmcv_max_version = digit_version(MMCV_MAX)
58 mmcv_version = digit_version(mmcv.__version__)
---> 61 assert (mmcv_min_version <= mmcv_version < mmcv_max_version), \
62 f'MMCV=={mmcv.__version__} is used but incompatible. ' \
63 f'Please install mmcv>=2.0.0rc4.'
65 mmengine_min_version = digit_version(MMENGINE_MIN)
66 mmengine_max_version = digit_version(MMENGINE_MAX)

AssertionError: MMCV==2.1.0 is used but incompatible. Please install mmcv>=2.0.0rc4.

发现原来在__init__.py文件中给定了程序版本限制参数:MMCV_MIN、MMCV_MAX等,那直接在该文档中修改该参数是否可行?于是打开文件,修改为以下内容:

1
2
3
4
MMCV_MIN = '2.0.0rc4'
MMCV_MAX = '2.2.0'
MMENGINE_MIN = '0.5.0'
MMENGINE_MAX = '1.0.0'

然后,就成功跑通了…没想到问题就这么戏剧性地解决了。

问题总结

根据上述解决过程可以发现本人是通过一种取巧的方式解决了该问题,这同时也说明了官方对于版本管理的混乱,没有一个清晰的兼容版本对应关系,反而在一团乱麻之后修改程序中的数值来解决版本兼容问题,显得有点儿戏了;尽管目前工作良好,但也不知道后续会不会有其他问题出现。所以,还是希望官方后续出具一个清晰的程序版本对应关系吧。