目录
3.升级为预编译Detectron2匹配的pytorch 1.10.0版本(推荐)
⚡插播一条老家自产的糖心苹果,多个品种,欢迎选购!有问题随时私信我⚡:
🍎🍎来自雪域高原的馈赠——海拔2000米的大凉山高原生态糖心苹果🍎🍎
https://blog.csdn.net/qq_15969343/article/details/126107252
一.问题描述
最近在使用Detectron2进行目标检测相关的工作,因为Ubuntu电脑上有之前cuda的安装包,偷了个懒,没有按照Detectron2、cuda、pytorch、python的对应关系:
直接就使用该cuda(11.3)安装包进行cuda的安装,然后接着偷懒,发现Detectron2(最新的0.6)有已经有预编译的包(如果是自己从源码编译,大概率不会出现本文描述的错误,可以右上角关闭本文了),便直接使用pip进行Detectron2的安装:
python -m pip install detectron2 -f https://dl.fbaipublicfiles.com/detectron2/wheels/cu113/torch1.10/index.html
pytorch直接就使用了之前装的1.8.1(忘了1.8.1基于11.1.1):
WIN10安装Detectron2(0.1或0.4.1,基于Pytorch1.8.1、Cuda11.1.1)https://blog.csdn.net/qq_15969343/article/details/118417147?spm=1001.2014.3001.5502 装好之后,运行程序发生了如题的错误:
Traceback (most recent call last):
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/code.py", line 91, in runcode
exec(code, self.locals)
File "<input>", line 1, in <module>
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_umd.py", line 198, in runfile
pydev_imports.execfile(filename, global_vars, local_vars) # execute the script
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
exec(compile(contents+"\n", file, 'exec'), glob, loc)
File "/media/jayce/Disk/Code/Python/detectron2_test/predict_image_ubuntu.py", line 20, in <module>
from detectron2.engine import DefaultPredictor
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/engine/__init__.py", line 11, in <module>
from .hooks import *
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/engine/hooks.py", line 22, in <module>
from detectron2.evaluation.testing import flatten_results_dict
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/evaluation/__init__.py", line 2, in <module>
from .cityscapes_evaluation import CityscapesInstanceEvaluator, CityscapesSemSegEvaluator
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/evaluation/cityscapes_evaluation.py", line 11, in <module>
from detectron2.data import MetadataCatalog
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/data/__init__.py", line 4, in <module>
from .build import (
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/data/build.py", line 13, in <module>
from detectron2.structures import BoxMode
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/structures/__init__.py", line 3, in <module>
from .image_list import ImageList
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/structures/image_list.py", line 8, in <module>
from detectron2.layers.wrappers import shapes_to_tensor
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/layers/__init__.py", line 3, in <module>
from .deform_conv import DeformConv, ModulatedDeformConv
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
File "/home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/layers/deform_conv.py", line 11, in <module>
from detectron2 import _C
File "/snap/pycharm-professional/278/plugins/python/helpers/pydev/_pydev_bundle/pydev_import_hook.py", line 21, in do_import
module = self._system_import(name, *args, **kwargs)
ImportError: /home/jayce/anaconda3/envs/detectron2/lib/python3.6/site-packages/detectron2/_C.cpython-36m-x86_64-linux-gnu.so: undefined symbol: _ZN2at4_ops6narrow4callERKNS_6TensorElll
报错挺长,我们只需要关注最后一句并将其在Detectron2的github页面进行搜索,发现大部分产生undefined symbol: _ZN2at4_ops6narrow4callERKNS_6TensorElll的原因都是因为pytorch、cuda、Detectron2的版本不匹配导致:
那么知道问题该如何解决呢?
二.解决方法
1.从源码编译
Ubuntu用户相对简单,满足下述条件,一步一步来就行了:
Windows用户不怕折腾的同学可以参考我之前的博客:
2.安装pytorch1.8.1需要的cuda11.1
安装cuda的教程太多了,随便搜一个就行,注意版本要装cuda11.1即可。
3.升级为预编译Detectron2匹配的pytorch 1.10.0版本(推荐)
自己从源码编译显然太麻烦了,安装cuda也麻烦,咱们还是升级pytorch吧,可是打开官网却发现没有1.10.0的下载链接:
历史版本是从1.9.0开始的,也没有1.10.0:
那可咋办?直接在torch仓库(https://download.pytorch.org/whl/cu113/torch_stable.html),找0.10.0的安装包呗:
然后选择对应的python(我这边是python3.6.3)版本下载进行离线安装,或者使用pip进行在线安装即可:
pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
装完之后,再次运行,成功输出结果: