방학 세션/CV

[4주차 / 임정준 / 논문리뷰] Mask R-CNN

Imjjun 2023. 2. 8. 00:18

#0 Abstract

 

 16기 임정준_기존의 Classification 및 Detection보다 훨씬 더 정교하고 어려운 과제인 Segmentation을 해결하기 위하여, Faster R-CNN을 연장하여 Mask R-CNN 프레임워크가 등장하였다. Mask R-CNN은 작은 overhead 하나를 추가하는 것만으로 비교적 쉬운 Training 및 5 fps 수준의 구동능력을 달성하였다. 이러한 효율적인 접근을 기반으로, Instance Segmentation, Bounding Box object detection 및 person keypoint detection에서 모두 우승하였다.

 

 본 논문을 리뷰하는 이유는 크게 두 가지로, 첫번째 Instance Segmentation에 대한 개괄적인 baseline을 이해해볼 수 있었고, 본 모델에 들어간 RoIAlign과 추가된 Head Architecture, 그리고 관련된 예측 과정에 대해 알아보기 위함에 있다. Framework적 측면에 집중해보면서 리뷰해보도록 하겠다.

 

 

#1 Introduction

 

 Instance Segmentation은 다소 도전적인 분야인데, 정확하게 각 객체들을 분류하면서 물체에 대한 감지 역시 병행해야 하기 때문이다. 즉, 컴퓨터 비전 분야의 모든 문제(Detection, Localization, Semantic Segmentation)를 조합한 분야, 즉 픽셀별로 각 객체들을 구분하여 이를 만들어야 하는 문제이다. 이러한 측면에서 작은 RoI 예측 branch와 함께, 병렬로 classificaiton & Bounding Box Regression 모듈 branch를 수행시킬 수 있는 Mask R-CNN이 등장하였다. 이는 실행에도 어렵지 않고, 유연하게 모델을 활용할 수 있다는 장점이 된다.

 

 원리적으로, Mask R-CNN은 Faster R-CNN의 연장선상에 있는 모델이다. Faster R-CNN은 pixel2pixel 모델이 아닌데, 이는 해당 모델의 특징 'RoI Pooling'으로 자명하게 드러난다. 이러한 오배열을 수정하고자, 쉽게 양자화(정량화)가 가능한 'RoIAlign'을 도입하여 정확한 공간 정보를 보존하고자 하였다. 논문에서는 이러한 정보 보존이 정확도를 10% 내지 50% 정도로 향상시켰다고 말하고 있다. 또한, Binary mask와 Class 예측을 분리 및 독립적으로 수행하여 클래스 간의 'Competition'을 막고자 하였다. 

 

#2 Mask R-CNN Loss

 

 Mask R-CNN은 첫째로 Faster R-CNN과 마찬가지로 RPN을 그대로 활용하며, 두번째로 RoIPool을 활용했던 Faster R-CNN과 달리, 병렬적으로 binary mask를 output으로 도출한다. 그리고 이는 당시 분류 task가 mask prediction에 의존하던 시스템들과는 차별화되었다고 한다.

 

 본 모델에서는 각각 sampled RoI에 대한 Loss를 다음과 같이 정의했는데, L=L_cls + L_box + L_mask이다.

 L_cls와 L_box는 Fast R-CNN에서 활용했던 Loss와 동일하고, L_mask의 경우, k-means Clustering을 기반으로 나온 km^2 차원의 RoI에 대하여 per-pixel sigmoid 함수를 적용하여 Average binary cross entropy로 정의되었다. 이러한 L_mask의 정의는 클래스 간 'competition' 없이 mask를 생성하는 것을 가능하게 했다.

 

#3 Mask Representation

 

 mask가 input의 공간적 layout을 효과적으로 인코딩하기 위하여 기존의 Fc(Fully-connected layer)를 FCN(Fully convolutional network)으로 대체하였다. 이는 짧은 output vector로 인하여 class label이나 box offset이 불가피하게 붕괴되지 않도록 하는 조치이자, 더 적은 파라미터들을 기반으로 더 높은 정확성을 보이는 method로 기능할 수 있었다. 또한, 이러한 representation을 기반으로 다음에 나오는 RoIAlign을 가능하게 하는 장치로서 작동하였다.

 

#4 RoIAlign

 

 RoI Pooling은 각 RoI에서 작은 feature map을 뽑아내기 위한 스탠다드한 작업이었다. 하지만 feature map의 이산적인 특수성으로 인해서 float들을 양자화(quantization)시킬 필요가 있었고, 가령 x/16의 작업에는 [x/16]으로 gaussian function를 적용해주는 등의 조치가 필요하였다. 이러한 양자화에는 필연적으로 RoI와 추출된 feature 간의 오배열이 생길 수 밖에 없으며, 이는 공간적 정보가 중요한 Instance segmentation 작업 특성상 pixel-accurate mask를 예측하는데 크게 부정적인 영향을 줄 수 밖에 없다.

 

 본 문제를 해결하기 위하여 저자는 RoIAlign Layer 를 제안하여 본 문제를 해결하고자 하였다. RoIPool의 부정확한 Quantization 방법 대신, input과 함께 추출된 feature들을 올바르게 배열하고자 하였다. 여기서는 bilinear interpolation을 활용하여 각 RoI bin의 4개의 정규적으로 샘플된 위치의 input feature의 정확한 값들을 계산해서 결과를 도출하였다. 본 논문에서는 RoIWarp가 간과한 부분인 alignment issue까지 수정하여 도출한 방법이기에, 훨씬 더 큰 향상을 이뤄낼 수 있었다고 언급한다. 

