Warning: The magic method HM\BackUpWordPress\Notices::__wakeup() must have public visibility in /hosting/mlk/html/wp-content/plugins/backupwordpress/classes/class-notices.php on line 46

Warning: The magic method HM\BackUpWordPress\Path::__wakeup() must have public visibility in /hosting/mlk/html/wp-content/plugins/backupwordpress/classes/class-path.php on line 57

Warning: The magic method HM\BackUpWordPress\Extensions::__wakeup() must have public visibility in /hosting/mlk/html/wp-content/plugins/backupwordpress/classes/class-extensions.php on line 35
MASK RCNN 핵심이해 – Go Lab

MASK RCNN 핵심이해

  • Faster RCNN에서 Masking을 하는 레이어가 하나 추가된 형태로, 오브젝트 디텍션 뿐만아니라 Instance Segmentation까지 다루는 Two Shot Detector.
  • 2019년에도, 각 Competition에서 Instance Segment 제일 선호되는 방법

현재 기술 발전상황은 하루가 멀다하고 새로운 논문이 바로 직전 State Of The Art를 갈아치우면서 발전을 하고있는 거듭하고 있는 상황이다. 예전에는 적당히 바운딩 박스와 물체를 구별해주면 되었는데, 지금은 해당 물체에 정확한 마스크까지 씌워주는 Instance Segmentation(각각의 객체를 마스킹하고 구별하는 형태)까지 단계가 오게 되었다.

RCNN -> Fast RCNN -> Faster RCNN 으로 오면서 예측력은 비슷하게 유지하면서 훈련과 테스트 모두에서 속도가 상당히 빨라졌는데, 이 구조에 픽셀 하나하나의 구분을 위한, 기존의 구조에 부하를 많이 주지않는, 기존의 방법과 병렬(parallel)로 돌아가는 구조가 하나 더 추가되었다.

Faster RCNN은 pixel단위의 구분을 바로 하기에는 RoIPool이라는 레이어가 있어서 해당하는 Region을 사각형 박스 방식으로 구분한다. Mask RCNN에는 RoIAlign이라는 구조로 Region을 골라내며, 공간상 어느지점이 정확하게 무엇을 나타내는지 확인할수 이다.

Without Bells and Whistles, Mask R-CNN surpasses all previous state-of-the-art single-model results on the COCO instance segmentation task.

논문왈 : 뭐 쪼끄만거 하나 가지고 다 되는 양 부산떨 필요없이, Mask R-CNN은 COCO 객체 구분 Task에서 다 우세했다.

이전까지의 DeepMask와 같은 작업들에서는 일단 Segmentation Proposal을 먼저하고 (예전의 RCNN이 그랬던것처럼) 그 다음에 Fast R-CNN을 태워서 예측하는 과정이 있었다. Mask RCNN은 일단 instance에 초점을 맞추고 그다음 Segmentation에 신경을 쓴다.

Faster RCNN이 열심히 일을 해서 보통과 같이 바운딩 박스와 분류결과를 열심히 내어주는 동시에 Mask RCNN 에서는 또한 RoI의 픽셀마다 Binary Mask (Instance인지 아닌지) 마스크를 씌워준다.

훈련시에는 Loss(class) + Loss(box) + Loss(mask) 의 합으로 Loss를 구하며, 이 마스크는 RoI 크기인 m * m 에 분류대상인 K class를 곱하여 RoI당 m * m * K 의 출력을 내어준다. 즉, 하나의 RoI에 우리가 구별해야하는 후보 클래스 k개 각각이 Binary Segmentation이 되어있다는 것이다. 평가지표는 정답지인 그 클래스의 binary cross-entropy loss로 한다.

어떻게 보면 상식과 뒤바뀌었는데, 다른 방법들은 일단 픽셀별로 구별한다음 이 픽셀에 대한 후보 클래스중 제일 확률이 높은 클래스를 골라내기 위해 다항 클래스 softmax를 적용한다. 하지만, Mask RCNN은 일단 RoI가 주어지면 k개의 클래스에 대해 각각 그 픽셀이 속하는지 이진 클래스로 맞추기 때문에, 클래스끼리 경합이 이루어지지 않는다.

다만, 생각해보면 RoI는 픽셀 크기가 m*m을 유지하면서 pixel별 기다/아니다를 판단해야하기 때문에, RoI에 대한 공간정보를 확실하게 들고 있어야 한다. 뭔가 중간에 다른 벡터로 표현하거나 다른 표현방식을 쓰면 안된다는 것이다.

RoIAlign

Faster RCNN에서 쓰는 방식대로 RoIPoool에서는 Max pooling등을 이용하기 때문에 중요정보 feature를 들고있기는 좋지만 정보를 pooling하는 동안 stride가 딱딱 계산이 떨어지지 않아 픽셀위치정보에 대한 정확한 의미가 뭉개져버린다. 따라서 RoIAlign레이어를 통해 이 균형을 맞추는 작업이 필요하다.

실선은 RoI이며, 점선은 Feature Map을 뜻한다. RoI가 정확히 칸에 맞춰져 있지 않아, 이에대한 정확한 계산을 위해 보간을 하게 되는 작업이 필요한데 쌍선형 보간법을 이용한다.

구조

Mask RCNN에서 중요한건, 하나의 레이어를 더 추가해서 후보군 k클래스에대한 이진 마스크를 씌우는것이고 object classification에서 그 물체가 결정되면 마스크를 씌워주는것.

다만, 네트워크 구조에 논문은 조금더 내용을 할당하고 있는데, 백본 (feature를 뽑기위한 베이스CNN) 흔히 쓰는 ResNet과 함께, Feature Pyramid Network를 소개한다. 백본을 FPN으로 세팅했을 경우의 결과가 가장 좋다. COCO이미지 데이터셋에서 MNC는 2015년, FCIS는 2016년 승자이다. +++는 각종 이미지 augmentation, online hard example mining 등을 통한 튜닝된 수치이며, 그럼에도 불구하고 싱글모델인 Mask RCNN이 이에 필적하는 혹은 능가하는 수치를 보여주는것을 알수있다.

결과는 다음과 같이 잘 나눠진다고 캡처를 떠놨다. FCIS와의 비교이다. 잘된것만 잘 실어놓아서 어마어마한 차이가 있는것처럼 보이지만 그정도는 아니겠고, 다만 결과가 증명해주고있기는 하다.

답글 남기기