본문 바로가기
AI Paper Review

[논문 리뷰] Computer Vision - Mask R-CNN

by coding-choonsik 2023. 9. 8.
728x90
반응형
SMALL

📃 논문 https://arxiv.org/pdf/1703.06870.pdf

 

Instance Segmentation?

  • 이미지 내에 존재하는 모든 객체를 탐지하는 동시에 각각의 경우(instance)를 정확하게 픽셀 단위로 분류하는 task
  • 객체를 탐지하는 object detection task와 각각의 픽셀의 카테고리를 분류하는 semantic segmentation task가 결합

Preview

  • Faster R-CNN의 RPN에서 얻은 RoI(Region of Interest)에 대하여 객체의 class를 예측하는 classification branch + bbox regression을 수행하는 bbox regression branch와 평행으로 segmentation mask를 예측하는 mask branch
  • mask branch는 각각의 RoI에 작은 크기의 FCN(Fully Convolutional Network)가 추가된 형태

 


Main Ideas

1. Mask branch

▲Fast R-CNN

  • backbone network를 통해 얻은 feature map을 RPN(Region Proposal Network)에 입력하여 RoIs(Region of Interests)를 얻음.
  • RoI pooling을 통해 고정된 크기의 feature map을 얻고 이를 fc layer에 입력한 후 classification branch와 bbox regression branch에 입력하여 class label과 bbox offset이라는 두 가지 결과를 예측

▲ Mask R-CNN

  • 두 branch와 평행(pararell)으로 segmentation mask를 예측하는 mask branch가 추가된 구조
  • RoI pooling을 통해 얻은 고정된 크기의 feature map을 mask branch에 입력하여 segmentation mask를 얻음.
    • segmentation mask: class에 따라 분할된 이미지 조각(segment)
  • mask branch는 여러 개의 conv layer로 구성된 작은 FCN의 구조
  • mask branch는 각각의 RoI에 대하여 class별로 binary mask를 출력

▲ binary mask

  • Mask R-CNN은 class별로 mask를 생성한 후 픽셀이 해당 class에 해당하는지 여부를 표시
  • mask branch는 최종적으로 K²m 크기의 feature map을 출력
    • m은 feature map의 크기, K는 class의 수

 

2. RoI Align

  • misalignment의 문제점

  • RoI pooling으로 인해 얻은 feature와 RoI 사이가 어긋나는 문제가 발생
  • 이런 어긋남은 pixel mask를 예측하는데 매우 안 좋은 영향을 끼침
  • 논문에서는 RoI pooling 방식이 quantization 과정을 수반하여 misalignment를 유도한다고 봄
    • quantization: 실수(floating) 입력값을 정수와 같은 이산 수치(discrete value)으로 제한하는 방법

[RoI Align 과정]

  • RoI projection을 통해 얻은 feature map을 quantization 과정 없이 그대로 사용
  • 출력하고자 하는 feature map의 크기에 맞게 projection된 feature map을 분할
  • 분할된 하나의 cell에서 4개의 sampling point를 찾음
  • **Bilinear interpolation(선형 보간법)**을 적용
  • 모든 cell에 대하여 반복

  • 하나의 cell에 있는 4개의 sampling point에 대하여 max pooling을 수행
💡 RoI의 정확한 spatial location을 보존하는 것이 가능해짐!  →mask accuracy가 크게 향상

 

 

3. Loss Function

  • Mask R-CNN은 위와 같이 구성된 multi-task loss function을 통해 네트워크를 학습
  • class branch와 mask branch를 분리하여 class별로 mask를 생성한 후 binary loss를 구함

 

4. Backbone Network

  • Mask R-CNN은 backbone network로 ResNet-FPN을 사용

Training Mask R-CNN

  • 이미지 및 feature map에 대한 전처리, 후처리 필요

 

1) Input image Pre-processing

  • 원본 이미지의 width, height 중 더 짧은 쪽(shorter edge)이 target size로 resize
  • 더 긴 쪽(longer edge)은 가로세로비율을 보존하는 방향으로 resize
  • 만약 더 긴 쪽이 maximum size를 초과하면 maximum size로 resize되고 더 짧은 쪽이 가로세로비율을 보존하는 방향을 resize
  • target size, maximum size의 디폴트값은 각각 800, 1333
 💡 Input : image
