目标检测与图像分割——Windows下 detectron2 环境搭建
当前GPU系统环境
windows11 GPU RTX3060
写在之前:
detectron2 有不同版本,本文安装最新的0.6版本(Latest Version)
注意查看自己的 CUDA 版本,pytorch 与 CUDA 有版本对应,所以在安装 pytorch 时要确定当前系统的 CUDA 的版本
30系列显卡是 11.x 版本的CUDA;30以下系列显卡对应 10.x 版本的CUDA
nvcc -V # 在命令行终端输入命令查看自己的CUDA版本
1. 安装 Build Tools for Visual Studio(编译器安装)
VS 2017 下载链接:https://my.visualstudio.com/Downloads?q=visual%20studio%202017&wt.mc_id=omsftvscom~older-downloads
# 其版本要与 CUDA 版本适配,本文中的 CUDA 版本是 11.5,与 VS 2015~2019 适配,与 VS 2022 不适配
# 建议安装 VS 2015~2019
# 所要勾选的内容
2. 在 annaconda 环境下创建虚拟环境,并切换到所创建的虚拟环境
conda create -n mytorch python=3.9 # "mytorch" -> 虚拟环境的名称,可以自定义, 建议 python 版本 >= 3.8 否则 functools.py 会报错
conda activate mytorch
3. 在所创建的虚拟环境下安装依赖包
# 在 Pytorch 官网 copy 安装命令,建议安装旧版本(Previous Version)
pip install torch==1.13.0+cu117 torchvision==0.14.0+cu117 torchaudio==0.13.0 --extra-index-url https://download.pytorch.org/whl/cu117
# 安装 detectron2 所需的依赖包
pip install cython opencv-python pillow matplotlib termcolor cloudpickle tabulate tensorboard termcolor tqdm yacs mock fvcore pydot wheel future
4. 从 Github 下载 detectron2(0.6) 版本源码
链接:https://github.com/facebookresearch/detectron2/releases ;将下载的源码解压,解压后的文件夹名称应该是:detectron2-0.6
5. 切换到 detectron2-0.6 主目录下
# 修改目录 detectron2-0.6/detectron2/layers/csrc/nms_rotated/下nms_rotated_cuda.cu中代码段
将:
#ifdef WITH_CUDA
#include "../box_iou_rotated/box_iou_rotated_utils.h"
#endif
改为:
#include "../box_iou_rotated/box_iou_rotated_utils.h"
# 执行以下命令,至此就安装完成了
python setup.py build develop
可以用以下代码做测试,在 detectron2-0.6 主目录下创建 test.py , 代码如下:
import os, cv2
import matplotlib.pyplot as plt
os.environ['KMP_DUPLICATE_LIB_OK']='True'
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog
cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
predictor = DefaultPredictor(cfg)
im = cv2.imread("input.jpg")
print(im.shape)
plt.figure(figsize=(15,7.5))
plt.imshow(im[..., ::-1])
outputs = predictor(im[..., ::-1])
print(outputs)
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
plt.figure(figsize=(20,10))
plt.imshow(out.get_image()[..., ::-1][..., ::-1])
plt.savefig('output.jpg')
# 输入图片 input.jpg
# 输出结果 output.jpg