안녕하세요, 오늘 읽은 논문은 FCOS, Fully Convolutional One-Stage Object Detection 입니다.
FCOS는 앵커 박스를 사용하지 않는 one-stage detector 입니다. 바운딩 박스의 4면으로부터 중심점 까지의 거리(l, t, r, b)를 예측하고, FPN의 각 level마다 거리 (l,t,r,b)를 제한하여 multi-level prediction을 합니다. 또한 낮은 퀄리티의 바운딩 박스를 제거하기 위해 center-ness를 제안합니다.
anchor-based detector의 단점
FCOS는 anchor-based detector에서 발생하는 단점을 개선하기 위해 제안되었습니다.
(1) 디텍션 성능이 앵커 박스의 크기, 종횡비, 개수에 예민합니다. 앵커 박스를 어떻게 설계하느냐에 따라 모델의 성능에 영향을 미칩니다.
(2) pre-defined anchor는 모델의 일반화 성능을 해칩니다. anchor box 크기와 다른 ground-truth를 검출하기가 어렵습니다.
(3) high recall을 위해 많은 수의 anchor box를 사용해야 합니다. 또한 많은 수의 anchor box가 negative로 할당되므로 class imbaliance 문제가 발생합니다.
(4) anchor box와 ground-truth와의 iou를 계산해야 하므로 복잡한 계산과정이 필요합니다.
FCOS
FCOS는 (1) 중심점에서 바운딩 박스의 경계까지의 거리를 예측, (2) multi-lebel prediction with FPN, (3) center-ness 를 제안합니다.
(1) Fully Convolutional One-Stage Object Detection
anchor-based detector은 anchor box와의 offset을 예측하지만, FCOS은 중심점(x,y)부터 예측한 바운딩 박스의 경계까지의 거리를 예측합니다.
만약 (x,y)가 gt(ground-truth) 범위 안에 존재하고, class가 동일하면 positive로 간주합니다. 그리고 (x,y)를 기준으로 바운딩 박스 경계 까지의 거리를 regress 합니다. 만약 (x,y)가 여러 gt안에 존재한다면 ambiguous sample로 간주합니다. ambiguous sample은 뒤에서 설명할 multi-level prediction with FPN에서 처리합니다.
anchor 박스가 존재하지 않으므로 9배나 적은 출력값을 갖습니다.
(2) Loss Function
L_cls는 focal loss를 사용하고, L_reg는 IOU loss를 사용합니다. 논문에서 람다 가중치는 1로 설정합니다.
L_reg 앞에 1 기호는 class > 0인 경우 1, 그렇지 않으면 0을 의미합니다.
(3) Multi-Level Prediction with FPN for FCOS
anchor-based detector은 FPN의 각 level 마다 서로 다른 크기, 종횡비의 anchor box를 할당했습니다. FCOS는 bounding box regression의 범위를 제한합니다.
FPN에 의해 5개의 feature map이 생성됩니다. P3, P4, P5, P6, P7 = {m3=64, m4=128, m5=256, m6=512, m7=무한} 으로 바운딩 박스 regression 범위를 제한합니다. 각 feature map에서 bounding box regression 범위가 m_i > max(l, t, r, b) > m_i-1 를 벗어나면 negative sample로 할당합니다.
이를 통해서 위 그림 처럼 바운딩 박스가 overlab 된 경우, 작은 박스는 p3, 큰 박스는 p6에서 검출됩니다.
(4) Center-ness
Center-ness는 low-quility predicted bounding box를 제거하기 위해 사용합니다.
center-ness는 중심점과의 거리를 정규화합니다. 만약 중심점과 가깝다면 1에 가까운 값, 중심점과 멀리 존재한다면 0에 가까운 값을 갖습니다.
center-ness는 class score와 곱하여 사용합니다. 중심점과 멀리 떨어진 바운딩 박스는 class score 값이 낮아지기 때문에 nms에서 걸러지게 됩니다.
Performance
참고자료