Process : image pre-processing
Output : resized image

 

2) Feature pyramid by backbone network

  • 전처리된 이미지를 ResNet-FPN backbone network에 입력하여 feature pyramid {P2, P3, P4, P5, P6}를 얻음
💡 Input : resized image
Process : constructing feature pyramid
Output : feature pyramid {P2, P3, P4, P5, P6}

 

3) Region proposal by RPN

  • feature pyramid별로 **RPN(Region Proposal Network)**에 입력하여 objectness score과 bbox regressor를 가진 Region proposal을 출력
 💡 Input : feature pyramid {P2, P3, P4, P5, P6}
Process : Region proposal
Output : Region proposals with objectness score and bbox regressor per feature pyramid {P2, P3, P4, P5, P6}

 

4) Select best RoI by Proposal layer

  • RPN을 통해 얻은 Region proposal 중 최적의 RoI를 선정
    • 1) objectness score가 높은 top-k개의 anchor를 선정(학습 시 k=12000로 설정)
    • 2) bbox regressor에 따라 anchor box의 크기를 조정
    • 3) 이미지의 경계를 벗어나는 anchor box를 제거
    • 4) threshold=0.7로 지정하여 Non maximum suppression을 수행
    • 5) 지금까지의 과정은 각각의 feature pyramid level별({P2, P3, P4, P5, P6})로 수행됨. 이전 과정까지 얻은 모든 feature pyramid level의 anchor box에 대한 정보를 결합
    • 6) 마지막으로 결합된 모든 anchor box에 대하여 objectness score에 따라 top-N개의 anchor box를 선정(학습 시 N=2000로 설정)
  • 최종적으로 수많은 anchor box 중 최적의 N개의 box만이 학습에 사용
💡 Input : Region proposals
Process : selecting top-N RoIs
Output : top-N RoIs

 

5) feature map by RoI Align layer

  • feature pyramid는 multi-scale feature map이기 때문에 RoI를 어떤 scale의 feature map과 매칭시킬지를 결정하는 과정이 필요
  • RoI와 feature map을 사용하여 RoIAlign 과정을 통해 7x7 크기의 feature map을 출력
💡 Input : feature pyramid and RoIs
Process : RoIAlign
Output : 7x7 sized feature map

 

6. Classification and Bounding box regression by Fast R-CNN

  • RoIAlign 과정을 통해 얻은 7x7 크기의 feature map을 fc layer를 거쳐 classfication branch, bbox regression branch에 전달 → 최종적으로 class score과 bbox regressor을 도출
 💡 Input : 7x7 sized feature map
Process : classification by classification branch, bbox regressor by bbox regression branch
Output : class scores and bbox regressors

 

7) Mask segment by Mask branch

  • RoIAlign 과정을 통해 얻은 7x7 크기의 feature map을 mask branch에 전달(feature map은 class별로 생성된 binary mask)
  • 14x14(xK) 크기의 feature map 중 앞서 classification branch에서 얻은 가장 높은 score의 class에 해당하는 feature map을 선정하여 최종 prediction에 사용
💡 Input : 7x7 sized feature map
Process : mask segment by mask branch
Output : 14x14 sized feature map

 

8) Post-processing of masks

  • 최종적으로 선정된 14x14 크기의 featue map을 원본 이미지의 mask와 비교하기 위해 rescale해주는 과정을 수행
  • mask threshold(=0.5)에 따라 mask segment의 각 픽셀값이 0.5 이상인 경우 class에 해당하는 객체가 있어 1을 할당하고, threshold 미만의 경우 0을 할당
 💡 Input : 14x14 sized feature map
Process : rescale and apply mask threshold
Output : mask segment

 

9) Train Mask R-CNN by multi-task loss

  • Mask R-CNN 네트워크를 위에서 언급한 multi-task loss function을 사용하여 학습

Inference

  • COCO 데이터셋을 학습에 사용한 결과, AP값이 37.1%
  • instance segmentation task에서 가장 좋은 성능을 보인 FCIS+++와 OHEM을 결합한 모델보다 AP값이 2.5% 더 높게 나옴

 

 

728x90
반응형
LIST