Study/General AI
Mask R-CNN
date
Mar 18, 2026
slug
mrcnn
author
status
Public
tags
General AI
AI
Mask R-CNN
ICCV
Detection
Segmentation
summary
Mask R-CNN에 대한 내용 정리.
type
Post
thumbnail
updatedAt
Mar 19, 2026 05:32 AM
category
Study/General AI
@inproceedings{he2017mask, title={Mask r-cnn}, author={He, Kaiming and Gkioxari, Georgia and Doll{\'a}r, Piotr and Girshick, Ross}, booktitle={Proceedings of the IEEE international conference on computer vision}, pages={2961--2969}, year={2017} }
- Mask R-CNN은 Faster R-CNN 기반의 2-stage detector에 mask branch를 병렬로 추가하고, RoIPool 대신 RoIAlign을 도입해 instance segmentation을 정확하게 수행한 프레임워크.
- Detection, segmentation, keypoint estimation까지 하나의 통합 구조로 확장 가능하다는 점을 보임.
Introduction
Object detection에서는 Fast/Faster R-CNN이, semantic segmentation에서는 FCN이 강력한 baseline이 되었고, 연구를 빠르게 발전시키는 기반이 됨. 이에 저자들은 여기에 대응되는 instance segmentation용 enabling framework를 만드는 것을 목표로 함.
Instance segmentation은 단순히 픽셀 단위로 분할하는 semantic segmentation과 다르고, 단순히 box를 찾는 detection과도 다름. 각 객체를 정확히 검출하면서 동시에 각 객체의 픽셀 단위 형태까지 분리해야 하기에, detection과 segmentation의 어려움이 동시에 결합된 문제임.

Mask R-CNN은 Faster R-CNN에 RoI별 segmentation mask를 예측하는 작은 FCN branch를 추가함. 하지만 Faster R-CNN은 본래 pixel-to-pixel alignment를 위해 설계된 구조가 아니며, 기존의 RoIPool은 좌표를 거칠게 양자화하기 때문에 픽셀 정밀도가 중요한 mask prediction에는 불리함. 이러한 misalignment를 해결하기 위해 저자들은 RoIAlign을 제안함.
Related Work
R-CNN(Object detection)
원래 R-CNN은 후보 영역마다 CNN을 독립적으로 적용하는 방식이었고, 이후 Fast R-CNN과 Faster R-CNN으로 발전하면서 feature map 위에서 RoI를 직접 다루고, RPN을 통해 proposal도 학습하게 됨.
저자들은 Faster R-CNN이 이미 강력하고 유연한 detection 프레임워크이며, 후속 개선 요소들을 잘 흡수하는 구조라고 평가하며, Mask R-CNN은 이 계보를 그대로 계승함.
Instance Segmentation
초기 방법들은 bottom-up segment proposal에 의존했고, DeepMask와 같은 방법은 먼저 segment 후보를 만들고 이후에 이를 분류함. 이런 방식은 저자들에 따르면 segmentation이 recognition보다 먼저 수행되는 구조라서 느리고 정확도도 제한적이라 주장함.
Complex multiple-stage cascade는 bounding box proposal로부터 segmentation proposal을 예측하는 복잡한 multi-stage cascade였고, Fully convolutional instance segmentation(FCIS)는 fully convolutional한 position-sensitive maps로 box와 mask를 동시에 다루며 속도 이점을 가짐. 하지만 FCIS는 겹치는 인스턴스에서 systematic error와 spurious edge가 발생한다고 지적함.
Mask R-CNN
기본 개념
Faster R-CNN은 각 RoI마다 class label과 bounding-box offset 두 개를 출력하는데, 여기에 object mask를 출력하는 세 번째 branch를 더한 것이 Mask R-CNN임. 개념적으로는 단순하지만, mask는 box/class보다 훨씬 더 정밀한 spatial layout 정보를 필요로 하기 때문에, 단순히 출력 하나 더 추가하는 수준으로 끝나지 않다고 설명함.
Faster R-CNN
Faster R-CNN은 첫 번째 단계로 RPN이 candidate object box를 제안하고, 두 번째 단계에서는 Fast R-CNN 스타일로 각 proposal에서 feature를 뽑아 classification과 box regression을 수행함. Mask R-CNN은 이 두 단계 구조를 그대로 유지함.
Mask branch와 loss
Mask R-CNN에서는 두 번째 단계에서 class와 box를 예측하는 것과 병렬로, 각 RoI에 대해 binary mask를 예측하며, 학습 시 loss는 다음과 같은 multi-task loss임.
여기서 와 는 Faster R-CNN과 동일하고, 가 새로 추가됨. Mask branch는 각 RoI에 대해 개의 binary mask를 출력함. 즉 클래스 수가 라면 각 클래스별 마스크를 따로 출력하는 구조. 또한 ground-truth class 에 해당하는 채널에 대해서만 pixel-wise sigmoid와 binary cross-entropy를 적용함.
논문은 semantic segmentation처럼 per-pixel softmax를 써서 클래스 간 경쟁을 시키지 않음. 대신 mask와 class prediction을 decouple함. Class는 classification branch가 담당하고, mask branch는 “이 RoI가 주어진 클래스일 때 어떤 shape인가”에 집중함. 저자들은 이것이 instance segmentation에서 핵심 설계라 말함.
Mask representation
저자들은 mask가 본질적으로 공간 구조(spatial layout)를 담고 있기 때문에, fc layer보다 convolution이 더 자연스럽다고 설명함. 그래서 각 RoI에서 mask를 FCN 방식으로 예측함. 이렇게 하면 각 layer가 explicit한 spatial arrangement를 유지할 수 있고, 이전 방법들처럼 fc layer로 공간 구조를 벡터로 압축하는 것보다 더 적은 파라미터로 더 정확한 예측이 가능하다고 말함.
이는 왜 mask branch가 “작은 segmentation network”처럼 설계되어야 하는지를 잘 보여주며, Detection head는 category와 box offset처럼 상대적으로 저차원 정보를 다루지만, mask는 물체의 형상을 복원해야 하므로 공간 해상도를 끝까지 보존하는 설계가 필요함.
RoIAlign
RoIPool은 원래 RoI를 작은 feature map으로 바꿀 때, RoI 좌표와 bin을 양자화(반올림)함. 예를 들어 stride 16 feature map이라면 좌표를 처럼 정수화해서 처리함. Classification은 이런 작은 이동에 비교적 강인하지만, pixel-accurate mask prediction은 그렇지 않아, 이러한 양자화가 RoI와 실제 input 사이의 정렬을 깨뜨려 segmentation 품질을 크게 떨어뜨린다고 주장함.
이를 해결하기 위해 RoIAlign에서는
- RoI boundary를 양자화하지 않음
- Bin도 양자화하지 않음
- Bilinear interpolation으로 정확한 위치의 feature 값을 샘플링함.
즉 RoIAlign은 단순히 “보간을 쓴다”가 아니라, 양자화 자체를 제거해서 입력과 출력의 정렬을 유지한다는 점이 핵심. 논문은 RoIWarp도 bilinear sampling을 쓰지만 RoI 자체를 여전히 quantize하기 때문에 RoIPool과 비슷한 성능에 머무른다고 설명하며, Bilinear interpolation 자체보다 더 중요한 것은 alignment preservation이라고 함.
Network architecture
Backbone은 ResNet-50/101, ResNeXt-101, C4 또는 FPN을 사용함. 특히 FPN은 단일-scale 입력으로부터 feature pyramid를 만들고, 객체 크기에 따라 서로 다른 pyramid level에서 RoI feature를 추출하기 때문에 Mask R-CNN에 매우 효과적이라고 설명함.

Head는 기존 Faster R-CNN head를 따르되, 여기에 fully convolutional mask branch를 더함. ResNet-C4에서는 res5 stage가 head 안에 들어가 상대적으로 무겁고, FPN에서는 backbone이 이미 res5를 포함하므로 더 가벼운 head를 사용할 수 있음. Mask branch 자체는 일부러 복잡하게 만들지 않았으며, 논문의 목적은 정교한 tuning보다 핵심 원리의 효과를 보여주는 것이라고 언급함.
Implementation Details
학습에서는 RoI가 ground-truth box와 IoU 0.5 이상이면 positive로 간주하고, mask loss는 positive RoI에 대해서만 적용함. Target mask는 해당 RoI와 연결된 ground-truth mask의 교집합. 입력 이미지는 짧은 변이 800 픽셀이 되도록 resize하고, GPU당 2장씩 학습하며, C4 backbone에서는 이미지당 64개 RoI, FPN에서는 512개 RoI를 샘플링함. 학습은 8 GPU에서 총 160k iteration, learning rate 0.02로 시작해 120k에서 10배 감소시키며, weight decay는 0.0001, momentum은 0.9을 사용함.
항목 | 설정/내용 |
Positiive 기준 | RoI가 GT Box와의 IoU ≥ 0.5이면 Positive로 간주 |
Mask loss 적용 대상 | Positive RoI에 대해서만 mask loss 적용 |
Target mask 정의 | 해당 RoI에 매칭된 GT Mask와의 교집합 사용 |
입력 이미지 전처리 | 이미지의 짧은 변(short side)을 800 pixel로 resize |
GPU당 Batch Size | 2 images / GPU |
C4 backbone의 RoI 샘플 수 | 이미지당 64 RoIs |
FPN backbone의 RoI 샘플 수 | 이미지당 512 Rols |
학습 자원 | 8 GPUs |
총 학습 iteration | 160k |
초기 Learning rate | 0.02 |
Learning rate decay | 120k iteration에서 10배 감소 |
Weight decay | 0.0001 |
Momentum | 0.9 |
추론에서는 C4는 300 proposals, FPN은 1000 proposals를 사용하고, box prediction 후 NMS를 적용한 뒤 상위 100 detection box에 대해서만 mask branch를 적용. 이 방식은 훈련과 완전히 동일한 병렬 계산은 아니지만, 더 적고 더 정확한 RoI에만 mask를 적용하므로 속도와 정확도를 동시에 개선한다고 설명함. 최종적으로 mask는 예측된 class 에 해당하는 채널만 사용하고, 이를 RoI 크기로 resize한 뒤 threshold 0.5로 binarize함. 저자들은 이 덕분에 Mask R-CNN이 Faster R-CNN 대비 약 20% 정도의 작은 overhead만 추가한다고 언급함.
항목 | 설정 / 내용 |
C4 추론 시 proposals 수 | 300 proposals |
FPN 추론 시 proposals 수 | 1000 proposals |
Box 후처리 | Box prediction 후 NMS 적용 |
Mask branch 적용 대상 | 상위 100개 detection box에 대해서만 mask branch 적용 |
추론 전략의 의미 | 훈련과 완전히 동일한 병렬 계산은 아니지만, 더 적고 더 정확한 RoI에만 mask를 적용 |
추론 전략의 장점 | 속도와 정확도를 동시에 개선 |
최종 mask 선택 방식 | 예측된 class 에 해당하는 채널만 사용 |
Mask 크기 복원 | 선택된 mask를 해당 RoI 크기로 resize |
최종 이진화 | Threshold 0.5로 binarize |
추가 연산량 | Faster R-CNN 대비 약 20% 정도의 작은 overhead |
Experiments: Instance Segmentation
실험은 COCO를 사용하며, 평가 지표는 COCO 표준 metric인 AP, AP50, AP75, APS, APM, APL을 사용함.
- Training Set:
trainval35k를 사용함. 이는 기존의 train 이미지 80k와 val 이미지 중 일부인 35k를 합친 총 115k장의 이미지로, 모델이 실제로 학습하는 데이터.
- Internal Evaluation/Ablation:
minival을 사용함. 이는 전체 val 이미지 중 학습에 쓰이지 않고 남은 5k장으로, 논문 내의 Ablation Study 결과를 도출하는 기준이 됨.
- Final Benchmark:
test-dev를 사용함. 라벨이 공개되지 않은 공식 테스트 세트로, 다른 SOTA들과의 공정한 비교를 위해 사용됨.
Main Results

Table 1에서 Mask R-CNN은 당시 주요 모델들인 MNC, FCIS, FCIS+++를 모두 넘어섬.
- Mask R-CNN ResNet-101-C4: 33.1 AP
- Mask R-CNN ResNet-101-FPN: 35.7 AP
- Mask R-CNN ResNeXt-101-FPN: 37.1 AP
특히 중요한 점은 FCIS+++가 multi-scale train/test, horizontal flip test, OHEM 같은 여러 고급 기법을 포함하고 있음에도, Mask R-CNN은 “without bells and whistles” 상태에서 이를 넘어섬. 즉 구조 자체의 우수성이 크다는 것을 의미함.

FCIS는 겹치는 객체에서 systematic artifact를 보이는 반면 Mask R-CNN은 그런 현상이 적다고 주장함. 이는 Mask R-CNN의 병렬 mask prediction 구조가 instance separation 문제를 더 안정적으로 다룬다는 정성적 근거로 볼 수 있음.
Ablation Experiments

Backbone Architecture
고도화 된 backbone, FPN, ResNeXt가 모두 성능 향상에 기여함. 예를 들어 ResNet-50-C4는 30.3 AP, ResNet-101-C4는 32.7 AP, ResNet-50-FPN은 33.6 AP, ResNeXt-101-FPN은 36.7 AP를 기록함. 즉 Mask R-CNN은 더 강한 feature extractor의 이점을 잘 흡수하는 framework라 할 수 있음.
Multinomial vs. Independent Masks
Softmax 기반 multinomial mask는 24.8 AP, sigmoid 기반 independent binary masks는 30.3 AP로 둘 사이에 5.5 AP의 차이가 발생함. 이는 “mask와 class prediction을 분리해야 한다”는 주장을 뒷받침함. 즉 인스턴스가 이미 어떤 클래스인지 box/class branch가 판정했다면, mask branch는 그저 이 객체의 shape만 맞히면 되며, 굳이 클래스 간 competition을 시킬 필요가 없음.
또한 class-agnostic mask도 29.7 AP로 거의 비슷한 성능을 보이며, 이는 segmentation이 classification과 상당 부분 차이가 있는 문제라는 점을 보여줌.
RoIAlign
ResNet-50-C4에서 RoIPool은 26.9 AP, RoIAlign은 30.3 AP을 보임. 특히 AP75가 26.4 → 31.5로 크게 오름. 이는 정렬이 localization precision에 직접적인 영향을 준다는 뜻으로, RoIWarp는 bilinear sampling을 사용하지만 alignment를 보장하지 못해 RoIPool과 비슷한 수준에 머뭄. 저자들은 이를 통해 “정렬이 핵심”임을 주장함.
Stride 32의 ResNet-50-C5에서는 차이가 더 커짐. RoIPool은 23.6 AP, RoIAlign은 30.9 AP, AP75는 21.6 → 32.1로 차이가 발생함. Coarse feature일수록 quantization error가 더 심각해지고, RoIAlign의 가치가 더 커진다는 것을 보여주는 결과임.
Mask Branch: FCN vs. MLP
MLP head는 31.5 AP 수준이고, FCN mask head는 33.6 AP를 보임. 이는 segmentation이 픽셀 단위의 spatial task이기 때문에, fc-based vector prediction보다 공간 구조를 유지하는 convolutional head가 더 적합함을 실험적으로 보여줌.
Ablation 전체 요약
Mask R-CNN의 성능은 단순히 mask branch를 추가한 것 때문이 아닌, 아래의 이유가 추가되어 발생함.
(1) Class와 mask를 분리함.
(2) Spatial structure를 FCN으로 유지함.
(3) RoIAlign으로 정확한 정렬을 보장함.
Bounding Box Detection Results

Mask R-CNN은 segmentation뿐 아니라 detection에서도 좋은 성능을 보임.
- Mask R-CNN ResNet-101-FPN: 38.2 box AP
- Mask R-CNN ResNeXt-101-FPN: 39.8 box AP

논문은 성능 향상의 원인을 세 가지로 분석함.
- RoIAlign이 약 +1.1 APbb
- Multi-task training이 약 +0.9 APbb
- ResNeXt-101 backbone이 약 +1.6 APbb
특히 mask branch를 제거한 “Faster R-CNN, RoIAlign” 버전보다 Mask R-CNN이 0.9 AP 더 높다는 점은, mask prediction이 단순한 부가 task가 아니라 representation learning을 개선하는 보조 감독 신호가 될 수 있음을 보여줌. 즉 segmentation supervision이 detection에도 도움을 줌을 의미함.
또한 mask AP와 box AP의 차이가 크지 않다는 점도 강조함. ResNeXt-101-FPN에서는 mask 37.1 AP와 box 39.8 AP로 차이가 2.7 정도에 불과함. 이는 instance segmentation이 detection보다 훨씬 어려운 task임에도, Mask R-CNN이 그 간극을 상당히 줄였음을 의미함.
Timing
추론에서 shared feature를 사용하는 ResNet-101-FPN 모델은 Tesla M40 GPU에서 195ms per image, 출력 resize에 CPU 15ms를 더해 대략 5 fps 수준으로 동작함. 반면 ResNet-101-C4는 head가 무거워 약 400ms가 걸리므로 실용적 선택으로는 FPN variant를 권장함. 또한 학습에서 ResNet-50-FPN은 COCO trainval35k에서 32시간, ResNet-101-FPN은 44시간 정도 걸림.
Mask R-CNN for Human Pose Estimation

Mask R-CNN은 instance-level recognition framewor이기에 human pose estimation에서의 성능을 확인함. Human pose estimation에서의 keypoint를 하나의 one-hot mask처럼 다룸. 즉 left shoulder, right elbow 같은 각 keypoint type마다 mask를 예측하게 함.
구현 방법으로 segmentation 시스템을 약간 수정함. 각 visible keypoint에 대해 공간에서 foreground pixel 하나만 있는 one-hot target을 만들고, 각 keypoint에 대해 -way softmax cross-entropy를 사용함. Keypoint head는 ResNet-FPN 기반으로, 8개의 conv, deconv, bilinear upsampling을 거쳐 해상도 출력을 생성함. Mask보다 더 높은 해상도가 필요한 것은 keypoint localization이 훨씬 더 정밀하기 때문.
결과적으로 ResNet-50-FPN 기반 Mask R-CNN은 keypoint-only로 62.7 APkp, keypoint+mask multi-task로 63.1 APkp를 기록하며, 2016 COCO keypoint winner를 넘어섬과 동시에 5 fps로 동작함.
Multi-task learning에서 mask branch를 추가하면 keypoint 성능이 좋아지고, keypoint branch는 box/mask에 약간 부정적 영향을 줄 수 있지만, 세 task를 동시에 수행하는 unified system을 만들 수 있다는 점을 강조함. RoIAlign 역시 keypoint detection에서 큰 효과를 보이며, RoIPool 대비 64.2 vs 59.8 APkp, 즉 +4.4 APkp 향상이 있음. 이는 alignment 문제가 mask뿐 아니라 모든 pixel-level localization task에서 핵심이라는 논문의 주장을 다시 증명함.
