MMDetection安装教程
第零部分:为什么我要写一份教程
众所周知,Python 3.8主动支持阶段已于2021年5月结束,安全支持阶段也已于2024年10月结束,而MMdetection官方文档的安装教程仍然停留在Python 3.8版本,并且即使按照官方文档,仍然会出现很多兼容性问题,完全按照官方文档大概率会报错

本人因为毕业设计需要,在昨天尝试安装了MMdetection,安装过程异常痛苦,出现了各种奇怪的兼容性问题,因此,我想重新写一份MMDetection的安装教程,来帮助可能需要的同学
环境为Ubuntu 22.04 + Python 3.10(虽然也快入土了,但是比3.8强)
第一部分:基础准备
前言
由于本人热衷于使用WSL2+VScode进行开发,所以本教程仅限于WSL2中使用,Linux用户也可以作为参考
考虑到适用性,所以虽然不会从盘古开天地开始讲,但是仍然会讲解一些wsl2和miniconda的安装内容,已经搞定的同学可以从第二部分开始
1.WSL2配置
(1)安装
请不要将WSL2安装在C盘,建议使用镜像在D盘创建新的实例如下图所示
打开Windows Terminal,输入以下内容
wsl --import <新建实例名称> <新建实例存储位置> <实例镜像路径>
如下图所示

(2)WSL2修改默认登录用户
如果是导入的镜像安装的WSL2实例,直接在终端下拉菜单中打开,默认使用的是root账户登录,看起来危险,实际上一点也不安全,因此,我们可以在Windows Terminal的配置文件中修改
请在配置此选项末尾加上 -u <username>

但是这还不够,如果你在Windows Terminal下的文件夹内输入code .来试图在vscode中打开你的工作区,那你会很惊讶的发现在vscode的终端内,你仍然是root登录,看起来不安全,世界上也非常危险
因此,我们回到WSL2下,编辑/etc/wsl.conf文件,来让我们启用vscode时以你的账户登录
如图所示,请将tomori改为你的用户名

(3)WSL2换源
换源的作用不必多说
请参考清华大学开源软件镜像站使用帮助来进行换源
以下仅为示例,请以自身实际开发环境为准
sudo vim /etc/apt/sources.list.d/ubuntu.sources
在命令模式下输入
:%d
回车,以删除文件中的所有内容
粘贴以下内容(Ubuntu 24.04)
Types: deb
URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
# Types: deb-src
# URIs: https://mirrors.tuna.tsinghua.edu.cn/ubuntu
# Suites: noble noble-updates noble-backports
# Components: main restricted universe multiverse
# Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
# 以下安全更新软件源包含了官方源与镜像站配置,如有需要可自行修改注释切换
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
按下esc退出编辑模式,输入:wq退出
进行系统更新
sudo apt update
sudo apt upgrade
当然,你如果乐意,可以装个fastfetch或者screenfetch来欣赏你的成果

2.安装miniconda
为什么要安装miniconda?
如果你不想安装那我也不强求,毕竟谁都有点自己的个性,但是建议安装miniconda来确保环境隔离,让你的Ubuntu不会一团糟。如果你的硬盘空间足够,每个python版本都有自己的WSL2实例,humm,当我没说
直接参考官网:Quickstart install instructions
如图所示
![]()
直接默认,或者根据你的喜好修改,默认安装在/home/user/miniconda3下
我反正自动初始化了,因为我懒

如果你和我一样懒,记得 conda config --set auto_activate no关闭base环境的自动激活
顺便把源换成清华源,参考官方文档清华大学开源软件镜像站使用帮助
(你问我为什么是anaconda?问就是miniconda换源方式和anaconda一样)
vim ~/.condarc如下图所示

事已至此,可以开始安装……不,还不行,你还没装Pytorch
第二部分:依赖准备
1.新建虚拟环境
如果你没安装miniconda请跳过此步骤,但是,我相信你安装了,对吧
在终端中新建并激活你的虚拟环境
conda create -n <your_env_name> python=3.10
conda activate <your_env_name>
举个例子,我的环境名称是mmdet,如下图所示

2.安装pytorch
⚠️⚠️⚠️mmcv最高支持的pytorch版本是pytorch 2.1
这也是我们选择python 3.10的原因之一
由于本人的笔记本带有GPU,所以我选择cuda版本的pytorch,请根据自身实际情况选择合适的pytorch

