개요
기존 RetinaNet에서 수행하던 classification과 bounding box regression에 더해 instance mask 를 예측하는 task를 추가하여 성능향상을 이끌어낸 논문이다.
Motivation
maskrcnn 에서 region proposal과 bounding box prediction 과정에서 다양한 head 를 추가하여 성능 향상을 만들어낸 것에 영감을 받아 one-stage detector 에도 비슷한 방식을 시도하게 되었다고 한다.
Contribution
- 기존 RetinaNet 구조에서 mask prediction을 위한 head 를 추가하여 multi-task learning을 통해 성능을 개선
- 기존 Smooth L1 Loss 의 하이퍼 파라미터 값에 따른 성능 차이를 개선하기 위해 Self-Adjusting Smooth L1 Loss 를 제안
- mask prediction 과정에서 nms 이후 top-N개의 박스와 gt 박스를 proposal set으로 사용하도록 하여 hard example을 학습에 추가로 활용하는 방법을 제안
현재 RetinaNet 기반의 구조를 가지는 EfficientDet 에서 마주하고 있는 극단적인 크기와 비율을 가지는 물체(예: 여권의 코드 부분)를 잘 찾지 못하는 문제를 해결하기 위해 적용할 수 있는 가장 빠르고 간단한 방법이라고 생각된다. 이 방법을 적용했을 때 성능이 나쁘지 않다면, FCOS 기반으로 구현된 CenterMask 역시 실험해볼만 하다.
RetinaMask 는 현재 maskrcnn-benchmark에 구현된 RetinaNet을 베이스로 하여 구현이 되어있고, detectron2로는 포팅이 되지 않은 상태이다.
RetinaMask
Best Matching Policy
일반적으로 IOU > 0.5 인 경우 positive, IOU < 0.4 인 경우 negative 로 활용. 하지만 이러한 방식은 극단적인 크기와 비율을 가지는 물체에 대해서는 매칭이 전혀 이루어지지 않을 가능성이 있다는 문제를 지적
IOU threshold를 바꾸면서 실험을 해본 결과 조금이라도 anchor와 겹치는 모든 box를 positive 로 활용할 때 가장 성능이 좋았다고 한다. 저자들은 threshold를 0으로 하고 nms를 적용하면 중복되는 박스가 줄어들어서 이러한 결과가 나타났다고 주장한다.
Self-Adjusting Smooth L1 Loss
Smooth L1 loss는 단순히 L2 loss 를 적용하는 대신 입력의 크기에 따라 L1 과 L2를 선택적으로 적용하는 방식이다.
여기서 저자들은 값이 하이퍼 파라미터로써 성능이 heuristic 에 근거한다는 점을 지적한다.
이러한 문제를 다루기 위해 학습이 진행됨에 따라 값이 적절한 값을 가지도록 minibatch의 mean 과 variance 를 모맨텀과 함께 적용하여 계산한다.
추가적으로 의 범위를 제한하기 위해 를 통해 최대값을 지정해준다. 결과적으로 Smooth L1 과 Self-Adjsuting Smooth L1 은 다음과 같은 차이를 가지게 된다.
Mask Prediction Module
기존 RetinaNet 에서 예측한 bounding box 를 mask proposal 로 사용한다. mask proposal은 크기에 따라 서로 다른 레이어에 분배되며, 모듈에서는 해당 레이어의 feature map과 분배된 mask proposal을 사용하여 mask 예측을 수행한다.
proposal을 레이어에 분배할 때 사용한 식은 위와 같다. 는 FPN 레이어의 인덱스를 나타내며, width, height로 결정되는 넓이에 따라 다른 레이어가 선택된다. 너무 작거나 큰 경우에는 각각 가장 처음과 마지막 레이어의 feature map을 사용한다고 한다.
bounding box 예측은 RetinaNet과 동일하게 을 사용하고 mask 예측은 실험 결과 더 많은 feature map을 사용해도 성능이 좋아지지 않아서 만 사용했다고 한다.
이후 각각의 feature map과 proposal에 대해 ROI Align을 적용한 뒤 subnet 을 거쳐 마스크를 생성한다. post-processing을 통해 bounding box를 생성한 feature map이 아닌 다른 feature map 을 사용하여 mask를 생성하는 부분은 잘 이해는 안되지만 신선한 것 같다.
Training
기본적인 세팅은 RetinaNet과 동일하고, 마스크 모듈의 입력으로 bounding box 예측 결과 외에 gt box를 추가로 사용하는 트릭을 적용하였다. gt box를 추가했을때와 안했을 때를 비교한 실험이 없어서 정확하게 어떤 영향을 미쳤는지는 알 수 없다.
Loss의 경우 classification 은 Focal Loss, bounding box는 본 논문에서 제안한 Self-Adjusting Smooth L1 을, mask는 특별한 언급이 없는 걸 보아 mask r-cnn 과 동일하게 Binary Cross Entropy를 사용한 것으로 보인다. 최종적으로 사용하는 loss는 3가지 손실을 합친 이 된다.
Experiment
Self-Adjusting Smooth L1 Loss
값을 고정했을 때보다 adjusting 을 적용했을 때 더 성능이 좋다. 정확한 값을 지정하는 대신 최대값을 통해 범위만 지정해주기만 해도 성능이 더 좋아진다는 점에서 의미있는 결과라고 생각된다.
Multi-Task Training with Mask Prediction
Base 는 object detection 만을 학습했을 때의 성능, 은 n ~ m 번째 feature map 에 대해 mask module을 추가로 학습시켰을 때의 결과를 나타낸다.
와 의 결과를 비교해보면 bounding box만 학습시키는 것보다 mask를 함께 학습시키는 것이 더 좋은 성능을 보여주는 것을 확인할 수 있다.
, 를 비교해보면, 더 많은 feature map을 사용해도 성능이 그렇게 좋아지지는 않는다는 것을 알 수 있다.
Comparison to RetinaNet
bounding box 인식 성능은 기존 RetinaNet 보다 모든 면에서 더 좋다.
mask 인식의 경우 평균적으로 약 10% 정도의 시간이 더 필요하다. 저자는 이 수치가 GPU 아키텍쳐의 변화에 따라 더 줄어들 수 있다는 것을 특히 강조한다.
Comparisons to the state-of-the-art methods
Object Detection
Instance Segmentation
Share article