Segmentation, 그 중 instance segmentation(object detection+ semantic segmentation) 을 위한 모델이다
Faster RCNN처럼 두가지 단계를 거쳐 학습된다. RPN
Faster RCNN은 피쳐맵을 RPN에 넘겨서 region of interest를 얻고, 이걸 roi pooling 시켜서 고정된 크기의 피쳐맵으로 다시만들어서 fc layer에 넘겨주는 방식. 여기에 bounding box regression branch랑 classification branch를 달아서 바운딩박스 offset이랑 클래스 label이 예측됨
그럼 Mask RCNN은 ?
Faster RCNN이랑 거의 동일한데, ROI pooling 말고 roi align을 사용했다는 점과, segmentation을 위한 mask branch 를 하나더 평행하게 추가했음. 그리고 faster rcnn는 fc layer에 태웠는데, segemntation task는 spatial layout도 중요하니까 fc layer 말고 conv layer에 태웠다는 점이 다른 점인 것 같음.
이게 ROI ALign인데, 기존 ROI pooling은 quantization 문제 등, faster rcnn에서 detection에 쓰이기에는 너무 괜찮은 알고리즘이지만, 픽셀단위가 중요한 segmentation task에서는 이 ROI pooling에서의 qunaitzation 하는 아이디어가 너무 치명적인 단점이었음. 그래서 정확한 위치를 최대한 보존할 수 있는 ROI align 아이디어가 나옴.
ROI 영역을 pooling 레이어의 크기에 맞추어 등분하고, 각 grid에 sample 포인트를 잡아, 하나의 샘플포인트를 기준으로 가까운 grid 4개에 대해 bilinear interpolation을 하는 방법.
그래서 모든 샘플포인트에 대해서 bilinear interpolation을 해주면 한 영역에 값이 4개가 생기는데 여기서 average pooling을 해주는 방식.
참고로 이것도 differentiable하지 않다는 문제가 있어서 나중에 DETR에서 나오게될 Bicubic Interpolation에서는 이 문제를 더 잘 해결했음..
모델 아키텍쳐인데, 회색 하이라이트 된 부분이 Faster RCNN. 여기에 mask rcnn은 추가로 mask를 위한 branch를 하나 더 달아줬다.
결과
성능+ ablation study
당연한 결과지만, 네트워크가 깊을수록 성능이 더 좋았고, ROI align을 한게 ROI pooling등을 사용한것보다 성능이 좋았음. Mask branch 도 MLP보다는 FCN이 성능이 더 좋게 나옴.