使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(三)MMDetection安装
一、重新选择版本
之前安装好的版本为:
pytorch=2.2.2
python=3.11
cuda=11.8
cudnn=8.7.0
在此基础上安装MMDetection时出现了一些版本不兼容出错提示,出错提示的内容都是本地已安装的依赖包版本高于了所需版本,就是说之前安装的版本过于新了,需要安装与MMDetection推荐版本较为接近的。
打开官网:开始你的第一步 — MMDetection 3.3.0 文档

官网的推荐版本是基于Python>=3.7,cuda>=9.2,pytorch>=1.8。依据官网推荐,对软件的版本进行再一次的规划。
打开pytorch的下载文件列表,查找pytorch版本,以及支持的cuda和cudnn版本。
Index of /anaconda/cloud/pytorch/linux-64/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

以及torchvision和torch以及python的版本对应表:

所以重新选定的版本:
pytorch=1.9.0
torchvision=0.10.0
python=3.8
cuda=11.1
cudnn=8.0,以上版本略高于和比较接近官网的要求。
在上面的网址点击下载得到了pytorch的安装文件:
pytorch-1.9.0-py3.8_cuda11.1_cudnn8.0.5_0.tar.bz2
或者这里也可以选择不下载,最后从conda的环境中在线安装。
cuda下载地址:
https://developer.nvidia.com/cuda-11-1-0-download-archive

下载得到cuda安装文件,cuda_11.1.0_455.23.05_linux.run:https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run
cudnn:
https://developer.nvidia.com/cudnn-archive


二、安装新的cuda和cudnn
在保存安装文件的文件夹下打开终端,或者用cd的指令切换到该目录,鼠标右键-->打开于终端,在打开的终端中输入
sudo sh cuda_11.1.0_455.23.05_linux.run
然后出错了: 
打开cuda的安装日志:
sudo nano /var/log/cuda-installer.log
意思说是gcc版本过高,查阅了资料,cuda11.1需要GCC7、8、9。
按照下文的方法安装并切换到GCC9:
用下面文章的方法安装CUDA11.1,此处不再赘述:使用 MMDetection 实现 Pascal VOC 数据集的目标检测项目练习(二)系统安装_pascal voc数据集-CSDN博客
注意:由于已经安装了一个版本的cuda ,所以安装过程到了这里要选no:
这样就安装了第二个版本的cuda在系统中。
修改.bashrc文件,使cuda的默认路径指向新安装的v11.1:

现在系统中有两个版本的cuda,v11.8和v11.1,当前指向的路径是v11.1,如果需要再次使用v11.8,可以在Ubuntu系统新建一个用户,并将新用户的.bashrc文件中的路径改为v11.8即可,需要用v11.8就登录新用户。
不同用户分配不同版本cuda更彻底的办法是修改/etv/profile文件,根据不同用户的登录,在系统启动时就把cuda版本指定好,这样的好处是pycharm中不用再设置python控制台路径,也不用在每个用户的.bashrc中设置路径。具体如下:
假如,使用cuda11.1的用户名为cu111,使用cuda11.8的用户名为cu118,首先输入:
sudo nano /etc/profile
在打开的文件中加入:
if [ "$USER" = "cu111" ]; then
export PATH="$PATH:/usr/local/cuda-11.1/bin"
export LD_LIBRARY_PATH="/usr/local/cuda-11.1/lib64:/usr/local/cuda-11.1/extras/CUPTI/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME="/usr/local/cuda-11.1"
elif [ "$USER" = "cu118" ]; then
export PATH="$PATH:/usr/local/cuda-11.8/bin"
export LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:/usr/local/cuda-11.8/extras/CUPTI/lib64:$LD_LIBRARY_PATH"
export CUDA_HOME="/usr/local/cuda-11.8"
fi
.bashrc文件的原理和作用范围见:Ubuntu系统的.bashrc、/etc/profile 和 /etc/environment文件_.bashrc 三种-CSDN博客
测试:
cuda已经由v11.8切换到了v11.1。
三、重新创建环境和安装pytorch
conda create --name mmde python=3.8
conda activate mmde
conda install pytorch==1.9.0 torchvision==0.10.0 cudatoolkit=11.1 -c pytorch
系统会自动下载和安装pytorch、vision以及依赖包:

这里有个坑,由于我之前在conda源里设置了清华源,如果上面的conda install语句的最后不加 -c pytorch,就会从清华源下载安装包,速度会快些,然而,最终得到的torch是cpu版的,加 -c pytorch后从官网默认源就可以安装到GPU版。
不加 -c pytorch,使用清华源得到的版本:

禁用清华源,加 -c pytorch,使用默认源得到的版本:

