2020년 6월 7일 일요일

페이스북 딥러닝 객체 인식 프레임웍 Detectron2 기반 객체 세그먼테이션 방법 소개

이 글은 페이스북에서 개발한 오픈소스 Detectron 2 기반 객체 세그먼테이션 프레임워크를 간략히 소개하고, 빌드 및 사용방법을 나눔한다.
Detectron2기반 실시간 객체 세그먼테이션

소개
객체 감지 및 분할은 자율주행차량에서 컨텐츠 이해에 이르는 다양한 목적에 사용된다. PyTorch에서 구현된 객체 인식 프레임웍인 Detectron2는 다양한 세그먼테이션을 지원한다. Detectron2는 페이스북에서 개발한 DensePose, Mask R-CNN 등을 제공하고 있다. 이를 통해, 스마트 카메라 등의 기능을 쉽게 개발할 수 있다. 이를 이용해, 손쉽게 다양한 사물들을 탐지하고 세그먼테이션하여, 객체의 유형, 크기, 위치 등을 자동으로 얻을 수 있다.

다음 영상은 이에 대한 소개이다.

이 프레임웍은 모델 설정 파일 및 모델을 config, model zoo 폴더에 별도 관리하고 있어, 다양한 모델을 재활용할 수 있다. tools 폴더에는 train_net.py 가 있어, 이를 통해 데이터학습을 지원한다. 

디텍트론은 다양한 세그먼트 마스크를 지원하여 유용성이 높다. 다만, 세그먼테이션 모델로 속도가 그리 빠르지는 않다.

설치 및 빌드 방법
이 글에서 실행된 디텍트론2는 우분투 18.04, 엔비디아 드라이버 440.82,  CUDA 10.0, cuDNN 7.6 환경에서 설치되었다. CUDA, cuDNN 설치는 다음 링크를 참고한다.
Detectron2는 오픈소스로 다음 링크에서 관련 내용을 다운로드할 수 있다.
설치는 다음과 같다(에러 발생할 경우, 레퍼런스 참고).
git clone https://github.com/facebookresearch/detectron2.git
python -m pip install -e detectron2

데모 실행
설치 후 데모를 실행해 보자. 미리 이미지와 동영상 파일을 준비해 놓는다. weight model 은 model zoo에서 다운로드 받는다.
cd demo/
python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input image1.jpg --opts MODEL.WEIGHTS model_final_b275ba.pkl

동영상도 세그먼테이션해 보자.
python demo.py --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --video-input ~/project/data/2.mp4 --opts MODEL.WEIGHTS model_final_b275ba.pkl 

이제는 Fast R-CNN 모델을 실행해 본다.
python demo.py --config-file ../configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml --input ./1.jpg --opts MODEL.WEIGHTS model_final_b275ba.pkl 

Keypoint 를 추출하려면 다음 모델을 실행하면 된다.
python demo.py --config-file ../configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml --video-input ~/project/data/2.mp4 --opts MODEL.WEIGHTS model_final_b275ba.pkl

이런 방식으로 다양한 모델을 간단히 실행해 볼 수 있다.

이외 Colab이나 AWS에서 실행 가능하다.

마무리
디텍트론은 페이스북 연구소에서 개발한 다양한 딥러닝 모델을 손쉽게 사용할 수 있다. 아울러, 모델을 교체해 테스트하는 방법이 레고블럭 사용하는 것처럼 편리하다. 다만, 실제 사용을 해보면, 2080 Ti 에서도 실행 속도가 그리 빠르지 않아 아쉬움이 있다.

레퍼런스

댓글 없음:

댓글 쓰기