논문 링크 : https://arxiv.org/pdf/1703.06870.pdf
Mask R-CNN은 instance segmentation 을 위해 사용되는 모델인데 이 내용을 이해하기 위해서는 Faster R-CNN과 Object Detection, Semantic Segmentation, Instance Segmentation의 차이를 알아야 한다.
🎯 Faster R-CNN
이 모델은 object detection을 위한 모델이다.
후보 영역 추출 작업을 수행하는 네트워크인 RPN(Region Proposal Network)을 Fast R-CNN 모델에 적용한 것이다.
RPN에서 region proposals를 추출하고 이를 Fast R-CNN 모델에 전달해 객체의 클래스와 위치를 예측하는 방식이다.
🎯 Object Detection, Semantic Segmentation, Instance Segmentation 차이

- Object Detection : 각 객체에 classification 수행 후 Bounding box를 생성
- Semantic Segmentation : 하나의 클래스에 대해 하나의 Segmentation Mask를 생성 - 축구선수 2명 분류 X
- Instance Segmentation : 위 두 가지를 합쳐 각 객체에 대해 Segmentation Mask를 생성
Abstract
Faster R-CNN 모델에 브랜치를 병렬적으로 추가해 instance segmentation이 가능하도록 하는 모델이다.
1. Introduction

instance segmentation을 빠르게 구현하는 프레임워크 개발이 목표다.
이를 위해 Faster R-CNN의 RPN에서 얻은 RoI(Region of Intereset)에 class를 예측하는 classification branch, bounding box regression을 수행하는 bonding box regression branch와 평행하게 mask branch를 추가한다.
mask branch는 각 RoI에 FCN(Fully Convolutional Network)가 추가된 형태다.
Faster R-CNN과 차이점은 RoI Align을 사용한 것이다.
앞서 말했든 Faster R-CNN은 object detection이 목표라 객체의 테두리만 추출하면 됐다. 그렇기에 소수점 좌표가 있을 경우 반올림하는 RoI Pooling을 수행해 위치가 왜곡되었다.
그러나 Mask R-CNN의 경우 instance segmentation을 위해 정확한 위치가 중요해 RoI Align을 사용한다.
이를 통해 10% 에서 50% 까지 정확도를 향상시킬 수 있었다고 한다.
또한, 연구진들은 mask 예측과 class 예측을 분리하는 것이 필수적임을 발견했다.
class 예측 후 해당 class에 mask를 씌우는게 아니라 class 예측 후 그 안에서 mask를 생성하는 방법이 효과적이라고 한다.
2. Related Work
2-1. R-CNN : Region-based CNN
각 RoI에 독립적으로 convolution network를 평가한다.
RoIPool을 사용해 속도, 정확도가 향상되었다.
2-2. Instance Segmentation
class와 mask 예측을 병렬적으로 수행하며 instance를 우선으로 설정한다.
3. Mask R-CNN
여기서는 간단하게 추가된 내용을 설명하며 Mask R-CNN 모델의 핵심 요소를 소개한다.
Faster R-CNN은 class label, bounding-box라는 2개의 결과를 도출한다.
Mask R-CNN은 여기에 object mask라는 하나의 결과를 더 추가한다.
이는 다른 두 가지 결과들과 분리되어 있으며 더 많은 공간 정보를 요구한다.
- Faster R-CNN

Faster R-CNN은 두 가지 단계를 가진다.
첫 단계는 Region Proposal Network(RPN)이라 불리며 객체 후보에 대해 bounding box를 제안한다.
두 번째 단계는 첫 단계의 후보들로부터 RoI Pool을 사용해 특징을 추출한 후 분류, 회귀를 수행한다.
- Mask R-CNN

Mask R-CNN은 위의 두 단계를 동일하게 채택하며 두 번째 단계에서 각 RoI에 대해 binary mask도 output으로 출력한다.