起初安装的时候没注意这个细节,导致后面运行torch.cuda.is_available()时一直输出False,然后又一直以为是路径配置上有问题,浪费了很多时间。
得到的经验:
1、在conda install时一定要看清楚版本,如果版本不对就换做默认源下载安装。 安装完之后记得用conda list再次确认版本。
2、如果安装后的版本始终不对,将CPU版的用pip uninstall卸载(不要用conda uninstall,那样会把依赖包也一并卸载掉), 在conda环境中conda install之前下载的本地包:
pip uninstall torch
conda install pytorch-1.9.0-py3.8_cuda11.1_cudnn8.0.5_0.tar.bz2
四、安装mmdetection
使用官网的推荐:开始你的第一步 — MMDetection 3.3.0 文档
1、安装 MMEngine 和 MMCV

成功安装MMEngine 和 MMCV:
后记:这里有一个坑,按照官网的版本要求,mmcv>=2.0.0,在我安装的这个时间节点(2024-11-25)会安装一个2.2.0版的mmcv,但是它后面又有要求mmcv版本>=2.0.0并且<2.2.0,这样就会报错。所以我又试着安装了一次,没有执行mim install "mmcv>=2.0.0",而是改为了pip install mmcv==2.1.0,安装一个2.1.0版本的mmcv。在后面测试MMDetection是否成功安装的时候,不用注释掉版本检测也不会报错了。
2、注册和配置git
如果系统未安装git,需要安装:
sudo apt-get install git
如果未注册git用户,在github官网:GitHub · Build and ship software on a single, collaborative platform · GitHub
注册git用户,然后在终端输入:
git config --global user.name GitHub用户名
git config --global user.email GitHub注册时填写的邮箱
3、克隆和安装项目:

在/home/documents目录下 (或者自己想的其他目录,这里注意不要选类似于用户的根目录:/home之类的需要权限的目录,否则在安装过程中会遇到权限问题,很麻烦),鼠标右键-->Open in Terminal,分别输入以下指令:
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# "-v" 指详细说明,或更多的输出
# "-e" 表示在可编辑模式下安装项目,因此对代码所做的任何本地修改都会生效,从而无需重新安装。
第一行git clone,由于网络的原因,可能会重复很多次才能连接上,或者换一个时段再执行。
执行完git clone后:

这里再回头提醒一次,克隆完之后最好将最初的原始文件复制一份作为备份,以防后面学习和实践中将程序改乱了无法恢复,我就是这个原因,又不得不重新克隆了一次原始文件。
在执行pip install之前记得激活设置好的conda环境:比如我的是mmde
conda activate mmde
然后在激活的环境中安装:
pip install -v -e .
记得-e的最后有一个“.",其含义是将项目安装在当前目录。
安装完成:
4、测试MMDetection是否成功安装
参照:【目标检测】手把手教你如何使用MMDetection训练自己的数据集-CSDN博客
在/dowloads/目录中打开于终端,输入下面的指令下载文件:
mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .
同样的,由于网络原因,可能需要多执行几次才能下载成功。
执行完之后会在当前目录下多出来两个文件:
rtmdet_tiny_8xb32-300e_coco.py
rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth

将这两个文件拷贝到MMDetection的安装目录。
在MMDetection的安装目录下打开终端,激活环境,然后:
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
与原文作者一样遇到了mmcv版本错误提示:
Traceback (most recent call last):
File "demo/image_demo.py", line 63, in <module>
from mmdet.apis import DetInferencer
File "/home/dy/Documents/mmdetection/mmdet/__init__.py", line 16, in <module>
assert (mmcv_version >= digit_version(mmcv_minimum_version)
AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0.
打开mmdetection/mmdet/__init__.py,注释掉mmcv版本检测的语句:
后记:如果一开始就安装2.1.0的mmcv,就不会提示出错,不用注释。

再次运行:
出现了ImportError: libcudart.so.10.2: cannot open shared object file: No such file or directory的出错提示。
解决办法:安装与当前CUDA版本和torch版本匹配的mmcv-full,我的版本是这样的:
pytorch=1.9.0
cuda=11.1
所以:
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html
再次运行:

成功运行并把预测结果图片输出到了Outputs文件夹下,打开mmdetection/outputs/vis/demo.jpg:

当然了,把上述的指令中的图片换成另一个demo图片:large_image.jpg也是可以的。
python demo/image_demo.py demo/large_image.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cuda

甚至,在网络随便找了一个街景图片,也是可以的:

(记得把mmdetection/mmdet/__init__.py注释掉的代码改回去。)
好的,至此,正式迈入了MMDetection的大门,开始目标检测的神奇之旅!
更多推荐



所有评论(0)