https://arxiv.org/abs/1703.06870
Mask R-CNN
We present a conceptually simple, flexible, and general framework for object instance segmentation. Our approach efficiently detects objects in an image while simultaneously generating a high-quality segmentation mask for each instance. The method, called
arxiv.org
안녕하세요, 이번 글에서는 Kaiming He의 Mask R-CNN(2017) 논문 리뷰를 해보도록 하겠습니다.
1. introduction
Object Detection: 이미지 내 여러 객체를 식별하고, 각각을 바운딩 박스를 사용하여 위치를 지정
Semantic Segmentation: 각 픽셀이 어떤 카테고리에 속하는지 분류(같은 클래스의 객체들 간의 구분은 하지 않음)
기존 baseline system:
- Fast/Faster R-CNN: object detection을 위한 모델
- Fully Convolutional Networks(FCNs): semantic segmentation을 위한 모델, per-pixel softmax & multinomial cross-entropy loss 주로 사용 -> Mask R-CNN의 Lmask와의 차이점
목표: "Instance Segmentation"을 위한 프레임 워크 개발 -> Novelty
이미지 속 객체를 정확하게 detection하면서도 각 instance를 정밀하게 segment 가능한 Mask R-CNN
Faster R-CNN의 확장: segmentation mask를 예측하는 branch를 추가했는데도,
단순하고 유연하고 추론, 학습에 빠름 -> Contribution
2. Faster R-CNN (이전 논문 리뷰가 있으니 간단하게)
region proposal을 위한 모든 연산을 GPU상에서 진행하는 RPN(Region Proposal Network) 제안
<< two-stage 구성 >>
- 첫번째 stage: RPN을 통해 feature map에서 후보 bounding box들 제안
- 두번째 stage: 각 후보 box에 대해 RoIPool을 이용하여 feature들 추출, classification과 bounding-box regression 수행
- 2 ouputs: 클래스 라벨, bounding-box 오프셋
- RoIPool 기법: 정렬 불일치(misalignment) 단점, 양자화(quantize)후 max pooling을 하므로 위치 정보가 왜곡되어 pixel-accurate masks 예측에 문제.
3. Mask R-CNN
차별점:
- 3 ouputs: 클래스 라벨, bounding-box 오프셋, + object mask
- RoIAlign으로 더 finer한 spatial layout
- mask branch: 각각의 RoI에 붙은 작은 FCN
- class branch에서 class를 분류, mask branch에서는 bounding box 안에 클래스에 해당되는 객체를 mask
각 RoI에 대해 Multi-task Loss 사용하여 학습 진행.
- Lcls와 Lbox 는 Faster R-CNN과 동일한 방식으로 계산.
- Lmask:
- mask branch에서 생성된 마스크에 대한 손실을 계산.
- per-pixel sigmoid 적용하여 각 픽셀이 클래스에 해당하는지 아닌지 판단
- binary cross entropy loss로 정답 클래스에 해당하는 마스크에 대해서만 loss 적용.
- class branch와 mask branch를 분리하여 Instance Segmentation 성능 향상에 핵심 역할
- 픽셀 단위(per-pixel) sigmoid를 사용하여 각 클래스 별(per-class) binary mask를 독립적으로 예측
- 클래스 간 경쟁 없어 mask 예측 정확도 향상
4. RoIAlign
- 양자화 과정 제거: [x/16] 대신 x/16으로 (여기서 16은 feature map의 스트라이드, [ ]은 반올림)
- bilinear interpolation을 사용: 각 RoI 구획 안의 4개의 정규 샘플 지점에서 입력 피처의 정확한 값을 계산
- max pooling 또는 average pooling
- 픽셀 정밀도가 요구되는 mask 예측에서 큰 성능 향상
5. Network Architecture
ResNet/ResNeXt(C4), FPN(Feature Pyramid Network)을 backbone으로 사용한 Faster R-CNN에 mask branch 달아서 mask 예측 수행
- ResNet-C4 기반
- 입력된 RoI는 7x7x1024 크기의 피처 맵으로 변환된다.
- 이후, res5 블록을 통해 7x7x2048 크기로 업그레이드.
- average pooling 후, fully connected layers를 거쳐 클래스 분류(class) 및 바운딩 박스(box) 예측을 수행.
- Mask Branch:
- RoI 피처 맵을 받아 14x14x256 크기의 맵으로 변환.
- 이후, 14x14x80 크기의 마스크를 출력(클래스당 하나의 마스크).
- FPN 기반
- 입력된 RoI는 7x7x256 크기의 피처 맵으로 시작.
- 두 개의 fully connected layers를 거쳐 1024 차원으로 변환.
- 이후 클래스 분류 및 바운딩 박스 회귀를 수행.
- Mask Branch:
- RoI 피처 맵을 받아 4개의 3x3 convolutional layers를 통과하며, 크기는 14x14x256으로 유지.
- 이후 업샘플링을 통해 28x28x80 크기의 마스크를 생성.
+ Mask R-CNN for Human Pose Estimation