각 RoI의 multi-task loss는 위 L 식과 같이 정의한다.
L_cls : 클래스 분류 loss
L_box : bounding-box loss
L_mask : mask branch의 mask loss
L_mask는 Km^2 차원의 output을 가지는데 이는 K(클래스 개수)개의 m x m의 binary mask를 출력한다.
pixel별 sigmoid를 적용하고 L_mask를 average binary cross-entropy loss로 정의한다.
이를 통해 모든 class, mask를 경쟁 없이 생성할 수 있다.
- Mask Representation

Mask는 공간 정보를 담고 있어 pixel to pixel로 대응하는 FCN을 이용한다. 이를 통해 공간 정보 손실 없이 m x m 크기의 mask를 예측 가능하며 이 경우 더 적은 파라미터 수로 정확도를 높일 수 있다.
FCN을 잘 적용하기 위해 RoIAlign layer를 개발했다.
- RoIAlign

기존 RoIPool의 경우 RoI에서 small feature map을 추출하기 위한 작업이다.
그러나 quantization 과정에서 RoI와 특징들 간 misalignment가 발생해 mask에 큰 영향을 끼친다.
이를 위해 RoI Align을 제시했다.


Roi Align의 경우 bilinear interpolation을 사용해 정확한 값을 계산 후 결과를 max 또는 평균을 내는 방식이다.
그리고 quantization은 수행되지 않는다.
- Network Architecture

왼쪽 그림은 Faster R-CNN고 ResNet을 이용한 백본에 mask branch를 추가한 것이다.
오른쪽 그림은 Faster R-CNN과 FPN을 이용한 백본에 mask branch를 추가한 것이다.
백본에 따라 head의 구조가 달라지는 것을 확인할 수 있다.
3-1. Implementation Details
- Training

- ground-truth IoU가 0.5 이상이면 RoI는 positive 이외는 negative
- L_mask는 positive RoI에만 적용
- 이미지는 800 픽셀
- 각 이미지에는 N개의 샘플링된 RoI 있음
- N(sample RoI)은 백본이 C4인 경우 64개, FPN인 경우 512개
- mini batch : 16
- epoch : 160000
- lr : 0.02
- weight decay : 0.0001
- momentum : 0.9
- Inference


- C4의 경우 proposal 300, FPN의 경우 1000개 정도 제안
- box 예측 후 score 점수 높은 100개 box에 대해 mask branch 적용
- RoI당 K개의 mask를 예측할 수 있지만 여기서는 K번째 mask만 사용
- K는 classification branch에서 예측된 클래스
- output은 RoI 사이즈로 바꾸고 0.5 기준으로 binarized 한다.
4. Experiments : Instance Segmentation
4-1. Main Results


COCO 데이터셋에 적용한 결과 좋은 성능을 보였다.
이외에도 다양한 경우에 대해 결과 비교를 진행한다.
5. Mask R-CNN for Human Pose Estimation

사람 자세 추정에도 쉽게 확장 가능하다.
논문 리뷰
- 읽게 된 이유
옷을 탐지해 옷의 스타일을 추출하고 이를 통해 사용자에게 맞춤형 옷을 추천해주는 프로젝트를 진행했었다.
당시 옷을 탐지하는 과정에서 Mask R-CNN을 사용했는데 정확히 알고 사용한 것이 아니라 공부해보고 싶었다.
- 느낀 점
Fast R-CNN과 같이 미리 알면 좋을 내용의 논문들을 읽지 않고 해당 논문을 읽었다보니 먼저 공부하고 시작했으면 어땠을까 하는 아쉬움이 남는다.
참고 문헌
'Artifical Intelligence' 카테고리의 다른 글
| [논문 리뷰] MiVOLO : Multi-input Transformer for Age and Gender Estimation (2) | 2024.07.06 |
|---|---|
| [논문 리뷰] VGGNet : Very Deep Convolutional Networks for Large-Scale Image Recognition (2) | 2024.01.03 |
| [논문 리뷰] ResNet : Deep Residual Learning For Image Recognition (2) | 2024.01.01 |
| [딥러닝] Sequential 모델 사용 예제 (0) | 2023.07.30 |
| [딥러닝] 퍼셉트론 기초 : 활성화 함수, 순전파, 역전파 (0) | 2023.07.26 |