请务必让你的显卡支持的CUDA版本高于你即将安装的pytorch对应的CUDA版本哦
我个人使用的是pytoch 2.1版本,你也可以安装cuda 11.8版本的
哦对了,你问我为什么不装cuda toolkit?其实pytorch内置了它需要的cuda,没必要装,但是如果你要自己写算子那当我没说哈
conda install pytorch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 pytorch-cuda=12.1 -c pytorch -c nvidia
你可以验证一下安装
python -c "import torch; print(f'PyTorch: {torch.__version__}, CUDA: {torch.cuda.is_available()}, CUDA Version: {torch.version.cuda if torch.cuda.is_available() else \"N/A\"}')"
安装成功会有如下输出:

如果你足够细心,你会发现,提示我们numpy需要降级,这个是我们待会要做的,中间会反复降级好几次
接下来就是地狱般的mmdetection安装了,不过我已经踩过坑了
第三部分:MMMetection安装
前面可是地狱啊
0.使用MIM安装MMEngine和MMCV
这一部分我们按照官方教程没有任何问题,放轻松
pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0" #建议mim install mmcv==2.1.0
⚠️⚠️⚠️注意,mim install "mmcv>=2.0.0"会导致后续报错
当然如果你想到时候再解决也可以,毕竟这是官方教程里不得不品鉴的一环
总之:山到车前必有雾,桥到船头自然沉
第0步应该会安稳的结束

1.源码安装 MMDetection
如果你需要开发和运行mmdet,我们可以从源代码安装它
但是你真的需要吗?
cd ~
git clone https://github.com/open-mmlab/mmdetection.git
P.S.网络问题请自行解决,多说无益

如果接下来按照官网的方式,你将会遇到各种报错,所以请首先降级你的opencv numpy pip然后应该就没有问题了
哦对了,我前面建议过,mmcv应该安装2.1.0版本,你应该没忘记吧
pip install numpy==1.26.4
pip install opencv-python==4.10.0.84
min install mmcv==2.1.0 #如果你在之前没这样做的话
pip install pip==23.3.1
不过还是来欣赏一下官方教程会导致的报错吧,毕竟是不得不品鉴的一环
(1)构建隔离
这是因为conda创新虚拟环境使用的pip版本是pip 25.x引入了更为严格的隔离机制,从源码构建安装需要import torch,但是因为隔离你无法import torch

我们选择降低pip版本,千万不要pip install --no-build-isolation -v -e .
pip install pip==23.3.1
(2)mmcv版本不匹配
当你成功的了降低了numpy的版本,自信满满地尝试官方的验证安装的时候,你会遇到如下报错

对!没错!不支持mmcv 2.2.0!想不到吧哈哈哈哈哈
所以安装mmcv2.1.0
mim install mmcv==2.1.0
(3)numpy版本不匹配
好不容易搞定mmcv,很高兴吧,numpy来了

真是顺顺又利利啊
很简单,安装numpy 1.26.4
然后opencv又不乐意了

降级吧
pip install opencv-python==4.10.0.84
嗯~现在你就可以开始根据官方的方法验证安装了
python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cuda
接着,你就会在~\mmdetection\outputs\vis下发现一张demo.jpg
恭喜你完成了安装

2.mim安装
(1)安装
如果你将mmdet用作依赖项或第三方软件包,请使用MIM安装它
mim install mmdet
P.S.你应该已经给mmcv降级了吧,如果没有,那还是会报兼容性错误,请mim install mmcv==2.1.0
(2)验证安装
创建验证用的python文件
mkdir 你的/验证/文件/的/存储路径
# e.g. mkdir ~/code/test
cd 你的/验证/文件/的/存储路径
# e.g. cd ~/code/test
vim 你的测试用python文件.py
# e.g. vim test.py
在你的测试用文件里粘贴以下内容
from mmdet.apis import init_detector, inference_detector
config_file = 'rtmdet_tiny_8xb32-300e_coco.py'
checkpoint_file = 'rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'
model = init_detector(config_file, checkpoint_file, device='cuda:0') # or device='cpu'
inference_detector(model, 'demo.jpg')
下载配置文件和检查点文件
mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .
诶,你因该发现了,我的demo.jpg呢,所以你现在需要去准备一张xxx.jpg的照片,重命名为demo.jpg,存放在当前目录下
我很懒,所以就直接拿源码里的demo.jpg用了

否则嘛,就会这样

python test.py
不出意外的话,应该可以检测到目标
但是由于官方提供的demo配置文件的问题,会导致检测到的目标数目异常,不影响使用
