이 논문은 object detection 문제를 해결하기 위한 접근법으로써 anchor를 사용하지 않는 구조를 제안합니다. Object detection과 instance segmentation의 주류 기법(Mask R-CNN, RetinaNet, SSD 등)은 대부분 anchor를 기반으로 동작하는데, anchor 디자인하는데 드는 수고가 만만치 않고 여기서 발생하는 계산상의 오버헤드도 크기 때문입니다. 요점은 각 픽셀에서 bounding box의 모서리까지 거리를 regress하는 것인데, 사실 이 논문에서 완전히 처음 제안된 방식은 아닙니다. Face detection에서 UnitBox, text detection에서는 EAST가 이런 방식을 사용했지만 domain-specific한 알고리즘이었고 몇 가지 문제가 있었습니다. 본 논문에서는 이러한 문제를 지적하며 해결하는 방법을 제안, 단순하고도 높은 성능을 보이는 알고리즘을 제시합니다.
Introduction
Motivation
Object detection 알고리즘들은 대부분 anchor를 쓰는 것을 기본으로 한다. 하지만 anchor를 쓰는 것은 문제가 많다. 우선 anchor의 숫자와 크기, aspect ratio등이 성능에 중대한 영향을 미치는 hyperparameter이다. 따라서 이를 매우 세심하게 디자인해야 하는 수고가 따른다. 이것을 성공적으로 했다고 하더라도, 다른 물체의 크기 분포를 가지는 데이터셋에서 잘 맞지 않기 때문에 generalization ability가 떨어지는 문제가 있다. 또한 high recall을 위해 dense하게 디자인된 너무 많은 anchor 때문에 negative proposal이 positive proposal의 수를 압도하는 imbalance 문제, 모든 anchor box와 gt box에 대한 IOU 계산으로 메모리 사용량이 너무 큰 문제가 있다.
Contribution
Anchor와 proposal을 사용하지 않는 알고리즘을 제안함으로써, design parameter를 줄였다. 전체적인 구조가 심플해졌을 뿐 아니라 anchor box와 ground-truth box간의 IOU 계산을 제거하여 메모리 사용량이 거의 2배로 줄었다.
모델이 FCN 구조를 가지게 되었으므로 semantic segmentation 등에서 아이디어를 차용할 수 있다.
Proposed Method
Fully Convolutional One-Stage Object Detector
각 픽셀로부터 그 픽셀을 포함하는 gt box의 네 변까지 거리를 예측하는 regression을 수행한다.
점 (x, y)의 regression target은 아래와 같이 표현할 수 있다.
Classification은 multi-class classifier를 학습하는 대신 binary classifier를 여러 개 학습한다.
Loss function은 아래와 같다. L_cls은 focal loss이고 L_reg은 UnitBox에서 제안된 IOU loss이다.
Inference는 p > 0.05인 픽셀을 positive sample로 하여 regression target을 구하는 것과 반대 과정을 통해 bounding box를 구한다.
Regression target은 항상 양수이므로, regression branch 출력은 exp(x)로 매핑한다.
Multi-level Prediction with FPN for FCOS
FPN과 같이, 서로 다른 크기의 object는 다른 level의 feature map으로부터 예측한다. Feature map은 P3~P7까지 있다. P3, P4, P5는 backbone에서 나온 것이며 여기서 추가로 stride=2 convolution을 통하여 P6, P7을 생성한다. 이들은 각각 stride 8, 16, 32, 64, 128을 가진다.
서로 다른 크기의 anchor box를 다른 feature level에 할당하는 anchor-based detector와는 다르게, 여기서는 bounding box regression의 범위를 직접 제한한다. 각 feature level i는 최대 regression 범위인 m_i=0, 64, 128, 256, 512, inf를 가지며, regression target (l, t, r, b)의 최대 값이 m_i보다 크거나 m_i-1보다 작으면 해당 feature level에서는 regression을 하지 않는다.
Anchor-free 방식의 문제점은 어떤 픽셀이 겹치는 두 개 이상의 물체에 동시에 속할 때 regression을 어떤 물체를 기준으로 할 것인가 하는 ambiguity가 생기는 것인데, 보통 이런 경우 두 물체의 크기 차이가 크고 본 논문에서 제시한대로 다른 feature level에서 다른 크기만을 regress하기 때문에 문제가 대부분 해결된다.
Feature level들은 head를 공유하여 파라미터 갯수를 줄이고 성능을 더 높인다. 하지만 다른 level은 다른 크기의 물체를 regress하므로 head를 완전히 같게 하는 것은 좋지 않다. 따라서 regression branch에서 exp(x)를 쓰는 대신 trainable scalar s_i를 도입하여 exp(s_i * x)를 사용한다.
Center-ness for FCOS
위의 방식대로 했을 때 여전히 anchor-based 알고리즘과 갭이 존재하는데, failure case 분석 결과 물체 가장자리에서 생성된 low-quality prediction들이 많은 것을 발견했다.
이를 해결하기 위하여 classification branch와 parallel하게 1-layer의 브랜치를 더하여 "center-ness"를 예측하도록 하였다. 어떤 픽셀로부터 타겟의 regression target을 l*, r*, t*, b*라 할 때 center-ness는 아래와 같이 정의된다.
Inference를 할 때에는 classification score에 예측된 centerness를 곱하여 최종 score를 얻는다. 즉 centerness는 물체 중심에서 벗어난 픽셀들의 score를 감소시켜 NMS에서 더 좋은 결과를 얻도록 한다.
Experiment
Details
Dataset: COCO trainval35k (135k images) for training, test_dev for evaluation
Model: ResNet-50 backbone, 다른 학습 파라미터(SGD 등)은 일반적인 방식을 따름
Inference: RetinaNet과 같은 방식, hyperparam을 사용하여 post-processing 함.
Multi-level Prediction with FPN
Anchor를 사용하지 않음으로써 발생할 수 있는 문제는 stage가 높을 수록 stride가 너무 크기 때문에 모든 물체를 커버하지 못하여 BPR(best possible recall)이 낮을 수 있다는 것이다. 하지만 anchor-based의 RetinaNet과 비교할 때 BPR에서 큰 차이가 없으며, Table 4에서 보다시피 실제 실험결과에서는 AR이 오히려 더 높기 때문에 이는 걱정하지 않아도 된다.
또 다른 문제는 ambiguous sample의 수가 많을 수 있다는 것인데, 일반적인 방식으로는 ambiguous sample의 비율이 23.16%나 되지만 FPN의 각 feature level에 다른 크기의 물체만 할당하는 방식 덕분에 7.14%까지 줄었다. 논문에서 제안하는 방식에서는 같은 클래스의 물체가 겹쳐서 ambiguous sample이 된 경우에는 regression에서 문제될 것이 없으므로, 이를 제거하면 그 비율이 3.75%까지 낮아진다. 이는 전체 성능에 큰 영향을 주지 않는 수치일 것이다.
FPN을 사용하여 multi-level prediction을 하면 AP가 거의 두 배가 된다.
With or Without Center-ness
Centerness를 사용한 모델은 그렇지 않은 모델에 비해 AP가 3%가까이 높다. Centerness의 효과를 확인하기 위하여 inference를 할 때에 prediction 대신 ground-truth centerness를 사용한 실험에서 AP가 42.1로 나온 것을 볼 때 아직 성능 향상의 가능성이 많이 남아 있다.
FCOS vs. Anchor-based Detectors
FCOS는 마지막 prediction layer를 제외하고 모두 GN 사용, C5 대신 P5에서 P6,P7을 생성하여 약간 더 높은 성능을 얻었다. 하지만 이런 차이가 없을 때에도 이미 RetinaNet보다 높은 성능을 얻었는데, 심지어 9배나 더 적은 샘플과 2배나 작은 메모리 사용량으로 이것이 가능했다. Hyperparameter의 수가 적지만 learning rate, NMS threshold와 같은 것들은 RetinaNet에서 가져왔는데 이것을 anchor-free method에 더 optimize한다면 더 나을 수 있을 것이다.
FCOS가 overlapped box에서 성능이 나빠지는지 확인하기 위하여 COCO minival 데이터셋에서 3,986 장의 이미지를 뽑아 minival_overlapped 데이터셋을 만들었다. 이 데이터셋의 이미지들은 최소한 한 개의 겹치는 box를 포함하고 있고, 이 데이터셋에 포함된 box들 중 87%는 서로 겹치는 것이다. 여기서도 FCOS는 RetinaNet보다 높은 성능을 보여준다.
Comparison with State-of-the-Art Detectors
Faster R-CNN, RetinaNet, CornetNet 등 대부분의 알고리즘보다 성능이 높다. 가장 가까운 것은 CornetNet인데, 이것은 backbone도 resnet이 아니라 hourglass를 사용하고 post-processing이 복잡한 단점이 있다. 그에 비해 FCOS는 훨씬 단순하면서도 강력한 성능을 준다.
Extensions on Region Proposal Networks
기존 two-stage detector의 RPN을 FCOS로 대체한 결과 RPN의 recall에서 9%나 되는 향상을 얻었다.
Conclusions
본 논문에서는 anchor-free, proposal-free detector를 제안하였습니다. Anchor가 없음으로 인해 design complexity가 크게 줄어들고, anchor, proposal과 target의 매칭을 위해 필요했던 IOU 계산이 생략되어 GPU 메모리 사용량도 거의 절반으로 줄어들었습니다. Anchor-free 방식의 문제점인 ambiguity sample은 FPN의 multi-level feature를 사용하여 각 스케일을 다른 level에 할당하는 방식으로 잘 해결되었습니다.
Share article