Processing math: 100%
본문 바로가기
논문리뷰

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

by 단깅수 2025. 2. 17.
728x90

Mask R-CNN 논문 리뷰입니다.

본 논문은 2018년도에 등장한 논문입니다.

논문 : Mask R-CNN

저자 : Kaiming He Georgia Gkioxari Piotr Dollar Ross Girshick

[1] Background

여느 Mask R-CNN 모델 리뷰와 동일하게 Instance segmentation과 R-CNN 계열 모델의 발전 과정을 살펴보고 들어가겠습니다.

 

Instance Segmentation

본 논문의 Introduction 부분에 이 모델은 Instance Segmentation에서 강력한 모델을 만들겠다는 이야기를 합니다.

 

Instance Segmentation 이란, Object Detection과 Semantic Segmentation이 결합된 형태의 CV Task로 배경과 객체를 클래스로 분류할 뿐만 아니라 같은 클래스의 객체도 별개의 객체라는 걸 구분해야 하는 어려운 Task입니다.

 

초기 방법론들은 이 Task를 수행하기 위해 먼저 Segment 후보를 제안하고 이를 분류하는 방식을 택했으나 이 방식은 분할과 분류가 연속적인 과정으로 진행되어 속도가 느리다는 단점이 있었습니다. (병렬 불가능)

 

반면, Mask R-CNN에서 제안하는 Instance Segmentation 방법론은 mask와 class 라벨을 병렬로 예측하는 방식이라 더 간단하고 유연한 방법론이라고 합니다.

 

R-CNN

 

R-CNN은 Region Proposal + CNN 구조의 모델입니다.

 

그래서 이제 Region Proposal의 개념이 등장하는데 Region Proposal이란 탐지하고자 하는 물체가 속할 가능성이 있는 ROI 영역들을 찾는 작업을 의미합니다.

 

R-CNN에서는 Selective Search 알고리즘을 활용해 약 2,000개의 ROI를 Input Image로부터 얻어내죠.

 

여기서 R-CNN의 문제점이 여럿 등장합니다.

 

1) Input Image 로부터 약 2,000개의 Bounding Box를 생성하는데 이 과정이 매우 오래걸리며, 심지어 GPU로도 안돌아가고 CPU로 연산을 수행해야 한다.

2) Bounding Box를 CNN에 입력하기 위해 이미지를 동일한 크기로 warp해줘야 하는데 이 과정에서 정보 손실이 발생한다.

3) 생성된 모든 Bounding Box를 전부 CNN에 입력해서 Classification을 하기 때문에 연산량이 많이 필요하다.

 

그래서 이를 보완하기 위해 Region Proposal과 CNN 과정을 분리하지 말고 한 번에 end-to-end 방식으로 진행한 모델이 Fast R-CNN입니다.

 

Fast R-CNN

 

Fast R-CNN에서는 R-CNN과 다르게 ROI 영역을 모두 각각 개별 CNN에 입력하지 않고 ROI 영역을 추출만 한 후 (위치만 알아낸 후) 그대로 CNN에 입력하고 ConvNet을 통과한 Feature Map에 Projection(사영)합니다.

 

이후, ROI Pooling Layer와 FC Layer를 지나서 분류 Task(Softmax), 회귀 Task(bbox regressor)에 쓰이게 됩니다.

 

Fast R-CNN에서 가장 핵심은 ROI Pooling Layer인데요.

 

ROI Pooling Layer

 

ROI Pooling Layer란, ConvNet를 지난 Feature Map에 사영된 ROI 영역에 대해 Pooling 작업을 거쳐서 FC Layer에 입력할 수 있도록 크기를 조정하는 역할을 하는 Layer입니다.

 

위와 같은 구조로 되어 있는 Fast R-CNN에도 여전히 문제점은 존재하였습니다.

 

1) ROI 영역을 선정하는 Region Proposal은 여전히 Selective Search 방식을 사용 중이다. (여전히 CPU)

2) R-CNN보다 빨라지기는 했지만 과연 충분히 빨라진 것인가?

 

Faster R-CNN

 

Faster R-CNN은 Region Proposal Network를 Selective Search 방식이 아니라 모델 내에서 같이 수행되도록 만들어보자는 개념이 추가된 모델입니다.

 

모델 구조는 RPN + Fast R-CNN 구조로 되어 있고 쉽게 말해서 기존 Fast R-CNN에 Region Proposal Network가 추가된 모델입니다.

 

여기서 RPN은 Region Proposal이 일어나는 Network로 Feature Map에서 객체가 어디에 있을지 예측하는 역할을 수행합니다.

 

