논문 제목: Mask R-CNN
Mask R-CNN은 object detection을 위한 기존의 Faster R-CNN에 각각의 RoI(Region of Interest)의 segmentation masks를 예측하는 branch를 추가한 방법이다. Mask branch는 pixel-to-pixel 방법으로 masks를 예측하기 위해 작은 FCN(Fully Convolution Network)로 되어있고, 약간의 연산 overhead만 추가된다. Mask R-CNN은 주어진 Faster R-CNN 프레임워크를 통해 쉽게 구현하고 학습가능하다.
Mask R-CNN은 Faster R-CNN의 확장이지만, 좋은 성능을 위해 mask branch를 적절하게 구성해야 한다. 먼저, Faster R-CNN은 RoIPool을 사용하므로 pixel-to-pixel alignment에 적당하지 않다. 이러한 misalignment를 Mask R-CNN에서 해결하기 위해 논문의 저자들은 정확한 공간적 위치를 보존하는 RoIAlign을 제안한다. 또한, 각각의 class에 따라 독립적으로 binary mask를 예측하는 것 즉 mask와 class 예측을 분리하는 것이 중요하다는 것을 발견했다.
Mask R-CNN은 매력적인 부가기능 없이, COCO instance segmentation과 object detection benchmark에서 기존의 sota 모델의 성능을 능가했다. 또한 pose estimation과 같은 다른 task에서의 좋은 성능으로 일반화 능력을 보여줬다.
사진 1. Framework
Faster R-CNN은 2-stage로 구성되있다. 첫번째 stage는 RPN(Region Proposal Network)로 객체 bounding box들의 후보를 제안한다. 두번째 stage는 Fast R-CNN으로 RoIPooling을 적용해 각각의 후보 box별로 classification과 bounding-box regression을 수행한다. 두 stage에서는 공유된 feature를 사용한다.
Mask R-CNN은 Faster R-CNN과 같은 두 단계 구조를 갖으며 첫번째 단계(RPN)는 동일하다. 두번째 단계에서는 기존의 class와 box offset예측과 함께 추가로 각각 RoI에 대해 binary mask를 출력한다.
각각의 RoI sample에 대해 multi-task loss를 다음과 같이 정의한다.
classification loss 와 bounding-box loss 는 Fast R-CNN과 동일하다. Mask branch는 각각의 RoI에 대해 -dimensional 출력으로 개의 resolution의 mask를 갖는다. 여기서 는 class의 개수이다. 해당 출력에 pixel별 sigmoid를 적용하고, 를 average binary cross-entropy loss로 정의한다. 이와 같이 정의된 를 통해 네트워크는 모든 class에 대해 masks를 생성하고, mask와 class 예측을 분리한다. Pixel별 softmax와 multinomial cross-entropy loss를 사용한 기존의 방법들과 다르며, 실험을 통해 저자들이 제안한 방법이 더 좋은 성능을 보여준다.
Mask는 입력 객체의 공간적 개요를 담고(encode) 있다. 따라서, class labels와 box offsets과 같이 vector로 불가피하게 collapsed되는 것과 다르게, 마스크의 공간적인 구조를 추출하는 것은 convolution을 통해 자연스럽게 가능하다. Mask 예측을 위해 FCN을 사용해서 mask branch의 layer들은 명시적인 의 객체의 공간적인 개요를 유지할 수 있다. Mask 예측을 위해 vector 표현을 사용하는 경우 공간적 정보의 부족이 생기고, fully-connected layer를 사용하므로 학습 가중치의 개수가 늘어난다. 따라서 FCN을 통해 mask를 예측하는 경우 더 적은 학습 가중치로 더 좋은 성능을 얻을 수 있다.
RoIPool은 각각의 RoI로 부터 작은 크기의 feature map(e.g., )를 추출하는 연산이다. Feature map을 이산적으로 세분하기 위해 실수로 되어 있는 RoI는 먼저 quantize(양자화)된다. 양자화된 후 각각의 영역이 미리 지정된 크기에 맞게 영역이 나눠지고 각각에 영역에 pooling 연산을 수행한다. Quantization(양자화)은 예를 들자면 연속적인 좌표 에 대해 적용한다. 이때, 은 반올림 연산이다. 이러한 양자화는 RoI와 추출된 특징(features)의 misalignment를 야기한다. 이러한 misalignment는 translation invariant한 classification에서는 robust하지만, 픽셀별 정확성이 필요한 경우 큰 부정적인 영향을 미친다.
이러한 문제를 해결하기 위해 저자들은 RoIAlign을 제안한다. 이는 harsh quantization을 없애고, bilinear interpolation을 사용해 추출된 특징에 적절하게 align되게 한다.
다음 사진 2,3 (출처)을 통해 RoIPool과 RoIAlign의 차이를 쉽게 이해할 수 있다.
사진 2. RoIPool
사진 3. RoIAlign
사진 4. Architecture
Backbone network로 50 또는 101 layers의 ResNet과 ResNext를 사용했다. Faster R-CNN의 원래 구현과 같이 ResNet의 4번째 단계의 마지막 convolution layer로 추출된 feature를 사용한다. 또한 FPN(Feature Pyramid Network)의 구조를 사용해서 다른 단계들에서 크기에 따른 RoI features를 추출해서 사용한다. FPN 여부에 따라 head 부분의 구조에서 차이가 존재하며 위의 사진 4를 통해 확인할 수 있다.
사진 5. result
위의 사진5를 확인하면 Mask R-CNN이 segmentmask끼리 겹치지 않고 class에 맞게 분리되는 것을 확인할 수 있다.
표 1. Ablation experiments
논문의 저자들은 여러 ablation experiments를 진행했다.
(a). Backbone architecture
(b). Sigmoid(binomial) vs Softmax(multinomial)
(c),(d). RoIAlign vs RoIPool
(e). Structure mask branch
결과는 위의 표1과 같다.
글 중간에 출처를 밝히지 않은 그림 및 표의 출처는 references 중에 있습니다.