Abstract.
Mask R-CNN은 Faster R-CNN에 마스크 예측 브랜치를 병렬로 추가해, 객체 검출과 인스턴스 마스크 생성을 동시에 수행하는 프레임워크다. 학습은 간단하고, Faster R-CNN 대비 오버헤드가 크지 않다. 또한 동일 프레임워크로 포즈 추정까지 일반화 가능하다고 말한다. 또한 COCO 챌린지의 instance segmentation / bbox detection / person keypoint detection 3가지 트랙에서 모두 최고 결과를 보여준다.
Introduction.

인스턴스 세그멘테이션은 객체 탐지와 인스턴스 분할을 동시에 요구하므로 어렵지만, 의외로 단순한 확장으로 SOTA를 능가할 수 있다는 점에서 출발한다. 핵심 아이디어는 Faster R-CNN의 2-stage 구조는 유지하되, 각 RoI에 대해 작은 FCN 마스크 헤드를 추가하는 것이다. 다만 Faster R-CNN은 본래 픽셀 정밀 정렬을 목표로 설계되지 않았고, 특히 RoIPool의 양자화(quantization)가 마스크 정확도를 크게 낮춘다고 지적하며 이를 해결하기 위해 RoIAlign을 제안한다.
Related Work.
1) R-CNN
R-CNN은 후보 영역(RoI)을 뽑아 각 RoI에 대해 CNN을 독립적으로 평가한다. 이후 RoI를 feature map 위에서 처리하는 확장인 RoIPool 기반 모델이 나오며 속도와 정확도가 개선되었고, Faster R-CNN은 RPN으로 proposal 생성 자체를 학습했다.
2) Instance Segmentation
R-CNN의 성공 이후 인스턴스 세그먼트는 segment proposal 중심으로 발전했다. 초기에는 bottom-up segment를 쓰거나, DeepMask 및 후속연구처럼 세그먼트 후보를 먼저 만들고, Fast R-CNN이 분류하는 파이프라인이 대표적이었다. 논문은 위의 segmentation-first 방식과 복잡한 multi-stage cascade이 느리고 덜 정확하다고 정리하며, 반대로 Mask R-CNN은 마스크와 클래스 라벨을 병렬로 예측하며 더 단순하고 유연하다고 말한다.
FCIS(Fully Convolutional Instance Segmentation)는 segment proposal + detection으로, position-sensitive 채널을 완전 합성곱으로 예측해 클래스/박스/마스크를 동시에 처리한다. 다만 겹치는 인스턴스에서 오류가 나고, 불필요한 경계를 생성하는 근본적인 어려움이 있었다.
또 다른 갈래로, FCN 같은 per-pixel semantic 결과에서 동일 카테고리 픽셀을 인스턴스로 쪼개는 방식들을 언급한다. 이들은 segmentation-first 전략이지만, 대조적으로 Mask R-CNN은 instance-first이며 둘을 결합하는 연구가 앞으로 있을 거라고 말한다.
Mask R-CNN.
Mask R-CNN은 Faster R-CNN의 2-stage head class / box 예측과 병렬로, RoI마다 binary mask를 하나 더 예측하는 브랜치를 추가한다.
Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks
Abstract당시 객체 탐지의 성능이 region proposal 단계에 크게 의존하면서, Fast R-CNN/SPPnet처럼 탐지 네트워크의 실행 시간을 줄일려는 시도가 있었다. 그럼에도 proposal 생성이 전체 속도의 병목이었다.
blog.minyoy.dev
학습 로스는 L = L_{cls} + L_{box} + L_{mask}와 같으며, 각 RoI마다 하나의 학습 샘플로 보고 해당 RoI에 대해 분류/박스 보정/마스크 손실을 함께 계산해 더하는 멀티태스크 로스를 쓰고, (L_{cls}, L_{box})는 Fast R-CNN과 동일하다.
마스크 브랜치는 RoI당 K개의 m x m 마스크를 출력하며(클래스별 1장), 해당 마스크에 픽셀별로 sigmoid를 적용하고 binary cross-entropy로 (L_{mask})를 정의한다. 이때 RoI의 GT 클래스가 k라면 k번째 마스크만 loss에 기여하고 나머지는 무시한다. 즉 mask와 class를 분리(decouple)하여 클래스 간 경쟁을 없앤다.
Mask Representation.
마스크 예측에서 FC를 사용하게 되면 RoI 특징맵을 한 줄로 펼쳐(flatten) 전부 섞어버린다. 이는 좌표가 가진 의미가 구조적으로 사라지므로, 공간적 패턴을 잡아야하는 마스크 작업이 회귀 문제로 변질된다. 반면 Mask R-CNN은 RoI 특징을 끝까지 격자 형태로 유지한 채, conv만으로 (m×m) 마스크를 뽑는 FCN을 사용한다. 컨볼루션은 같은 필터를 모든 위치에 공유하므로, 위치마다 따로 가중치를 두는 FC보다 파라미터가 훨씬 적고, 인접 영역을 보며 예측하는 연산 특성상 윤곽/경계 같은 로컬 구조를 더 잘 복원한다.
RoIAlign.