하지만 Faster R-CNN도 문제점이 당연히 존재합니다.

1) Faster R-CNN은 네트워크의 입력과 출력 간 픽셀단위 정렬을 고려해서 설계하지 못함 (특히 ROI Pooling)

💡 Faster R-CNN의 ROI Pooling은 왜 픽셀단위 정렬을 고려하지 못하는가?

- 원본 이미지 크기 : 800 x 800
- Feature Map 크기 : 50 x 50
- ROI 실제 좌표 : (100, 200, 300, 400)
    - (x1 = 100, y1 - 200) ~ (x2 = 300, y2 = 400) 범위의 객체


RoI Pooling 과정
Faster R-CNN의 RoI Pooling에서는 RoI의 좌표를 Feature Map의 크기에 맞게 양자화함.

- 원본 이미지의 (100, 200) → Feature Map에서는 (6.25, 12.5)
- 원본 이미지의 (300, 400) → Feature Map에서는 (18.75, 25.0)


문제점: RoI Pooling은 좌표를 정수 단위로 변환해야 하므로, 위의 값이 (6,12)과 (19,25)로 반올림 혹은 내림 처리됨
이 과정에서 객체의 경계가 미세하게 달라지고, 원본 이미지에서의 정확한 위치가 유지되지 않음

Mask R-CNN에서는 RoIAlign을 사용하여 양자화 없이 좌표를 그대로 유지
RoIAlign: 좌표를 보간(interpolation) → 정확한 위치 유지

 

RoIAlign, Mask Branch 생성, Mask 및 클래스 예측 분리 등의 핵심 개념에 집중하면서 공부하시면 좋을 듯합니다.


[2] Mask R-CNN

 

Mask R-CNN은 개념적으로 매우 단순한 구조를 가지고 있습니다.

 

Faster R-CNN은 각 후보 객체에 대해 Class label과 Bounding Box Offset을 출력하는데, 여기에 객체 마스크를 출력하는 세 번째 Branch만 추가한 형태입니다.

 

사실 Mask 기법을 사용한 선행 연구들이 있었는데 기존 기법들은 먼저 마스크를 생성한 후 그 결과를 바탕으로 객체 클래스를 예측하지만 Mask R-CNN은 클래스와 마스크를 독립적으로 예측한다는 특징이 있습니다.

 

What is Mask?

 

지금껏 NLP, LLM 쪽 위주로 공부했던 학생으로서 Mask 하면 BERT가 계속 생각나는데 Mask R-CNN에서 얘기하는 Mask가 BERT에서의 Mask 와 다른 의미로 쓰인 것 같아 좀 찾아보았습니다.

 

일반적인 객체 탐지에서는 객체를 Bounding Box로 감싸기 마련인데 이는 객체의 정확한 모양이 아니라 사각형 형태로 위치만 표시하는 방식입니다.

하지만 현실에서 객체는 대부분 그냥 사각형 형태가 아니기 때문에 Instance Segmentation 를 위해서는 객체의 정확한 형태를 픽셀 단위로 예측할 필요가 있는 거죠.

 

그래서 Mask란 객체의 실제 형태를 픽셀 단위로 표현하는 Mask Map으로서, 객체의 외곽선을 따라 픽셀마다 객체가 맞는지 1, 0으로 구분된 이미지를 의미합니다.

 

따라서, Class Label이나 Bounding Box Offset 처럼 FC Layer를 통해 벡터로 변환되는 것과 달리, Conv Layer를 통해 pixel-to-pixel 방식으로 추출해야 합니다. (Fully Connected Network 사용)

 

또한 이를 위해 이전 ROI의 Feature Map도 잘 정렬되어야 하며 각 픽셀의 공간적인 정보를 정확히 유지하고 있어야 합니다.

그런데 기존 Faster R-CNN의 ROI Pooling은 공간 정보가 왜곡될 가능성이 있기 때문에 새로운 방법론, ROI Align을 제시합니다.

 

ROI Align

herbwood님 블로그에 너무 설명을 잘 해놓으셔서 많이 참고했습니다.

 

먼저 위처럼 145 x 200 크기의 ROI를 16 x 16 Feature Map에 투영하는 ROI Pooling이 일어난다고 가정했을 때

우측 하단의 파란 부분만큼 Data의 Loss가 발생합니다. (Quantization으로 인해)

 

이러한 방식은 Pixel 단위로 mask를 예측해야 하는 Instance Segmentation Task에 큰 악영향을 미칠 수 있어 이를 ROI Align 방식으로 대체합니다.

 

 

 

