RetinaNet 논문 리뷰

김상현·2021년 12월 16일
1

논문 제목: Focal Loss for Dense Object Detection

Introduction

당시 sota 성능의 object detectors는 R-CNN계열의 detector들과 같은 2-stage detector였다. 물론 YOLO와 SSD와 같은 1-stage detector들이 유망한 결과를 보여줬지만, 정확도 성능은 낮았다. 본 논문에서는 1-stage detector가 Faster R-CNN의 변형(FPN, Mask R-CNN,...)등과 같은 2-stage detector와 같은 성능을 얻기 위해 1-stage detector의 sota accuract를 방해하는 class imabalance를 확인했고, 이를 해결하기 위해 새로운 loss function을 제안했다.

R-CNN과 같은 2-stage detector의 경우 proposal stage(e.g., Selective Search, RPN,...)에서 background sample들을 필터링 하고, 분류 단계에서 sampling heuristics(fixed foreground-to-background ratio(1:3)과 OHEM)을 통해 foreground와 background의 균형을 유지한다. 이와 다르게 1-stage detector들의 경우 엄청나게 많은 객체 위치 후보들(~100k locations)을 처리해야한다. 물론 sampling heuristics를 적용할 수 있으나 학습시 비효율적이다.

본 논문에서는 class imbalance를 다루기 위한 새로운 loss function인 focal loss를 제안한다. 이는 dynamically scaled cross entropy loss로 scaling factor를 이용해 easy example의 경우 down-weight하고, hard example들에 집중하게 한다. 제안된 focal loss의 효율성을 보여주기 위해 ResNet-101-FPN backbone을 기본으로하는 RetinaNet을 제안한다. 해당 모델은 기존의 1-stage, 2-stage detector들의 성능을 능가한다.


Focal Loss

Focal loss는 1-stage detector 학습 시 존재하는 foreground와 background class imbalance 문제를 해결하기 위해 고안됐다.

사진 1. focal loss

이진 분류를 위한 cross entropy(CE) loss는 다음과 같다.

