大概是全CSDN首个在高版本pytorch下安装detectron2的教学
Windows 11下detectron2 编译安装 【高版本cudatoolkit(v11.7) pytorch=1.13】无痛安装
Win11 查看硬件环境可以在cmd
中输入DXDIAG
硬件环境
软件环境
Visual Studio 2022
安装detectron2之前确保安装好了Visual Studio 2022, Anaconda
并且看看系统路径中有没有VS 2022的二进制可执行文件目录
笔者这里的CUDA版本比较难搞,建议各位观众谨慎食用
本机 [CUDA 11.7, cudnn]
创建detectron2的虚拟环境 并进入
conda create -n detectron2 python=3.10
# 安装后启动并进入环境
conda activate detectron2
之后正常按照pytorch官网对应安装pytorch 1.13即可,由于接下来要涉及detectron2/setup.py
及 部分源码的修改
所以就先跳过pytorch == 1.13 的安装【具体安装可以参考Pytorch官方文档,这里不做赘述】
安装其他依赖库
# 这里opencv-python只是为了方便可视化,可以不安装
# 强烈建议安装ninja
pip install pycocotools opencv-python ninja
基于detectron2源码安装
git clone https://github.com/facebookresearch/detectron2.git
cd /detectron2/
在进行源码编译前,修改下列文件
修改detectron2里的源码 【红色下划线的源码】
-
将所有
\detectron2\detectron2\layers\csrc\ROIAlignRotated\ROIAlignRotated_cuda.cu
文件中
ceil
替换为ceilf
,这里要注意区分大小写,有两处大写的Ceil
不要替换,一键替换时一定要严格限制大小写。 -
继续修改detectron2中
\detectron2\detectron2\layers\csrc\deformable\deform_conv_cuda_kernel.cu
,将所有的floor
改为floorf
-
继续修改detectron2里的,
\detectron2\detectron2\layers\csrc\cocoeval\cocoeval.cpp
第487行。
localtime_r(&rawtime, &local_time);
替换为localtime_s(&local_time,&rawtime);
-
继续修改detectron2里的,
\detectron2\detectron2\layers\csrc\nms_rotated\nms_rotated_cuda.cu
,
对头文件定义中注释掉一些,添加一行代码#include "box_iou_rotated/box_iou_rotated_utils.h
,如下:
// Copyright (c) Facebook, Inc. and its affiliates.
#include <ATen/ATen.h>
#include <ATen/cuda/CUDAContext.h>
#include <c10/cuda/CUDAGuard.h>
#include <ATen/cuda/CUDAApplyUtils.cuh>
/*#ifdef WITH_CUDA
#include "../box_iou_rotated/box_iou_rotated_utils.h"
#endif
// TODO avoid this when pytorch supports "same directory" hipification
#ifdef WITH_HIP
#include "box_iou_rotated/box_iou_rotated_utils.h"
#endif*/
#include "box_iou_rotated/box_iou_rotated_utils.h"
修改setup.py
由于VS默认系统路径的cl
编译器忽略了 -allow-unsupported-compiler
选项,而这其实是一个 nvcc
特定的选项,而不是 cl
的选项。
为了确保这个选项仅传递给 nvcc
而不是 cl
,你需要在 setup.py 中更明确地设置 nvcc
编译器选项。
在当前目录,即\detectron2\
下,针对setup.py
文件第79行,添加如下代码
编译安装
在当前\detectron2\
目录下运行
# build and develop
python setup.py build develop
develop
命令本身不会安装软件包,但它会创建一个.egg-link部署目录回项目源代码目录。所以这就像安装,但不是复制到site-packages
。它添加一个符号链接(.egg-link
充当多平台符号链接)
python setup.py develop不会真正安装包,而是在系统环境中创建一个软连接指向包实际所在的目录,这样修改了相关文件之后不用再安装便能生效,便于开发调试等。
这样,你可以编辑源代码并直接查看更改,而无需在每次进行一些更改时重新安装,但是重装pytorch
之后detectron2
需要重新编译
验证
可在\detectron2\tests\
下创建test_detectron2.py
,借鉴
from detectron2.engine import DefaultPredictor
from detectron2.data import MetadataCatalog
from detectron2.config import get_cfg
from detectron2.utils.visualizer import ColorMode, Visualizer
from detectron2 import model_zoo
import cv2
import numpy as np
import requests
# Load an image
res = requests.get("https://live.staticflickr.com/700/33224654191_fdaee2e3f1_c_d.jpg")
image = np.asarray(bytearray(res.content), dtype="uint8")
image = cv2.imdecode(image, cv2.IMREAD_COLOR)
config_file = 'COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml'
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file(config_file))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.75 # Threshold
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(config_file)
cfg.MODEL.DEVICE = "cuda" # cpu or cuda
# Create predictor
predictor = DefaultPredictor(cfg)
# Make prediction
output = predictor(image)
print(output)
v = Visualizer(image[:, :, ::-1],
scale=0.8,
metadata=MetadataCatalog.get(cfg.DATASETS.TRAIN[0]),
instance_mode=ColorMode.IMAGE
)
v = v.draw_instance_predictions(output["instances"].to("cpu"))
cv2.imshow('images', v.get_image()[:, :, ::-1])
cv2.waitKey(0)
使用说明
编译成功后会在·detectron2·(子目录)目录下生成一个pyd
文件。
使用detectron2
平台时将此detectron2\detectron2\_C.cp310-win_amd64.pyd
文件复制到对应的detectron2
目录下,或将detectron2
目录复制到你所需的python工程目录下即可
参考 并 感谢
1.测试detectron2原文链接:https://blog.csdn.net/lishiyu93/article/details/116459114