RoIPool은 RoI을 만들 때 위 사진과 같이 quantization(반올림)이 들어가 misalignment를 만든다. 이는 translation invariant한 분류 task에서 큰 영향을 미치지 않지만, 마스크는 pixel 단위로 예측하기에 매우 안 좋은 영향을 끼치게 된다.
이에 논문에서는 RoIAlign 방법을 적용한다.



1) featrue map 분할 (마지막에 3x3으로 출력하기 위해 w,h 각각 3등분)
2) 각 cell마다 4개의 sampling point를 찾음 (cell의 w,h 각 3등분 하는 점)
3) Bilinear interpolation 적용

Bilinear interpolation은 2차원 좌표 상에서 두 좌표가 주어졌을 때 중간에 있는 값을 추정하는 방법으로, 공식은 아래와 같다.

여기서 는 2번 과정에서 얻은 4개의 sampling point 좌표이며, 는 sampling point에 인접한 cell의 값이다. 위의 공식에 따라 입력된 feature의 각각 RoI bin의 4개의 sampled location의 값을 연산한다.



4) 2)~3) 과정을 모든 cell에 대해 반복

5) 한 cell의 sampling point 4개에 대하여 max pooling을 수행
위와 같은 RolAlign 방법으로 misalignment 문제를 해결할 수 있으며, Rol의 정확한 spatial location을 보존하는 것도 가능해진다. 따라서 이를 통해 mask 정확도가 크게 향상된다.
Network Architecture.
(i) 전체 이미지 feature를 뽑는 backbone
ResNet과 ResNeXt의 50, 101 layer과 FPN(Feature Pyramid Network)을 backbone으로 사용
-> ResNet-50-C4 : ResNet 50 layer에서 4번째 stage의 final conv layer에서 feature를 추출한다는 의미
FPN(Feature Pyramid Network)은 한 번의 backbone 연산으로 서로 다른 해상도의 feature 피라미드(P2~P5 등)를 만들어, 작은 물체는 고해상도, 큰 물체는 저해상도 feature에서 처리하게 하는 구조이다.


Bottom-up에서는 ResNet 같은 backbone의 단계별 feature(C2~C5)를 얻고, Top-down + lateral connection에서는 상위(저해상도) feature를 업샘플링해서 하위(고해상도) feature와 합쳐 의미(semantic)는 강한데 해상도도 높은 feature를 만든다
(ii) RoI마다 적용되는 head(box head + mask head)로 백본에 따라 다르게 설정된다.

