环境:Windows11+cuda11.6
从源码安装:开始你的第一步 — MMDetection 3.3.0 文档
步骤 1. 创建并激活一个 conda 环境
conda create --name mmdetection python=3.9 -y
conda activate mmdetection
步骤 2. 安装 PyTorch-GPU版本
conda install pytorch==1.13.1 torchvision==0.14.1 torchaudio==0.13.1 pytorch-cuda=11.6 -c pytorch -c nvidia
步骤 0. 使用 MIM 安装 MMEngine 和 MMCV。
pip install -U openmim
mim install mmengine
pip install mmcv==2.0.0 -f https://download.openmmlab.com/mmcv/dist/cu116/torch1.13/index.html
步骤 1. 安装 MMDetection。
方案 a:如果你开发并直接运行 mmdet,从源码安装它:
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# "-v" 指详细说明,或更多的输出
# "-e" 表示在可编辑模式下安装项目,因此对代码所做的任何本地修改都会生效,从而无需重新安装。
步骤 2. 验证安装是否成功。
import mmdet
print(mmdet.__version__)
# 预期输出:3.0.0 或其他版本号
验证安装
步骤 1. 我们需要下载配置文件和模型权重文件。
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
。
步骤 2. 推理验证。
方案 a:如果你通过源码安装的 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 cpu
你会在当前文件夹中的 outputs/vis
文件夹中看到一个新的图像 demo.jpg
,图像中包含有网络预测的检测框。
安装报错
使用安装代码:
mim install "mmcv>=2.0.0"
报错:安装的版本是mmcv=2.2.0,AssertionError: MMCV==2.2.0 is used but incompatible. Please install mmcv>=2.0.0rc4, <2.2.0.
当卸载mmcv=2.2.0并pip install "mmcv==2.1.0"或是pip install "mmcv==2.0.0"报错:
不确定报错是不是因为我使用pip安装而没用mim安装,但是我使用
pip install mmcv==2.0.0 -f https://download.openmmlab.com/mmcv/dist/cu116/torch1.13/index.html
安装成功了,也就没有重新检测使用mim install "mmcv==2.0.0"是否会成功
pip 安装选择合适的版本:安装 MMCV — mmcv 2.0.0 文档
报错信息2:
from mmcv.utils import Registry
ImportError: cannot import name 'Registry' from 'mmcv.utils'
解决方法:
从from mmcv.utils import Registry改为from mmcv.utils.registry import Registry
报错信息2:
File "D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\fileio\io.py", line 6, in <module>
from ..utils import is_list_of
ImportError: cannot import name 'is_list_of' from 'mmcv.utils' (D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\utils\__init__.py)
报错原因:[Bug] ImportError: cannot import name 'is_list_of' from 'mmcv.utils' - Giters
It seems that it's because you use mmcv>=2.0, but the original project uses mmcv<2.0. mmcv.utils.is_list_of
has been moved to mmengine.utils
with mmcv=2.0. So you can try to install mmcv<2.0.
解决方法:
进入:D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\fileio\io.py
将from ..utils import is_list_of改为from mmengine.utils import is_list_of
报错信息3:
File "D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\parallel\distributed.py", line 8, in <module>
from mmcv import print_log
ImportError: cannot import name 'print_log' from 'mmcv' (D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\__init__.py)
报错原因:https://github.com/OpenGVLab/InternImage/issues/91
mmcv=>2.0.0 version "print_log" function is implemented in "mmengine".
解决方法:
将: from mmcv import print_log
改为: from mmengine import print_log
报错信息4:
File "D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\parallel\distributed.py", line 9, in <module>
from mmcv.utils import TORCH_VERSION
ImportError: cannot import name 'TORCH_VERSION' from 'mmcv.utils' (D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\utils\__init__.py)
解决方法:https://github.com/open-mmlab/mmcv/issues/2984
从 from mmcv.utils import TORCH_VERSION
改为from mmengine.utils.dl_utils import TORCH_VERSION
报错信息5:
File "D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\parallel\distributed.py", line 10, in <module>
from mmcv.utils import digit_version
ImportError: cannot import name 'digit_version' from 'mmcv.utils' (D:\LeStoreDownload\Anaconda\envs\mmdetection\lib\site-packages\mmcv\utils\__init__.py)
解决方法:
从 from mmcv.utils import digit_version
改为 from mmengine.utils import digit_version
报错信息6:
File "E:\zip-download\VideoX-master\X-CLIP\datasets\pipeline.py", line 824, in __init__
if not mmcv.is_tuple_of(self.input_size, int):
AttributeError: module 'mmcv' has no attribute 'is_tuple_of'
解决方法:
找到 if not mmcv.is_tuple_of(self.input_size, int):