Program/OPEN_CV

[Open CV] 딥러닝활용 _ Mask-RCNN 영역 분할

사막여유 2022. 7. 30. 17:17
728x90

 

이번 시간에는 Mask-RCNN 영역 분할에 대해서 알아본다.

 

영역 분할이란?

 - 객체의 바운딩 박스뿐만 아니라 픽셀 단위 클래스 분류까지 > 객체의 윤곽 구분

 - Semantic segmentation : 하나의 클래스는 모두 같은 레이블

 - Instance segmentation : 객체 단위 다른 레이블

 

Mask - RCNN 이란?

 - 대표적인 객체 영역 분할 딥러닝 알고리즘 ( He et. al., 2017 )

 - Faster R-CNN ( object detection ) + FCN ( segmentic segmentation )

Faster R-CNN이라는 기법을 이용해서 객체단위로 검출하여 ( YOLO, SSD 보다 이전에 나온 객체 검출 기법 )

바운딩박스로 잘라내고 해당 바운딩박스를 이용해서 FCN을 동작 시킨다.

 

Mask-RCNN 모델 & 설정 파일 다운로드

 - 모델파일

http://download.tensorflow.org/models/object_detection/mask_rcnn_inception_v2_coco_2018_01_28.tar.gz

 - 설정파일

https://github.com/opencv/opencv_extra/blob/master/testdata/dnn/mask_rcnn_inception_v2_coco_2018_01_28.pbtxt

 - 클래스 이름 파일

 > coco_90.names

그리고 다운로드 받아진 파일들 ( frozen_inference_graph.pb , mask_rcnn_inception_v2_coco_2018_01_28.pbtxt ) 을 실행폴더 내부에 저장

 

coco_90.names 는 원래 80개의 클래스를 갖고 있는데 YOLO와 내용은 같지만
2017년버전은 80개의 클래스명 중 중간중간에 빈칸이 들어가있다.

 

Mask-RCNN 입력

 - Size : 임의의 크기 ( auto resize )
              YOLO나 SSD에서는 학습된 영상의 크기를 입력영상의 크기로 주게되는데 RCNN 같은 경우는 네트워크안에서
              알아서 크기를 Resize 시켜준다.

 - Scale : 1 ( 1~255 )

 - Mean : [ 0,0,0 ]

 - RGB : true

 

Mask-RCNN 출력

 - 2개의 출력 레이어 사용
   > 'detection_out_final' - boxes : boxes.shape = ( 1,1,100,7 )  ( - , -, 최대검출개수, 클래스정보or바운딩박스정보)
   > 'detection_masks'    - masks : masks.shape = ( 100, 90, 15, 15 ) ( 최대검출개수, 검출개수, width, height)

 

728x90