Post

Detectron 끄적이기

Detectron

페이스북에서 개발한 object detection, segmentation 프레임워크다.

Pytorch로 구현된 Detectron 오픈소스가 2가지가 있다.

이 포스트에서는 구버전은 사용하지 않고 최신버전인 Detectron2를 사용한다. 지속적으로 업데이트 되고 공식 문서가 잘되어있다.

Detectron2 하기 위해서는

  • python >= 3.6
  • pytorch >= 1.3
  • opencv, optional
  • pycocotools
1
pip install cython; pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'

가 필요하다.

설치

공식 설치하는데 문제가 많아 한줄씩 해결한 방법이다.

  • PyYAML 설치

ERROR: Cannot uninstall ‘PyYAML’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

1
pip install conan --ignore-installed PyYAML  
  • fvcore 설치

ERROR: Could not find a version that satisfies the requirement fvcore (from detectron2==0.1.1) (from versions: none) ERROR: No matching distribution found for fvcore (from detectron2==0.1.1)

1
pip install -U 'git+https://github.com/facebookresearch/fvcore'
  • detectron 설치
1
2
git clone https://github.com/facebookresearch/detectron2.git
cd detectron2 && python -m pip install -e .

만약 재빌드 할경우

1
rm -rf build/ **/*.so

Demo

간단한 예제를 실행시켜보자

model zoo에서 모델을 하나 다운로드 받아보자.

나는 object detection을 위해 다운로드 받았기 때문에 R101-FPN 을 다운로드 할 것이다. (ResNet101-FPN)

  • 성능파일
1
wget https://dl.fbaipublicfiles.com/detectron2/COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/metrics.json
  • 모델파일
1
wget https://dl.fbaipublicfiles.com/detectron2/COCO-Detection/faster_rcnn_R_101_FPN_3x/137851257/model_final_f6e8b1.pkl

모델 폴더를 따로 만들어두어 저장하면 편할것이다. 난 따로 모델 폴더를 하나 만들었다.

  • 테스트할 이미지 파일
1
wget https://farm4.staticflickr.com/3775/9332963028_598bcb7aac_z.jpg

input

동작을 확인하기 위해서 train/test 상관없이 coco dataset에서 이미지를 가져온다.

  • 데모실행
1
cd demo
1
python demo.py --config-file ../configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml --input ./1.jpg --opts MODEL.WEIGHTS [INPUT MODEL PATH]
  • 추가
1
ROI CUDA 에러가 발생.. (한줄한줄이 에러..)

문제 해결 방법(1시간 정도 소비..)

환경 변수가 잘 맞지 않은 문제다.

먼저 CUDA version = 10.1로 진행해야하지만 컴퓨터에 여러 버전의 CUDA가 설치되어있기에 환경 변수가 잘못 들어 갔었다..

1
2
3
export CUDA_HOME=/usr/local/cuda-10.1
rm -rf build/
python setup.py build install

기본에 충실하자.

결과

output

잘나올것이다 ㅎㅎ

가벼운 API 사용법

  • Document를 참고하면 도움이 될것 같다.

기존에 사용한 모델들을 이용해서 API형식으로 사용해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog
import cv2

# load image
img = cv2.imread('./detectron2/1.jpg')

# set config
cfg = get_cfg()
cfg.merge_from_file("./detectron2/configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml")
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5
cfg.MODEL.WEIGHTS = "./detectron2/model_final_f6e8b1.pkl"

# predict
predictor = DefaultPredictor(cfg)
outputs = predictor(img)

# visualization
v = Visualizer(img[:,:,::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))

cv2.imwrite('output.jpg',v.get_image()[:,:,::-1])

위에 Demo와 같게 출력된다.

참조

This post is licensed under CC BY 4.0 by the author.