먼저 ROI 영역을 투영시킨 그대로 받아, 출력하고자 하는 Feature Map 크기에 맞게 분할합니다.

 

위 예시에서는 3 x 3 Feature Map으로 출력하기 때문에 width, height를 각각 3등분합니다.

 

3등분 된 하나의 셀에서 4개의 Sampling Point를 찾습니다. (가운데 이미지의 파란 점들)

- 이는 3x3 으로 분할된 셀을 또 각각 3등분하는 점에 해당합니다.

 

그 다음 Bilinear Interpolation(쌍선형 보간법)을 적용합니다.

 

Bilinear interpolation은 2차원 좌표 상에서 두 좌표가 주어졌을 때 중간에 있는 값을 추정하는 방법이라고 합니다.

이를 구하는 공식은 다음과 같습니다.

 

분할된 각 셀마다 쌍선형 보간법을 적용하면 왼쪽 이미지처럼 4개의 Sampling Point의 값을 추정할 수 있고 여기에 Max Pooling / AVG Pooling을 적용하는 것으로 마무리됩니다.

 

Loss Function

위에서 설명했다시피 Mask R-CNN은 Faster R-CNN 구조에 Mask Branch를 추가하였습니다.

 

Loss Function도 그에 따라 다음과 같이 적용됩니다.

L=Lcls+Lbox+Lmask

 

Lcls는 classification loss, Lbox는 bounding box loss로 Faster R-CNN과 동일하고

Lmask 는 binary cross entropy loss로 각 RoI에 대해 클래스별로 독립적인 mask map을 생성한 후, 해당 클래스에 대해서만 sigmoid를 적용하여 binary loss를 구합니다.

 

Network Architecture

본 논문의 저자들은 Mask R-CNN의 접근 방식이 범용적으로 적용될 수 있음을 입증하기 위해 다양한 아키텍쳐에서 실험해보았다고 합니다.

 

일단 Architecture를 Backbone과 Head 로 나눕니다.

- Backbone Architecture : 전체 이미지에서 특징을 추출하는 CNN 기반 모델

- Head Architecture : 각 ROI에 대해 Bounding Box 예측 및 마스크 예측을 담당하는 모델

 

먼저 Backbone은 ResNet과 ResNeXt 중 50 or 101 Layer로 깊이를 설정해서 평가하였습니다.

특히, ResNet 모델의 C4, 4번째 블록에서 특징을 추출합니다. (Faster R-CNN에서 C4 블록을 사용하는 방식이 일반적으로 활용됨)

 

그렇지만 C4보다 FPN의 경우가 다중 해상도를 활용할 수 있어 성능과 연산 효율성이 높다는 결과를 얻어 C4보다는 FPN을 백본으로 활용했다고 합니다. (실험 파트에서 추가 설명 예정)

 

Training

Mask R-CNN의 학습 과정은 Faster R-CNN과 거의 동일하지만, 마스크 예측을 위한 추가적인 학습 과정이 포함됩니다.

 

1) RoI를 가지고 정답 바운딩 박스와 IoU를 구해 0.5 이상이면 양성(positive), 그렇지 않으면 **음성(negative)**으로 분류

2) 양성 RoI에 대해서만 마스크 예측 수행

3) 픽셀별 softmax를 사용하는 것이 아니라, 클래스별 독립적인 마스크를 예측

4) 짧은 변이 800px이 되도록 이미지 크기 조정

5) Mini-batch 설정: C4 백본 → RoI 64개 / FPN 백본 → RoI 512개

6) 학습률: 초기 0.02 → 120K iteration 이후 1/10 감소

 

Inference

추론 과정에서는 학습 과정과는 다소 다른 방식으로 연산이 최적화됩니다.

Faster R-CNN과 비교했을 때 추론 속도를 높이고, 불필요한 연산을 줄이도록 개선되었습니다.

 

1) ROI 후보 개수 조정 (C4 백본은 300개의 ROI, FPN 백본은 1000개의 ROI 사용 - 다중 해상도 활용 가능)

2) Faster R-CNN과 동일하게 바운딩 박스 분류 후, NMS 적용

3) 모든 ROI에 대해 마스크 예측을 수행하지 않고, 상위 100개의 탐지 박스에서만 마스크를 예측

4) ROI당 여러 클래스의 마스크를 예측할 수 있지만, 최종적으로 분류된 클래스의 마스크만 선택하여 사용 (독립적)