Reference: Kaiming He, Georgia Gkioxari, Piotr Dolla ́r, Ross Girshick, "Mask R-CNN", 2018, arXiv:1703.06870v3

 1) RoI Projection으로 얻은 feature map을 quantization 작업 없이 그대로 사용한 후, 출력하고자 하는 feature map의 크기에 맞게 projection된 feature map을 분할해준다. 

 

 2) 분할된 하나의 cell(각 RoI bin)에서 4개의 sampling point를 찾는다. 

 

 3) Bilinear interpolation 적용

 

 *Bilinear interpolation

Reference: herbwood, 'Mask R-CNN 논문(Mask R-CNN) 리뷰', 2021, 약초의 숲으로 놀러오세요,https://herbwood.tistory.com/20

    Bilinear interpolation이란 2차원 좌표 상의 두 좌표가 주어졌을 때 중간에 있는 값을 추정하는 방법으로 이를 구하는 공식은 다음과 같다. 

 

Reference: herbwood, 'Mask R-CNN 논문(Mask R-CNN) 리뷰', 2021, 약초의 숲으로 놀러오세요,https://herbwood.tistory.com/20

 4) 해당 과정을 모든 Cell(bin)에 대하여 반복한다.

 

 5) 하나의 Cell(bin)에 있는 4개의 점들에 대하여 max pooling을 통해 가장 큰 값을 취한다.

 

 

#5 Implementation

 

 1) Training

  

  - Input

 

    0.5가 넘는 IoU를 가진 RoI에 대해서는 positive, 그 외에는 negative로 분류하였고, L_mask는 오직 positive RoI에 대해서만 정의된다. 또한 mask target은 RoI와 ground-truth mask의 교차지점이다.

 

    image-centric training 및 resizing(ex. 짧은 쪽의 경우 800 pixels of scale)을 수행하였으며, 각 미니배치에는 GPU 당 2개의 이미지 그리고 각 이미지는 1:3 비율의 샘플된 positive, negative 을 가지고 있다. 

 - Backbone

 

  ResNet-FPN이 활용되었으며, 전처리된 image input을 입력하여 FPN 특성상의 Feature Pyramid(p2 ~ p6)까지 얻는다. 

 

  또한, Faster R-CNN에서 활용하였던 RPN이 그대로 활용되어서 objectness score과 bounding box coordinates를 가진 Region Proposal을 얻는다.

 

 - Mask Branch

Reference: Kaiming He, Georgia Gkioxari, Piotr Dolla ́r, Ross Girshick, "Mask R-CNN", 2018, arXiv:1703.06870v3

   *왼쪽은 ResNet C4, 오른쪽은 ResNet-FPN backbone에 대한 Mask branch이다. 본 리뷰에서는 좌측 mask branch에 대해 설명하도록 하겠다.    

 

      Backbone을 거친 후, 3*3 convolution - ReLU - deconv(by 2) - 1*1(*K) convolution layer로 구성된 mask branch를 거치게 되는데, 여기서 K는 class의 개수를 의미한다. 이를 통해 14*14*K의 feature map을 얻으며 해당 feature map은 class별로 생성된 binary mask이다.

  

     그리고 앞서 classification branch에서 얻은 score 중 가장 높은 class에 해당하는 feature map을 선정하여 최종 prediction에 활용한다. 이후 각 bin 별로 sigmoid 함수를 활용하여 0~1 사이의 값을 가지도록 한다. 

  

   2) Inference

 

     Inference 시에는 FPN에서 도출된 output에서 상위 1000개의 RoI만을 선정합니다. 이후 해당 RoI를 box predition branch에 넣어 나온 결과에 대하여 NMS(Non-Maximum Suppression)을 진행한다. 그리고 상위 100개의 box만을 선정하여 Mask Branch에 입력합니다. 이러한 방식은 3개의 branch가 평행(parellel)했던 Training과는 다르지만, Speed와 정확도를 높여준다는 장점이 있다. 

 

 

#6 Experiment

 

Reference: Kaiming He, Georgia Gkioxari, Piotr Dolla ́r, Ross Girshick, "Mask R-CNN", 2018, arXiv:1703.06870v3

 

Reference: Kaiming He, Georgia Gkioxari, Piotr Dolla ́r, Ross Girshick, "Mask R-CNN", 2018; arXiv:1703.06870v3

  COCO 2015, 2016 에서 각각 우승하였던 MNC, FCIS+++과 비교하였을 때, 해당 모델들을 상회하는 performance를 보여주었다. 

 

  사실 Experiment가 보여주는 결과보다 본 논문에서 시사하는 가장 큰 포인트는 논문 저자가 문제 삼았던 포인트들과 그에 대한 해결책을 제시했다는 점들입니다. Faster R-CNN이 정확한 bin 위치를 잡지 못해 Instance segmentation 능력이 떨어지고, 이에 대해 RoIAlign(Quantization) 솔루션을 제공하는 그러한 Scheme들이 인상적이었다고 생각합니다.