Implementation Details.
Training
Fast R-CNN과 마찬가지로 RoI positive 기준으로 GT box와 IoU ≥ 0.5, (L_{mask})는 positive RoI에서만 정의된다. 마스크 타깃은 RoI과 GT mask간의 교집합이며, 이미지 스케일은 리사이즈해 짧은 변을 800px로 맞춘다. RoI 샘플링은 pos:neg = 1:3 비율로 구성하며, 2-stage head에 실제로 넣어 학습하는 RoI 개수(N)는 C4는 64, FPN는 512이다.
Inference
proposal 수는 C4: 300, FPN: 1000로 사용하며 해당 proposal들은 2-stage box head에 넣어 클래스 점수와 박스 보정을 얻고, NMS로 중복 박스를 제거한다. 그 다음 상위 100개 detection box에만 mask branch 적용해 속도와 정확도를 개선하고, 출력 마스크는 RoI 크기로 리사이즈 후 threshold 0.5로, 0.5 이상이면 물체 픽셀(1), 0.5 미만이면 배경 픽셀(0)로 설정한다.
Experiments.


위 사진과 같이 Mask R-CNN은 COCO test-dev 기준으로, 이전 강자였던 MNC, FCIS 계열을 단일 모델로 능가했다. 특히 ResNet-101-FPN 기반 Mask R-CNN이, multi-scale train/test, flip test, OHEM을 포함하는 FCIS+++보다도 높았다.

추가로 FCIS가 겹치는 인스턴스에서는 엉뚱한 선이 생기는 반면, Mask R-CNN은 그런 문제가 덜하다고 말한다.
Ablation Experiments.

A) 더 깊고, FPN, ResNeXt을 사용한 것이 대체로 성능이 좋았다. → ResNeXt-101-FPN
B) Mask Branch를 분리한(decoupled) 것이 성능이 좋았다. → sigmoid
C) 클래스별 마스크(기본)가 좋지만, 클래스 무관 단일 마스크도 거의 비슷한 성능이 나왔으며, D) RoIWarp는 bilinear를 쓰더라도 RoI 양자화가 남아 RoIPool이랑 비슷한 성능이 나오며, alignment이 제대로 되는 것이 핵심이라고 말한다. → RolAlign
E) Mask head에 fc(MLP)를 사용하는 것보다 FCN을 사용하는 것이 성능이 더 좋았다. → FCN
Bounding Box Detection Results.

박스 검출 성능 평가에서는 마스크 브랜치를 무시하고 COCO bbox AP를 비교한다. ResNet-101-FPN 기반 Mask R-CNN이 당시 강한 단일 모델들을 능가한다. Faster R-CNN + RoIAlign을 따로 학습해 비교했더니, RoIAlign 덕분에 기존 Faster R-CNN보다 좋아지지만, 여전히 Mask R-CNN(멀티태스크 학습)보다 box AP가 0.9 낮다 → 박스 성능 상승분은 멀티태스크 학습 효과라고 결론낸다.
결론
Mask R-CNN은 Faster R-CNN의 2-stage 검출 프레임워크를 기반으로, 각 RoI에 대해 분류/박스 회귀와 병렬로 인스턴스 마스크를 예측하는 FCN 브랜치를 추가함으로써 객체 검출과 인스턴스 세그멘테이션을 하나로 통합한다. 특히 기존 RoIPool 연산에서 발생하는 좌표 양자화(quantization)에 의한 feature–RoI 불일치가 픽셀 수준의 마스크 품질을 저해한다는 점을 문제로 제기하고, 양자화를 제거한 RoIAlign을 도입해 pixel 정확도를 개선한다. 또한 마스크 학습을 클래스별 이진 마스크를 독립적으로 예측하며 정답 클래스의 마스크만 손실에 반영하는 방식으로 분류와 분할을 분리(decoupling)하여 학습을 안정화한다.
이러한 설계 선택은 별도의 복잡한 기법 없이도 COCO 인스턴스 세그멘테이션에서 높은 성능을 달성함을 실험적으로 입증하며, 더 나아가 마스크 예측을 포함한 멀티태스크 학습이 박스 검출 성능에도 유의미한 보조 신호로 작용해 bbox AP를 추가로 향상시킴을 보인다. 추론 시에는 NMS 이후 상위 검출 결과에 대해서만 마스크 브랜치를 적용하는 전략으로 추가 연산 비용을 제한해 실용적인 속도를 유지한다.
[참고]
https://lcyking.tistory.com/entry/논문리뷰-Mask-R-CNN
https://ropiens.tistory.com/76
https://herbwood.tistory.com/20