5) m x 크기의 마스크 출력을 ROI 크기로 resizing 하고 0.5를 임계값으로 해서 binary 예측 수행


[3] Experiments

1) COCO Dataset

 

첫 번째 실험은 Mask R-CNN과 최신 Instance Segmentation 기법들과의 성능 비교 실험입니다.

(근데 이제 COCO dataset을 곁들인)

 

Mask R-CNN은 추가적인 기법 없이도 FCIS+++ 보다 성능이 우수합니다.

FCIS+++는 멀티스케일, 수평플립, OHEM 등 다양한 성능 향상 기법을 적용한 모델입니다.

 

그리고 위에서 언급했듯이 C4 계열 모델보다 FPN 백본을 활용하는 것이 성능이 더 좋았습니다.

 

아래는 FCIS+++과 Mask R-CNN의 Instance Segmentation 결과를 비교하는 이미지입니다.

 

2) Ablation Studies

두 번째 실험은 Mask R-CNN의 개별 요소를 변경하여 성능에 미치는 영향을 분석하는 실험입니다.

 

a : 다양한 백본 구조에서의 성능 비교

→ 더 깊은 네트워크가 당연하게도 성능이 준수했으며 ResNet보다 ResNeXt가, C4보다 FPN의 경우가 성능이 좋았음

 

b : 마스크 예측할 때 sigmoid + binary loss를 사용할 것인가, softmax + multinomial loss를 사용할 것인가?

→ 다중클래스 손실을 사용하면 클래스 간 경쟁이 발생해 마스크 성능이 저하됨

 

c : ROI Align vs ROI Pooling vs ROI Warp

→ ROI Pooling에 비해서는 ROI Align이 정확도가 높고, ROI Warp도 bilinear sampling을 사용하는 방법이지만 ROI Warp도 quantization을 사용하기에 입력과 정확히 맞지 않는 문제가 발생함, 결국 ROI Align이 가장 좋고 max / avg pooling 중에는 avg pooling을 사용했다고 함

 

d : ResNet-50-C5 백본에서 RoIAlign 평가 (근데 이제 stride가 32인)

→ 일반적으로 stride가 클수록 정보 손실이 발생하지만 ROI Align을 적용하면 stride-32에서도 높은 정확도를 유지할 수 있음

 

e : MLP vs FCN 비교 실험 (MLP는 공간적 특성 반영 X / FCN은 공간적 특성 반영 O)

→ 공간적 특성을 반영하는 FCN의 경우가 MLP 대비 2.1 포인트의 AP가 증가함

 

3) Mask R-CNN for Human Pose Estimation

Mask R-CNN 프레임워크는 사람의 자세를 추정하는데 확장될 수 있습니다.

 

위에서 설명한 ROI Align의 키 포인트는 one hot mask로 모델링되고 K개의 키 포인트 유형 (왼쪽 어깨, 오른쪽 팔꿈치 등) 각각에 대해 총 K개의 마스크를 예측합니다.

 

 

좌측 실험 결과처럼 키 포인트 branch를 추가하면 box, mask의 AP는 약간 줄어들지만 mask와 keypoint 등 모든 출력을 효율적으로 예측할 수 있습니다.

 

하지만 우측 실험 결과에서 알 수 있듯이 2016년도 Keypoint detection SOTA 모델보다 더 높은 성능을 달성하며 성능을 입증했답니다.


[4] Conclusions

  • 현실에서 객체는 단순한 사각형이 아니기 때문에 기존 bounding box 기반 detection 모델은 한계점을 지니고 이를 해결하기 위해 픽셀 단위의 객체 마스크를 예측하는 Mask R-CNN을 제안함
  • 핵심 개념 : ROI Align과 Mask Branch
    • ROI Align : 기존의 ROI Pooling은 quantization할 때 정수로 변환하면서 오차가 생기는 문제가 있었으나 이를 Bilinear interpolation로 해결함
    • Mask Branch : 각 클래스별로 독립적인 Mask Map 예측 (픽셀마다 객체 여부에 따라 1, 0으로 예측)
  • COCO Dataset에서 SOTA 달성

[5] References

https://herbwood.tistory.com/20

https://medium.com/analytics-vidhya/review-mask-r-cnn-instance-segmentation-human-pose-estimation-61080a93bf4

 

 

[논문리뷰] Faster R-CNN 논문 리뷰

Faster R-CNN 논문 리뷰입니다.본 논문은 2015년도에 등장한 논문입니다.논문 : Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 저자 : Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun  [1] Backgrou

dangingsu.tistory.com

728x90
반응형