前提:
使用mmyolo,部署完环境和依赖库之后运行程序,遇到报错:
ImportError: /home/ms/anaconda3/envs/torchMMyolo/lib/python3.8/site-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN3c105ErrorC2ENS_14SourceLocationESs
问题:
版本不对应的问题(可能是torch或者cuda的版本和MMYOLO及其依赖包版本不对应,或者是别的问题。)
我之前是直接从别的torch虚拟环境, conda clone复制过来,确定cuda可用之后,直接部署的MMyolo和MMEngine, MMCV, MMDetection,然后出现了以上错误。
尝试把MMEngine, MMCV, MMDetection卸载,重装之后还是不行,这几个包之间的对应是没问题的,应该就是和克隆的conda (torch)环境里边原来的包之间有不对应的。
所以尝试了一种新的解决方式(以下),成功了。
解决方式:
1. 重新conda create了新的torch虚拟环境(注意torch、torchvision和cuda版本)
conda create -n mmyolo1 python=3.8 pytorch==1.10.0 torchvision==0.11.0 cudatoolkit=10.2 -c pytorch -y
conda activate mmyolo1
torch和cuda按之前的就行,在配其他环境的时候肯定对应过,我的是torch==1.10.0,cuda10.2(显卡是2080ti,驱动是470,环境外的cuda是11.1)
不确定对应版本的,可以查看pytorch官网(链接):Previous PyTorch Versions | PyTorch
配置完之后,查看一下cuda是否可用:
import torch
print(torch.__version__) # 1.10.0
print(torch.version.cuda) # 10.2
print(torch.cuda.is_available()) # True
2. 接着按照MMyolo安装教程,安装各个安装包即可
pip install openmim
mim install "mmengine>=0.3.1"
mim install "mmcv>=2.0.0rc1,<2.1.0"
mim install "mmdet>=3.0.0rc3,<3.1.0"
git clone https://github.com/open-mmlab/mmyolo.git
cd mmyolo # 如果是直接从MMyolo官网下载、解压并创建好的project,直接在工程文件里运行后面两条指令即可
# Install albumentations
pip install -r requirements/albu.txt
# Install MMYOLO
mim install -v -e .
3. 运行demo,查看是否部署成功。
# 下载模型
mim download mmyolo --config yolov5_s-v61_syncbn_fast_8xb16-300e_coco --dest .
# 运行demo
python demo/image_demo.py demo/demo.jpg \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco.py \
yolov5_s-v61_syncbn_fast_8xb16-300e_coco_20220918_084700-86e02187.pth
# 可选参数
# --out-dir ./output *检测结果输出到指定目录下,默认为./output, 当--show参数存在时,不保存检测结果
# --device cuda:0 *使用的计算资源,包括cuda, cpu等,默认为cuda:0
# --show *使用该参数表示在屏幕上显示检测结果,默认为False
# --score-thr 0.3 *置信度阈值,默认为0.3