[논문 리뷰] Mask R-CNN
Feb 10, 2025
![[논문 리뷰] Mask R-CNN](https://image.inblog.dev?url=https%3A%2F%2Finblog.ai%2Fapi%2Fog%3Ftitle%3D%255B%25EB%2585%25BC%25EB%25AC%25B8%2520%25EB%25A6%25AC%25EB%25B7%25B0%255D%2520Mask%2520R-CNN%26logoUrl%3Dhttps%253A%252F%252Finblog.ai%252Finblog_logo.png%26blogTitle%3D%25EC%258B%25AC%25EB%25B0%2594&w=3840&q=75)
- 객체 탐지를 효율적으로 수행하고, 동시에 개별 객체에 대해 high-quality segmentation mask을 생성
- Faster R-CNN에 bounding box recognition을 위한 branch에 object mask를 예측하기 위한 branch를 평행하게 추가한 것
1. Introduction
- Fast/Fatser R-CNN (object detection), FCN(semantic segmenatation) → 객체 탐지와 세그멘테이션 분야에서 빠른 학습 및 추론 학습과 더불어 flexibility와 robustness도 제공
- 본 연구에서는 여기에서 instance segmentation을 가능하게 하는 프레임워크를 개발하고자 함
- instance segmentation은 모든 개별적인 객체에 대해 정확한 객체 탐지를 요구하기 때문에 매우 어려운 task임.
→ 따라서, 개별적인 객체를 분류하고, bounding box를 사용하여 localize하는 object detection과 객체 인스턴스를 구분하지 않고 각 픽셀을 고정된 카테고리 집합으로 분류하는 semantic segmentation을 합침
- Faster R-CNN을 확장하여, 각 RoI에 대해 segmentation mask branch (각 RoI에 적용되는 작은 FCN)를 추가
- Faster R-CNN은 pixel-to-pixel alginment가 아님
- 따라서, misalignment를 해결하기 위해 RoIAlign 이라고 불리는 quantization-free layer를 제안
- RoIAlign은 정확한 공강적 위치를 보존
- RoIAlign의 추가로 mask 정확도가 10%에서 50%로 상승
- mask prediction과 class prediction을 분리
- 기존의 FCN은 픽셀별로 multi-class 분류를 함 (segmentation + classification)
- 하지만, 위와 같이 segmentation과 classification을 동시에 진행하니까 instance segmentation에서는 성능이 떨어짐
- 각 클래스별로 독립적으로 개별적인 바이너리 mask를 예측하고, 최종 클래스 결정은 RoI의 분류(branch)에서 수행

2. Related Work
- R-CNN
- 다룰 수 있는 수의 object region에 대해 bounding-box object detection 수행 → conv network로 각각의 RoI에 대해 평가
- Faster R-CNN : Region Proposal Network (RPN) 적용
- Instance Segmentation
- DeepMask
- segment candidate 제안을 학습 → Fast R-CNN에 의해 분류
- recognition 이전에 segmentation이 선행됨 → 느리고 부정확
- 본 연구에서 제안한 방법은 mask와 클래스의 parallel prediction에 기반을 둠 → 더 간단하고 유연
- 최근에는 segment proposal system과 object detection을 합침 → FCIS (fully convolutional instance convolutionally)
- 이 방법은 object class, box, mask 를 동시에 처리
- 근데 오류가 많이 발생하고, 객체의 중복이 많이 발생
- semantic segmentation을 활용
- 동일한 카테고리의 픽셀을 다른 인스턴스로 자름
- 이와 같은 방법은 segmentation-first 전랴을 사용한 방법들이지만, 본 연구의 mask R-CNN은 instance-first 전략을 사용
3. Mask R-CNN
- Faster R-CNN은 candidate object에 대해 두 개의 output을 출력
- class label
- bounding-box offset
- Mask R-CNN은 위의 두 개의 output에서 object mask도 출력할 수 있는 branch를 추가
- Faster R-CNN
- <1 단계> RPN (Region Proposal Network)
- <2 단계> 각각의 candidate box로부터 RoIPool을 통해 특징 추출 → 분류 수행 → bounding-box regression
- Mask R-CNN
- <1 단계> RPN (Region Proposal Network)
- <2 단계 - 1> 각각의 candidate box로부터 RoIPool을 통해 특징 추출 → 분류 수행 → bounding-box regression
- <2 단계 - 2> 각각의 RoI에 대해 binary mask 출력
- 각 RoI에 대해 차원의 출력을 생성
- : 클래스의 개수
- : 각 mask의 해상도
- 각 클래스마다 개별적인 binary mask 예측(해당 클래스에 존재하는 객체가 해당 픽셀이 존재하는가/존재하지 않는가? → binary classification) → 최종적으로 개의 마스크 생성 (binary 니까 sigmoid 사용)
- training loss function : multi-task loss
- : the average binary cross-entropy loss.
- 결론 : class와 mask의 예측을 완전히 분리

- Mask Representation
- mask는 input object의 spatial layout(공간적 구조)을 인코딩함
- Mask R-CNN에서는 각 RoI에서 m*m 크기의 mask를 예측하기 위해 FCN 사용
- 기존 : fc layer에서 mask를 벡터로 변환한 뒤 다시 이미지 형태로 복원 → spatial information 손실
- Mask R-CNN : FCN을 사용하여 픽셀 단위로 mask를 직접 예측 → spatial layout 유지 가능, 더 적은 파라미터, 연산량 적음
- 이와 같은 픽셀 단위의 작업은 RoI(작은 feature map)에서 추출한 특징이 정확한 위치에 alignment를 유지해야 함 → RoIAlign layer 추가!
→ class labels나 box offset처럼 단순히 짧은 출력 벡터로 변환되는 것이 아니라, 픽셀 단위의 spatial feature를 유지해야 함
- RoIAlign
- RoIPool은 각 RoI로부터 작은 feature map을 추출하기 위한 전형적인 방법
- 부동소수 RoI 좌표값을 feature map의 이산적인 수로 양자화 → 양자화된 RoI가 양자화되어 있는 spatial bin으로 나눠짐 → 각각의 bin에 있는 feature value가 집계됨 (by. MaxPoolin)
- 양자화 (quantization)
- 연속적인 좌표 → 를 계산 (16=feature map stride, 반올림)
- bin으로 나눠질 때도, 정수값 유지를 위해 수행
- 근데, 이렇게 연속적인 수를 이산적으로 나타내기 위해 정수로 근사하는 quantization은 RoI와 추출된 특징 간의 misalignment를 야기
- RoI boundary나 bin의 quatization을 피함
- 즉, 대신 사용
- RoI bin에서 정규적으로 sampling된 네 개의 위치에서 input feature의 정확한 값을 bilinear interpolation을 사용하여 계산 → 결과 합산 (max or average)
- bilinear interpolation (이중선형 보간법)
- RoIAlign
→ 이를 해결하기 위해 RoIAlign layer 제안
→ 즉, quantization을 하지 않음

[RoIAlign과 bilinear interpolation]


- Network Architecture
- 전체 이미지에서 특징을 추출하기 위한 convolutional backbone architecture
- ResNet, ResNeXt
- Faster R-CNN에서는 4번째 단계의 마지막 conv layer에서 ReNet-50으로 특징 추출 → ResNet-50-C4
- Feature Pyramid Network (FPN)
- 측면 연결(lateral connecntion)이 있는 top-down architecture를 사용하여 단일 스케일 입력으로부터 네트워크 내 특징 피라미드를 구축
- Faster R-CNN에서 FPN backbone은 다른 level의 특징을 추출
- 특징 추출을 위한 ResNet-FPN backbone은 Mask R-CNN의 정확도와 속도 향상에 기여
- bounding-box recognition(classification, regression)을 위한 network head(최종 결과 출력)
- ResNet-C4 backbone이 ResNet의 5
- ResNet-C4 backbone의 head는 계산 집약적인(computeintensive) ResNet의 5단계 단계를 포함
- FPN의 경우, backbone이 이미 res5를 포함하고 있어 필터를 덜 사용하는 더 효율적인 head를 제공
- 보통, RPN (Region Proposal Network) 이 사용됨
- 결국, 앞의 backbone에서 추출한 특징을 바탕으로 3개의 output을 추출 → classification head, bounding box regression head, mask head

3.1 Implementation Details
- Training
- Fast R-CNN과 동일하게 RoI가 IoU 값이 0.5 이상 → positive → 해당 RoI를 객체로 인식하고 학습에 사용 ( 사용)
- mask target : RoI와 ground-truth mask의 교집합 영역 → RoI가 포함하는 부분만 mask 학습 대상으로 삼음
- image resize
- 짧은 변이 800 픽셀이 되도록 input image의 크기 조정
- mini-batch setting
- 각 이미지에서 개의 RoI를 sampling
- positve : negative = 1:3 → 25%가 실제 객체, 75%가 배경
- batch size = 16
- C4 backbone →
- FPN backbone →
- iteration = 160,000
- learning rate = 0.02 → 120,000번째에서 10배 감소
- weight decay = 0.0001
- momentum = 0.9
→ 즉, RoI가 ground-truth box와 얼마나 겹치는지를 기준으로 판단
- Inference
- C4 backbone → 300개의 RoI 제안
- FPN backbone → 1000개의 RoI 제안
- RoI에 대해 bounding box prediction 수행 → NMS(Non-Maximum Supression) 적용 → 점수가 높은 100개만 선택 → 100개의 bounding box에 대해서만 mask prediction
- Mask branch는 RoI당 개의 mask를 예측할 수 있음 (:클래스 개수) → 이전에 Faster R-CNN의 classification branch에서 예측된 클래스에 해당하는 mask만 사용 (이 외의 mask branch에서 예측한 나머지 클래스들의 mask들은 다 버림)
- 예측된 크기의 마스크는 RoI 크기로 resize → binarization (픽셀 값이 0.5 이상이면 1, 0.5 미만이면 0)
- 결과

5. Mask R-CNN for Human Pose Estimation
- keypoint의 위치를 one-hot mask로 모델링(keypoint가 위치한 단 하나의 픽셀만 1이고, 나머지는 모두 0)하고, mask R-CNN으로 개의 키포인트 유형(ex. 왼쪽 어깨, 오른쪽 팔꿈치) 각각에 대해 개의 마스크를 예측
- 각각의 instance의 개의 keypoint에 대해, target은 one-hot 방식의 binary mask (one-hot 인코딩 형태이기 때문에 한 픽셀만 1이고, 나머지는 0임 → RoI 내에서 정확한 1개의 픽셀만 1이고 나머지는 0이기 때문에, softmax를 사용하여 가장 확률이 높은 픽셀을 예측)
- 각각의 visible keypoint에 대해, 개의 softmax 를 사용하여, cross-entropy loss를 최소화
- 픽셀 단위로 “어딘가 하나의 점”을 골라야 함 → 픽셀에서 하나만 선택하는 multi-class classification 문제임

Share article