CE(p,y)={log(p)if  y=1log(1p)otherwiseCE(p,y) = \left\{ \begin{array}{ll} -log(p) & {if }\ \ y=1 \\ -log(1-p) & otherwise \end{array} \right.

y{±1}y \in \{\pm1\}은 ground-truth를 나타내고, p[0,1]p \in [0,1]은 모델이 예상한 클래스가 y=1y=1일 확률을 나타낸다. 표기의 편의성을 위해 ptp_t를 다음과 같이 정의한다.

pt={pif  y=11potherwisep_t = \left\{ \begin{array}{ll} p & if\ \ y=1 \\ 1-p & otherwise \end{array} \right.

따라서 CE(p,y)=CE(pt)=log(pt)CE(p,y)=CE(p_t)=-log(p_t).

사진 1에서 파란색 커브(γ=0\gamma=0)는 CE를 나타낸다. 해당 커브를 통해 CE가 쉽게 분류 가능한(pt>>.5p_t >> .5) example들에 대해서도 non-trivial한 정도의 loss를 갖는다는 것을 확인할 수 있다. 많은 수의 easy example들이 합해졌을 때, 작은 loss 값들이 rare class를 압도할 수 있다.

1. Balanced Cross Entropy

Class imbalabce 문제를 다루기 위한 일반적인 방법은 weighting factor α\alpha를 사용하는 것이다. α\alpha는 hyper-parameter로 class 빈도 또는 cross validation을 통해 결정된다. α\alpha-balanced CE는 수식으로 다음과 같다.

CE(pt)=αtlog(pt)CE(p_t) = -\alpha_t log(p_t)

2. Focal Loss Definition

α\alpha-balanced CE는 positive/negitive example들의 균형을 맞춰주지만, easy/hard example들을 구별하지 못한다. 따라서 논문의 저자들은 easy example들을 down-weight하고 hard example들에 집중하게 loss function을 수정했다. 수식은 다음과 같다.

FL(pt)=(1pt)γlog(pt)FL(p_t) = -(1-p_t)^{\gamma} log(p_t)

Modulating(가감) factor인 (1pt)γ(1-p_t)^{\gamma}를 CE에 추가했다. 여기서 γ0\gamma \ge 0는 focusing parameter 이다.

사진 1에 여러 modulating factor에 따른 focal loss가 나와있다. Focal loss의 특징은 다음과 같다.

  1. Example이 잘못 분류(misclassified)되고 ptp_t가 작은 경우, modulating factor는 1에 근접하고 loss는 영향을 받지 않는다. 반면 ptp_t -> 1인 경우, factor는 0으로 근접하고 잘 분류된(well-classified) example들은 down-weighted된다.
  2. Focusing factor γ\gamma는 down-weighted의 정도를 부드럽게(smoothly) 조절한다.

직관적으로 modulating factor는 easy example으로부터의 loss contribution을 감소시키고, example이 낮은 loss를 받는 범위를 늘리다. 이는 사진 1과 논문에 나온 예시를 통해 확인할 수 있다.

실제 실험에서 논문의 저자들은 α\alpha-balanced focal loss를 사용하고, non-α\alpha-balanced form보다 약간의 성능 개선을 확인했다. 수식은 다음과 같다.

FL(pt)=αt(1pt)γlog(pt)FL(p_t) = -\alpha_{t} (1-p_t)^{\gamma} log(p_t)

논문의 저자들은 focal loss의 form은 중요하지 않다고 밝혔다. Appendix를 통해 다른 form이지만 focal loss의 idea를 갖는 loss function을 사용해서도 동일한 성능을 보여줬다. 이 새로운 form의 focal loss를 FLFL^*라 나타내고, 사진 2의 curve와 표 1의 성능 비교를 통해 기존의 focal loss와 동일한 특성과 성능을 갖는 것을 확인할 수 있다. 수식으로 다음과 같다.

xt=yxpt=σ(γxt+β)FL=log(pt)/γx_t = yx \\ p_t^{*} = \sigma(\gamma x_t + \beta) \\ FL^* = -log(p_t^*)/\gamma

사진 2. Curve of focal loss and variants

표 1. Performance comparison between focal loss and variants

3. Class Inbalance and Model Initialization

이진 분류 모델들은 기본적으로 y=1y=1 또는 y=1y=-1에 동일한 확률을 출력하게 초기화된다. 이러한 초기화는 class imbalance가 존재하는 경우 빈도가 높은 class가 loss를 지배하고, 학습 초기 불안정성을 야기한다. 이러한 문제를 해결하기 위해 학습 초기 적은 class(foreground)에 대해 모델에 의해 예측되는 p 값에 prior의 개념을 적용한다. Prior를 π\pi라 정하고, 이를 이용해 적은 class의 example들에 대한 모델의 예상 p가 0.01과 같이 작게 되게 설정한다. 논문의 저자들은 이러한 초기화 방법이 CE와 FL에서 모두 heavy class imbalance 문제의 학습 안정성을 개선시킨다는 것을 확인했다. 해당 초기화의 자세한 방법은 뒤의 "Inference and Training" 부분에서 다룬다.

4. Class Imbalance and Two-stage Detectors

2-stage detector들은 α\alpha-balancing이나 focal loss 없이 학습된다. 대신에 이들은 (1)two-stage cascade 와 (2) biased minibatch sampling을 통해 class imbalance 문제를 다룬다. Focal loss는 이러한 mechanism을 1-stage detectors에서 다루기 위해 고안됐다.


RetinaNet Detector

사진 3. Network Architecture

RetinaNet은 backbone network와 2개의 task-specific subnetworks로 구성된 하나의 통합된 network이다. Backbone network는 convolutional feature map을 추출한다. 첫번재 subnet은 object classification을 수행한다. 두번째 subnet은 bounding box regression을 수행한다. 모델의 구조는 사진 3을 통해 확인할 수 있다.

Feature Pyramid Network Backbone

RetinaNet의 backbone network로 FPN(FPN 논문 리뷰)을 적용했다. FPN의 구조는 사진 3의 (b)와 같다. RetinaNet은 P3P_3에서 P7P_7의 pyramid level들을 사용한다 (PlP_l은 입력 이미지의 1/2l1/2^l의 resolution을 갖고, ll은 pyramid level을 나타낸다). 모든 pyramid level에서 채널의 개수 C=256C=256 이다. RetinaNet의 backbone network는 FPN과 약간의 차이만 있을뿐 거의 동일하다.

Anchors

Anchors는 각각 pyramid level P3P_3에서 P7P_7에 따라 32232^2~5122512^2의 영역을 갖는다. FPN과 같이 {1:2, 1:1, 2:1}의 3 aspect ratio들을 각 pyramid level마다 사용한다. 또한 FPN 보다 denser scale coverage를 위해 기존의 anchors들에 {202^0, 2132^{\frac{1}{3}}, 2232^{\frac{2}{3}}}의 size들을 추가한다. 따라서 Anchor 마다 9개의 anchor box(A=9)들이 존재한다.

각 anchor는 classification target인 KK 길이의 one-hot vector와 box-regression target인 길이 4의 vector가 할당된다. Ground-truth와의 IoU(intersection-over-union)에 따라 anchor의 positive/negative 여부를 나눈다. 이때, positive/negative를 결정하는 threshold는 FPN과 유사하며 논문에 자세히 나온다.

Classification Subnet

Classification subnet은 각 위치에서 A개의 anchor들의 K개의 object class들의 존재 확률(probability of object presence)를 예측한다. Subnet의 parameter들은 모든 pyramid level들에서 공유된다. Classification subnet은 마지막에 sigmoid함수를 통해 각 위치마다 KAKA개의 이진 예측을 출력한다. RPN과 다르게 3×33 \times 3 convs만을 사용해 classification subnet이 더욱 깊고, box regression subnet과 parameters을 공유하지 않는다.

Box Regression Subnet

각 위치마다 각 anchor들은 4개의 relative offset들을 예측하여 출력한다. 기존의 연구들과 다르게 class-agnostic bounding box regressor를 사용해 더 적은 parameter를 사용했고, 동일한 성능을 확인했다. 두 개로 나뉜 subnet을 통해 classification과 box regression은 유사한 구조를 갖지만 다른 parameters로 학습된다.

1. Inference and Training

Inference

Inference는 사진 3에 나와있는 네트워크 구조에 따라 image를 처리한다. 속도를 개선하기 위해 FPN level마다 1k top-scoring 예측들의 box prediction만 decode한다. 여기서 decode란 relative offset을 ground-truth 좌표로 바꾸는 과정을 말한다. 이후 이들을 합친 후 0.5의 threshold로 nms(non-maximum-suppression)를 수행해서 최종 detection 결과를 얻는다.

Focal Loss

Focal loss는 classification subnet의 출력에 적용된다. 논문의 저자들은 실험을 통해 γ=2\gamma = 2, α=0.25\alpha = 0.25로 정했다. Total focal loss는 ~100k anchors의 focal loss의 합으로 계산되고, ground-truth box로 할당된 anchor box들의 개수로 normalized 된다. 이때 모든 anchor box로 normalized 하지 않은 이유는 대부분의 anchor들이 easy negative들이고 사소한(매우 작은) loss를 갖기 때문이다.

Initialization

Backbone이 되는 ResNet-50과 ResNet-101은 ImageNet1k dataset을 이용해 pretrain된 모델을 사용한다. 마지막 conv layer를 제외한 모든 conv layer들은 bias는 b=0b=0, weight는 σ=0.01\sigma = 0.01인 Gaussian 분포로 초기화 된다. Classification subnet의 마지막 conv layer의 bias b=log((1π)/π)b= -log((1-\pi) / \pi)로 ~π\pi의 confidence로 모든 anchor들은 foreground로 labeled된다. 실험에서 π=.01\pi = .01을 사용했다. 이러한 초기화 방법은 많은 양의 background anchor들에 인한 학습 초기 불안정을 막아준다.


Experiments

표 2. Experiments

위의 표 2에 나온대로 저자들은 많은 실험을 진행했다.

  • Varying α\alpha
  • Varying γ\gamma
  • Varying anchor scales and aspects
  • FL vs OHEM
  • Accuracy/speed trade-off

표 3. Comparison to SOTA

RetinaNet이 SOTA model들 보다 좋은 성능을 갖는 것을 확인할 수 있다. 특히 2-stage detector들 보다 좋은 성능을 갖으며, 1-stage detector이므로 더 빠른 연산 속도를 갖는다.


Conclusion

본 논문은 1-stage detector의 class imbalance 문제를 해결하기 위해 focal loss를 제안했다. 기존 모델 구조에서 큰 변화없이 새로 제안한 loss를 통해 2-stage detector들을 포함한 기존의 방법들을 넘어선 성능을 보여줬다.


References

RetinaNet 논문
Focal Loss 관련 블로그 글

글 중간에 출처를 밝히지 않은 그림 및 표의 출처는 references 중에 있습니다.

profile
Mucha Suerte

0개의 댓글