[논문 리뷰] Mask R-CNN

SimBa's avatar
Feb 10, 2025
[논문 리뷰] Mask R-CNN
  • 객체 탐지를 효율적으로 수행하고, 동시에 개별 객체에 대해 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)에서 수행
notion image
 
 
  • 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.
      notion image
    • 결론 : class와 mask의 예측을 완전히 분리
  • Mask Representation
    • mask는 input object의 spatial layout(공간적 구조)을 인코딩함
    • → class labels나 box offset처럼 단순히 짧은 출력 벡터로 변환되는 것이 아니라, 픽셀 단위의 spatial feature를 유지해야 함
    • 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 추가!
  • 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를 야기
        • → 이를 해결하기 위해 RoIAlign layer 제안
    • RoI boundary나 bin의 quatization을 피함
      • 즉, 대신 사용
      • RoI bin에서 정규적으로 sampling된 네 개의 위치에서 input feature의 정확한 값을 bilinear interpolation을 사용하여 계산 → 결과 합산 (max or average)
      • → 즉, quantization을 하지 않음
        notion image
      💡
      [RoIAlign과 bilinear interpolation]
      • bilinear interpolation (이중선형 보간법)
      notion image
       
      • RoIAlign
      notion image
  • 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
      • notion image
 

3.1 Implementation Details

  • Training
    • Fast R-CNN과 동일하게 RoI가 IoU 값이 0.5 이상 → positive → 해당 RoI를 객체로 인식하고 학습에 사용 ( 사용)
    • → 즉, RoI가 ground-truth box와 얼마나 겹치는지를 기준으로 판단
    • 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
  • 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)
 
  • 결과
notion image
 
 

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 문제임
notion image
Share article

심바