2021年12月9日更新:可查看本人最新的CUDA环境配置博客:https://zhuanlan.zhihu.com/p/443114377,系对本文的提炼、归纳与总结
目录
- 依赖项准备
- mmcv-full的编译与安装
- mmdetection的编译与安装
- 参考
依赖项准备
执行以下安装程序时,都以管理员身份运行
- 安装时,请勾选Git from the command line and also from 3rd-party software
- 安装完成后,确认
...\Git\cmd
已添加至环境变量Path中,否则手动添加
- 安装时,请勾选使用C++的桌面开发
- 安装完成后,将
...\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.28.29910\bin\Hostx86\x64
添加到环境变量Path中(注意替换VS版本)
- 安装完成后,将
...\anaconda3
、...\anaconda3\Scripts
、...\anaconda3\Library\bin
都添加到环境变量Path中
- 参考本人的这篇博客来选择合适的版本进行安装(若未安装驱动,也请注意安装驱动)
- 安装CUDA Toolkit时,注意勾选Visual Studio Integration
- 安装完成后,添加
...\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin
、...\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp
到环境变量Path中(注意替换CUDA版本) - 设置环境变量CUDA_PATH为
...\NVIDIA GPU Computing Toolkit\CUDA\v11.1
,新建环境变量CUDA_PATH_V11_1为...\NVIDIA GPU Computing Toolkit\CUDA\v11.1
(注意替换CUDA版本)
- 注:由于本人的依赖项是陆陆续续安装的,以上依赖项不确定全部必需,也可能有遗漏之处,欢迎大家指出!
mmcv-full的编译与安装
- 以管理员身份运行Anaconda Powershell Prompt(注意一定要打开基于PowerShell的Prompt),并进入工作目录
cd D:/137/workspace
- 创建conda环境:
conda create -n mm python=3.8
conda activate mm
- 安装pytorch,这里也参考本人的这篇博客来选择
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
- 下载mmcv源码
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
- 安装mmcv所需的python依赖包
pip install -r requirements.txt
- 打开
mmcv/ops/csrc/ms_deform_attn_cuda_kernel.cuh
,搜索floor
,将其全部替换为floorf
,否则编译时会报错:
- 打开
mmcv/ops/csrc/roi_align_rotated_cuda_kernel.cuh
,搜索ceil
,将其全部替换为ceilf
,否则编译时也会报上述类似的错 - 按指令编译mmcv-full:
$env:MMCV_WITH_OPS = 1 # 选择安装mmcv-full
$env:MAX_JOBS = 8 # 根据你可用CPU以及内存量进行设置
$env:CUDA_HOME = $env:CUDA_PATH_V11_1 # CUDA_PATH_V11_1在准备依赖项时已设置好,注意替换CUDA版本
$env:TORCH_CUDA_ARCH_LIST="8.6" # RTX3090的算力是8.6
python setup.py build_ext
python setup.py develop
pip list # 检查是否安装成功
可以在CUDA的维基百科中查到显卡的算力
mmdetection的编译与安装
- 同上激活环境、下载源码
cd D:/137/workspace
conda activate mm
git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
- 安装python依赖包
pip install -r requirements.txt
- 打开setup.py,找到
extra_compile_args
,设置其中'cxx'
键的值为['-DMS_WIN64', '-MD']
(注:这一步本人不确定是否必需,大家可以试一下) - 编译安装mmdetection
python setup.py build_ext
python setup.py develop
注:这里会报colorama的错,该模块是用来在命令行print彩色文字的,推测只是信息流print的一些小问题,后续本人使用mmdetection的过程中没有碰到任何问题
- 运行demo.py,测试mmdetection
注:以下代码修改自官方文档demo.py:
from mmdet.apis import init_detector, inference_detector
import cv2
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
# download the checkpoint from model zoo and put it in `checkpoints/`
# url: https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
checkpoint_file = 'work_dirs/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = 'cuda:0'
# init a detector
model = init_detector(config_file, checkpoint_file, device=device)
# inference the demo image
result = inference_detector(model, 'demo/demo.jpg')
img_show = cv2.imread('demo/demo.jpg')
model.show_result(img_show,
result,
show=True,
out_file='work_dirs/demo.jpg',
score_thr=0.3)
print(1)
代码运行结束后,打开work_dirs/demo.jpg查看检测结果,如下图所示
最后注:pip list会显示mmcv和mmdet的安装目录,因为它们是develop(-e)安装,然后egg-link到指定目录的,不是在对应python的site-packages下安装的。conda list会报错,因为mmcv目录下同时有mmcv和mmcv-full的egg-info,把mmcv.egg-info目录重命名或删除即可。
参考