본문 바로가기
  • 책상 밖 세상을 경험할 수 있는 Playground를 제공하고, 수동적 학습에서 창조의 삶으로의 전환을 위한 새로운 라이프 스타일을 제시합니다.
Computer Vision

[2025-1] 임수연 - Mask R-CNN

by cohayuk 2025. 2. 22.

https://arxiv.org/abs/1703.06870

 

Mask R-CNN

We present a conceptually simple, flexible, and general framework for object instance segmentation. Our approach efficiently detects objects in an image while simultaneously generating a high-quality segmentation mask for each instance. The method, called

arxiv.org


안녕하세요, 이번 글에서는 Kaiming He의 Mask R-CNN(2017) 논문 리뷰를 해보도록 하겠습니다.

 

1. introduction

Object Detection: 이미지 내 여러 객체를 식별하고, 각각을 바운딩 박스를 사용하여 위치를 지정

Semantic Segmentation: 각 픽셀이 어떤 카테고리에 속하는지 분류(같은 클래스의 객체들 간의 구분은 하지 않음)

기존 baseline system:

  • Fast/Faster R-CNN: object detection을 위한 모델
  • Fully Convolutional Networks(FCNs): semantic segmentation을 위한 모델, per-pixel softmax & multinomial cross-entropy loss 주로 사용 -> Mask R-CNN의 Lmask와의 차이점

 

Mask R-CNN results on the COCO test set

목표: "Instance Segmentation"을 위한 프레임 워크 개발 -> Novelty

이미지 속 객체를 정확하게 detection하면서도 각 instance를 정밀하게 segment 가능한 Mask R-CNN

 

Faster R-CNN의 확장: segmentation mask를 예측하는 branch를 추가했는데도,

단순하고 유연하고 추론, 학습에 빠름 -> Contribution

 

2. Faster R-CNN (이전 논문 리뷰가 있으니 간단하게)

region proposal을 위한 모든 연산을 GPU상에서 진행하는 RPN(Region Proposal Network) 제안

 

<< two-stage 구성 >>

  1. 첫번째 stage: RPN을 통해 feature map에서 후보 bounding box들 제안
  2. 두번째 stage: 각 후보 box에 대해 RoIPool을 이용하여 feature들 추출, classification과 bounding-box regression 수행

  • 2 ouputs: 클래스 라벨, bounding-box 오프셋
  • RoIPool 기법: 정렬 불일치(misalignment) 단점, 양자화(quantize)후 max pooling을 하므로 위치 정보가 왜곡되어 pixel-accurate masks 예측에 문제.

 

3. Mask R-CNN

차별점:

  • 3 ouputs: 클래스 라벨, bounding-box 오프셋, + object mask
  • RoIAlign으로 더 finer한 spatial layout

Mask R-CNN의 Framework, 빨간 박스쪽이 mask branch?

  • mask branch: 각각의 RoI에 붙은 작은 FCN
  • class branch에서 class를 분류, mask branch에서는 bounding box 안에 클래스에 해당되는 객체를 mask

 

각 RoI에 대해 Multi-task Loss 사용하여 학습 진행.

전체 Loss Function

  • Lcls와 Lbox 는 Faster R-CNN과 동일한 방식으로 계산.
  • Lmask:
    • mask branch에서 생성된 마스크에 대한 손실을 계산.
    • per-pixel sigmoid 적용하여 각 픽셀이 클래스에 해당하는지 아닌지 판단
    • binary cross entropy loss로 정답 클래스에 해당하는 마스크에 대해서만 loss 적용.

 

  • class branch와 mask branch를 분리하여 Instance Segmentation 성능 향상에 핵심 역할
    • 픽셀 단위(per-pixel) sigmoid를 사용하여 각 클래스 별(per-class) binary mask를 독립적으로 예측
    • 클래스 간 경쟁 없어 mask 예측 정확도 향상

 

4. RoIAlign

RoIAlign

  • 양자화 과정 제거: [x/16] 대신 x/16으로 (여기서 16은 feature map의 스트라이드, [ ]은 반올림)
  • bilinear interpolation을 사용: 각 RoI 구획 안의 4개의 정규 샘플 지점에서 입력 피처의 정확한 값을 계산
  • max pooling 또는 average pooling
  • 픽셀 정밀도가 요구되는 mask 예측에서 큰 성능 향상

RoIAlign 성능

 

 

5. Network Architecture

ResNet/ResNeXt(C4), FPN(Feature Pyramid Network)을 backbone으로 사용한 Faster R-CNN에 mask branch 달아서 mask 예측 수행

  • ResNet-C4 기반
    • 입력된 RoI는 7x7x1024 크기의 피처 맵으로 변환된다.
    • 이후, res5 블록을 통해 7x7x2048 크기로 업그레이드.
    • average pooling 후, fully connected layers를 거쳐 클래스 분류(class) 및 바운딩 박스(box) 예측을 수행.
    • Mask Branch:
      • RoI 피처 맵을 받아 14x14x256 크기의 맵으로 변환.
      • 이후, 14x14x80 크기의 마스크를 출력(클래스당 하나의 마스크).
  • FPN 기반
    • 입력된 RoI는 7x7x256 크기의 피처 맵으로 시작.
    • 두 개의 fully connected layers를 거쳐 1024 차원으로 변환.
    • 이후 클래스 분류 및 바운딩 박스 회귀를 수행.
    • Mask Branch:
      • RoI 피처 맵을 받아 4개의 3x3 convolutional layers를 통과하며, 크기는 14x14x256으로 유지.
      • 이후 업샘플링을 통해 28x28x80 크기의 마스크를 생성.

FPN 기반 성능

 

+ Mask R-CNN for Human Pose Estimation