Detectron2 windows 설치

이세돌의망치·2024년 3월 6일
0

공식문서에 따르면 detectron2는 리눅스와 맥에서만 실행 하능하다고 하지만,

실제로는 윈도우에서도 실행이 가능하고 한다.

stackoverflow, medium, tistory, velog 등 에서 확인 가능


이번에는 tistory블로그를 기준으로 설치해 보려고 한다.

물론 실패

👻실패 이유:

windows용 detectron2를 설치하기 위해서는 windows용 소스파일을 사용해야 함.
https://github.com/conansherry/detectron2 하지만 공식 문서가 아니기 때문에
cuda 10.1버전에 pytorch는 1.3버전을 요구한다.

다음에 우분투로 최신버전을 설치해 보자

Windows 10 Education (빌드 19045)
CPU: i7-13700F
RAM: 32G
GPU: RTX 4060Ti
CUDA: 11.8


CUDA, cuDNN 설치

호환되는 pytorch 버전을 보면 torch 1.8을 사용하기 위해선 CUDA11.1이 필요하다.
GPU와 CUDA 버전 호환을 보면 내 GPU에 적합하지 않지만 11.1 설치하기로 함

CUDA, cuDNN(로그인 필요)

  • cuda 11.1.1, cuDNN 8.9.6을 받았다.

Visual studio build tools 설치

공식 문서에 따르면 gcc와 g++을 설치하라고 한다.

  • gcc: C언어 컴파일러(였으나, 지금은 다른언어들도 지원함)
  • g++: C++언어용 컴파일러

    이것을 대채하기 위해 visual studio build tools을 사용하는 것 같다.

여기에서 2019 버전을 설치하자
2022버전으로 하다가 에러가 발생했다(2017~2019 버전을 사용하라고 한다)
2022버전 2019버전 동시에 설치해도 상관없다.

잘모르니 빌드도구 몽땅 설치함


conda 가상환경 설정

  • python 버전은 3.7이상이 필요 (3.8.0버전 사용)
  • pytorch(1.8)와 호환되는 torchvision 필요
  • opencv는 optional
pip install fvcore
pip install ninja
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
pip install cython
# 이 아래부터는 꼭 설치해야 하는지는 모르겠음 하지만 예제 실행할 때 필요
pip install cloudpickle
pip install omegaconf
pip install pycocotools
pip install opencv-python

pytorch 과거 버전 설치
3번째 줄 conda install pytorch는 생각보다 오래걸린다(나만그런가?), 원래 오래걸리니 참고하자.

pip install “git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"

👻pycocoapi: COCO데이터를 이용하기 위해 설치하는 것 같은데.. 잘 모르니 나중에 확인해보자


Detectron2 설치

git clone https://github.com/facebookresearch/detectron2.git
python setup.py build_ext --inplace

아마도 여기서 https://github.com/facebookresearch/detectron2.git 가 아닌 https://github.com/conansherry/detectron2 에서 설치해야 하는 것 같다

설치할 위치에서 아나콘다 프롬프트내에서 실행해야 한다

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\include\crt/host_config.h(160): fatal error C1189: #error:  -- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2019 (inclusive) are supported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.
nms_rotated_cuda.cu
ninja: build stopped: subcommand failed.

에러 발생 visual studio 버전을 2017~2019로 맞춰야 하나 보다.


실패(?)

참고 사이트에는 cpu용, cuda용 파일이 따로 생성되는데 나는 cpu만 나온다;

그런데 해당 사이트의 예제를 실행해보니

cuda가 사용중이라고 나오긴한다.


tistory 예제

from detectron2.utils.logger import setup_logger
setup_logger()
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
import cv2

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml"))
cfg.MODEL.WEIGHTS = "weights/model_final_b275ba.pkl"
predictor = DefaultPredictor(cfg)

img = cv2.imread('input.jpg')

outputs = predictor(img)

# score가 0.4 이상인 인스턴스만 필터링
high_score_mask = outputs["instances"].scores > 0.4
filtered_instances = outputs["instances"][high_score_mask]

v = Visualizer(img[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
out = v.draw_instance_predictions(filtered_instances.to("cpu"))
cv2.imwrite('saved_image_40.jpg', out.get_image()[:, :, ::-1])

일단 실행은 됬으니 다른 방법도 찾아보자

velog 예제

pip install requests 만 추가로 설치하자

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://thumbor.forbes.com/thumbor/fit-in/1200x0/filters%3Aformat%28jpg%29/https%3A%2F%2Fspecials-images.forbesimg.com%2Fimageserve%2F5f15af31465263000625ce08%2F0x0.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)
profile
코딩초보

0개의 댓글