
Object detection 에 대한 network를 학습시키다보면 주로 한 장의 영상에서 bounding box 후보로는 1000개 ~ 100,000개가 나오지만 이중에 object는 얼마 없는 것을 알 수 있을 것입니다. 이렇게 object 개수와 object가 아닌 것 개수 차이의 imbalance는 학습 시 문제가 될 수 있습니다. 예를 들어 단순하게 L1 loss를 사용하고 1개의 object에 대한 score는 0.0 이 나오고 1000개의 non-object에 대한 score도 모두 0.0 이 나온다면 loss는 아래와 같을 것 입니다.

분명히 Object를 찾는 데에 있어서는 score가 0.0이라 back-propagation을 할 때 좀 더 학습이 되도록 loss가 커야하는데 위 수식에서 보시다시피 매우 작은 loss가 나오게 됩니다. 이러한 imbalance 의 문제를 해결하기 위해 Focal loss가 나오게 되었습니다.
1. Focal loss
앞서 설명한 score가 0.0이 나오는 non-object들은 non-object가 잘 분류되었다면 나와야 할 값인 0.0이 나왔으므로 easy negative라 말할 수 있습니다. 또한 score가 0.0인 object는 잘 분류되었다면 1.0이 나와야 했으므로 hard positive라 볼 수 있습니다. 기존에 있던 loss를 사용하게 되면 설명드렸던 data imbalance 상황에서 hard positive는 학습이 잘 되지 않을 가능성이 높습니다. 이 때문에 분류하기 쉬운 easy sample(object or non-object)들이 학습에 기여하는 정도를 낮추는 down-weighting loss를 다음과 같이 모델링 하였습니다.

(1- p_{t})^{\gamma} 는 scaling factor라 불리우며 easy sample의 학습 기여 정도를 낮춥니다. 이러한 scaling factor를 Cross entropy loss에 추가한 것이 Focal loss 입니다. 간단한 수식 추가로 얻을 수 있는 효과는 다음과 같습니다.

예를 들어 어떤 object를 0.9의 score로 잘 분류하고 있는 상황이라면, Cross entropy loss의 경우 0.105361 ..의 loss가 나오게 됩니다. 이에 비해 Focal loss의 경우 scaling factor 내부의 focusing parameter인 \gamma 가 2라면 0.00105361.. 으로 100배 가량 낮은 loss가 나오게 됩니다.
이번에는 다른 경우로 어떤 object를 0.1의 score로 잘 분류하지 못하고 있는 상황이라면, Cross entropy loss의 경우 2.30259.. 의 loss가 나오고, Focal loss는 \gamma 가 2일 때 1.86509.. bject를 0.1의 score로 잘 분류하지 못하고 있는 상황이라면, Cross entropy loss의 경우 2.30259.. 의 loss가 나오고, Focal loss는 \gamma 가 2일 때 1.86509.. 이 나오게 됩니다.

잘 분류하지 못한 object score가 0.1일 때의 각 loss의 값을 비교해 보면 오히려 Focal loss의 값이 Cross entropy loss의 값보다 더 낮은 것을 볼 수 있지만 실제로는 둘 중 하나를 정해 놓고 쓰기에 한 loss 내에서 잘 분류했을 때와 잘 분류하지 못했을 때의 비율을 확인해야 합니다. Cross entropy loss 일 때 잘 분류하지 못했을 때의 loss가 약 23배 더 크지만, Focal loss 의 경우 약 1,800 배 더 커서 좀 더 hard case의 집중하는 것을 알 수 있습니다.
이 후, 실험을 통해 Focal loss 앞에 weight를 추가하면 성능이 좋아진다는 것을 확인하고 아래의 수식이 최종적인 Focal loss의 수식이 되었습니다.

2. RetinaNet

저자는 Focal loss를 적용하고 평가하기 위해 RetinaNet을 제안했습니다. RetinaNet은 ResNet backbone에 FPN 방식을 이용해 설계한 network 입니다. 이 network는 차후 언급하겠지만 2017년 기준 SOTA의 성능을 찍게 되었는 데 이에 대해 저자는 network 구조를 잘 구성해서가 아닌 Focal loss가 잘 동작해서라고 강조하고 있습니다.
3. Experiments

Table 2 는 weight인 \alpha와 \gamma 의 값을 변화시켜 분석한 결과 입니다. \gamma 가 0이 되면 scaling factor가 사라져 Cross entropy loss를 사용한 것과 같고 Table 2 에서 Focal loss 가 weight를 준 Cross entropy loss 보다 더 좋은 성능을 낸다는 것을 확인할 수 있습니다.

그리고 \gamma 에 따른 loss의 분포도 분석하였는데 probability가 낮은 hard example case에서 \gamma 를 크게 줄 수록 더 크게 나타나는 것을 확인할 수 있습니다.

Fig 4에서 볼 수 있는 것처럼 RetinaNet은 Focal loss 로 인해 2017년 기준으로 SOTA를 찍게 됩니다.
감마와 알파도 결국 하이퍼 파라미터라고 생각되는데, 이 감마와 파라미터는 predefined로 모델을 학습하는 방법밖에는 없나요?
그렇습니다. SVM에서 C와 유사하게 쓰인다고 생각하시면 될 듯 합니다.