一、问题描述
我的环境是Ubuntu20.04,Cuda版本是11.4,在复现OpenPCDet的时候遇到了下面问题:
Traceback (most recent call last):
File "train.py", line 7, in <module>
from test import repeat_eval_ckpt
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/test.py", line 14, in <module>
from eval_utils import eval_utils
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/eval_utils/eval_utils.py", line 8, in <module>
from pcdet.models import load_data_to_gpu
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/__init__.py", line 6, in <module>
from .detectors import build_detector
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/detectors/__init__.py", line 1, in <module>
from .detector3d_template import Detector3DTemplate
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/detectors/detector3d_template.py", line 8, in <module>
from .. import backbones_2d, backbones_3d, dense_heads, roi_heads
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/backbones_3d/__init__.py", line 2, in <module>
from .spconv_backbone import VoxelBackBone8x, VoxelResBackBone8x
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/backbones_3d/spconv_backbone.py", line 6, in <module>
import spconv.pytorch as spconv
File "/home/user/anaconda3/envs/openmmlab/lib/python3.8/site-packages/spconv/pytorch/__init__.py", line 7, in <module>
from spconv.pytorch.core import SparseConvTensor
File "/home/user/anaconda3/envs/openmmlab/lib/python3.8/site-packages/spconv/pytorch/core.py", line 21, in <module>
from spconv.tools import CUDAKernelTimer
File "/home/user/anaconda3/envs/openmmlab/lib/python3.8/site-packages/spconv/tools.py", line 16, in <module>
from spconv.cppconstants import CPU_ONLY_BUILD
File "/home/user/anaconda3/envs/openmmlab/lib/python3.8/site-packages/spconv/cppconstants.py", line 15, in <module>
import spconv.core_cc as _ext
ImportError: generic_type: cannot initialize type "ExternalAllocator": an object with that name is already defined
其中,最关键的是ImportError: generic_type: cannot initialize type "ExternalAllocator": an object with that name is already defined
二、问题解决
pip uninstall spconv-cu114
如果不知道自己安装的哪个版本,可以通过:
pip list | grep spconv
获得:
然后安装:
pip install spconv-cu102
不过还可能遇到AttributeError: module 'spconv' has no attribute 'SparseModule':
Traceback (most recent call last):
File "train.py", line 7, in <module>
from test import repeat_eval_ckpt
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/test.py", line 14, in <module>
from eval_utils import eval_utils
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/eval_utils/eval_utils.py", line 8, in <module>
from pcdet.models import load_data_to_gpu
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/__init__.py", line 6, in <module>
from .detectors import build_detector
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/detectors/__init__.py", line 1, in <module>
from .detector3d_template import Detector3DTemplate
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/detectors/detector3d_template.py", line 8, in <module>
from .. import backbones_2d, backbones_3d, dense_heads, roi_heads
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/backbones_3d/__init__.py", line 2, in <module>
from .spconv_backbone import VoxelBackBone8x, VoxelResBackBone8x
File "/mnt/2206b677-3750-478c-b7c0-489c4f8ede41/cjy/OpenPCDet/tools/../pcdet/models/backbones_3d/spconv_backbone.py", line 31, in <module>
class SparseBasicBlock(spconv.SparseModule):
AttributeError: module 'spconv' has no attribute 'SparseModule'
只要将pcdet/models/backbones_3d/spconv_backbone.py中
import spconv
修改为:
import spconv.pytorch as spconv
就可以正常运行了!