Mask R-CNN
먼저 R-CNN, Fast R-CNN, Faster R-CNN, FCN을 읽고 나서 보는 것을 추천함. 앞의 내용들을 파악하였으면 본 내용을 이해하기가 매우 쉽고 구현도 간단한 편
Prerequisites
1. Overview
Contribution
COCO 2016에서 우승, Instance Segmentation의 baseline
FC layer를 사용하지 않고 Fully Convolutional Network만 사용하기 때문에 input image size의 제약이 없고 translation-equivariant가 유지됨. 또한, RoIAlign을 사용하여 정확한 spatial location을 유지하므로 misalignment가 없음
Instance Segmentation
semantic segmentation은 각각의 클래스만 bounding box 대신 pixel 단위로 구별하는 것이고, instance segmentation은 각 클래스 내에서 검출된 여러 개의 instnace를 구분함 (예: Person 1, ..., Person 5)
Object detection 뿐 아니라 각 클래스별로 segmentation까지 해 보겠다는 것이 목표
Main idea: Classification 및 Bounding Box regression은 Faster R-CNN에게 맡기고 각 bounding box에 mask만 씌워 주면 instance segmentation이 가능함 → Faster R-CNN + FCN
FCN과의 차이
FCN은 pixel-level classification이지만, classification은 Faster R-CNN이 대신 해줌
FCN은 모든 픽셀에 대한 softmax (per-pixel softmax) 및 multinomial cross entropy loss 필요 → classification과 segmentation이 decoupling되지 않음. 즉, 다른 클래스를 고려하면서 mask도 훈련해야 함
Mask R-CNN은 per-pixel sigmoid과 binary loss로 대체 가능 → classification과 segmentation이 decoupling됨 → 다른 클래스 고려 없이 binary mask만 예측하면 되므로 성능이 향상됨
2. Network
RoIAlign
기존 RoIPool은 floating 값을 양자화하기 때문에 정보 손실 발생 → classification에는 이러한 misalignment 이 큰 영향을 주지 않으나, pixel 단위로 정확한 mask를 예측하는 데는 좋지 못함
[As-Is] 각 ROI로부터 7x7 small feature map 생성을 위해 stride=16으로 [x/16]으로 ([.]: 반올림) 양자화 수행
[To-Be] x/16으로 그대로 계산하고 각 ROI 영역에 대한 4개의 sample point에 대해 bilinear interpolation 수행
왼쪽: RoIPool, 오른쪽 RoIAlign
RoI에서 얻어내고자 하는 정보는 박스 안의 동그라미 점(sample point)으로 각 bin에 4개의 sampling point 존재
각 point는 아래 그림의 화살표로 표현된 방법, 즉 bilinear interpolation을 통해 산출
Architecture
ResNet-50/101, FPN(Feature Pyramid Network), ResNeXt-50/101 을 backbone 아키텍처로 사용
3. Experiments
Dataset: MS COCO (80 classes, 80K 훈련 데이터셋, 3K 검증 데이터셋, 5K 테스트 데이터셋)
Metric: AP(Average Precision), AP at IOU 0.5, 0.75
이미지 사이즈는 width, height 중 더 작은 쪽을 800 pixel로 resize
8 GPUS for 160k iterations w/ 16 minibatches
ResNet-50-FPN 적용 시 훈련에 약 32시간 소요 (0.72s per 16 image mini batch)
ResNet-101-FPN 적용 시 훈련에 약 44시간 소요
Learning rate: 0.02, 120k iteration에서 10%씩 감소
Weight decay 0.0001, Momentum: 0.9
(a): Backbone 네트워크 깊이가 깊을 수록 더 좋음
(b): softmax+multinomial loss보다 sigmoid+binary loss가 더 좋음
(c): RoIAlign이 좋음
(d): misalignment로 인한 AP 차이를 상세 비교 (RoIPool vs. RoIAlign)
(e): MLP(or FC) 보다 FCN으로 네트워크를 쌓는 것이 더 좋음
References
Last updated