[논문리뷰] RetinaNet: Focal Loss for Dense Object Detection

미남로그·2021년 12월 14일
1

Paper Review

목록 보기
3/5

📑 논문 제목: Focal Loss for Dense Object Detection
📑 논문 다운로드: PDF



Preview

이번엔 RetinaNet의 논문을 리뷰해보려고 합니다. RetinaNet은 Object Detection 알고리즘 중 하나이며 One-statge-Detector입니다.

이전 Object Detection에 대해 포스팅한 자료를 참고해도 좋습니다.

Object Detection의 모델은 이미지 내의 객체의 영역을 찾아내고, IoU(Intersection over Union) threshold에 따라 positive/negative sample로 나눈 뒤 학습합니다.

📌 참고: Iou 개념

여기서 class imbalance의 문제가 발생합니다. 이미지 내에 positive sample(object)와negative sample(background) 사이의 차이가 크기 때문인데요. 첫 번째로 배경 영역 때문에 대부분 sample이 easy negative가 되고, easy negative의 수가 압도적으로 많아서 학습에 끼치는 영향력이 커져서 모델의 성능이 하락합니다.

Two-statge-Detector는 이러한 문제를 해결하기 위해 두 가지 측면에서 해결책을 썼습니다. 첫 번째가 region proposals을 통해 background sample을 걸러주었습니다. 방법은 selective search, edgeboxes, deepmask, RPN 등이 있습니다. 또한, ositive/negative sample의 수를 적절하게 유지하는 sampling heuristic 방법을 적용했습니다. hard negative mining, OHEM 등이 이러한 방법에 해당합니다.

One-statge-Detector 계열의 문제점은 위에서 언급한 class imbalance의 문제를 해결하기에 부적절했습니다. region proposal 과정을 없애고 이미지 전체를 sampling하는 dence sampling 방법을 수행하기 때문에, 더 많은 후보 영역이 발생하고 class imbalance 문제가 더 심각합니다.

따라서 One-statge-DetectorTwo-statge-Detector보다 속도는 빠르지만 성능은 떨어진다는 특징이 있었습니다.

그래서 해당 논문은 class imbalance의 문제를 main으로 보고 focal loss를 통한 해결 방법을 제시하였고, Two-statge-Detector보다 더 좋은 성능까지 입증합니다.


Abstract

위의 그래프에서 CECE 가 Cross Entropy 식이고 아래의 FLFL이 해당 논문에서 제시하는 Focal Loss입니다.

두 식의 차이는 (1p)γ(1-p)γ이며 γγ는 뒤의 Focal Loss에서 설명이 될듯합니다.

높은 정확도를 보여줬던 detector은 R-CNN 계열의 tow-stage였고, one-stage detector는 대비되게도 dence sampling을 통해 빠르고 간단하게 object의 locations를 찾아냈지만 성능은 two-stage를 따라가지 못했습니다.

논문 저자들이 발견한 것은 foreground와 background 사이의 class imbalance문제였고, 이것이 dence detector가 학습하는데 가장 큰 원인이었습니다.


Main Ideas

class imbalance를 해결하기 위해 기존의 cross entropy loss를 reshapling하는 방법을 제안했고, 그것은 잘 분류되는 예들(well-classified examples, easy sample)에게 더 작은 가중치(dwon-weights)를 주는 방법이었습니다.

easy sample에게 작은 가중치를 주게 되면 학습하는데 방해하는 걸 조금 더 막아줍니다.

그 방법 이름이 FocalFocal LossLoss이며, detector가 학습하는 동안 엄청나게 많은 수의 easy negatives에게 영향이 가는 것을 막으며

작게 분포되어 있는 hard example(object)에게 집중합니다.

이 새로운 FocalFocal LossLoss를 평가하기 위해 simple dense detector을 설계했고 그것이 RetinaNet입니다.

이 결과는 이전 것보다 속도도 빠르고 성능도 좋아 (당시에) SOTA를 달성했습니다.

해당 그래프의 ms는 속도이며, AP는 평가 지표입니다. RetinaNet101을 살펴보면 RetinaNet50보다 같은 속도에 비해 더 좋은 성능 결과를 보여주고 있습니다.

A부터 G까지 one-stage/two stage detector를 비교해보면 성능도 속도도 우수하다는 것을 확인할 수 있습니다.



Focal Loss

Focal Loss는 학습하면서 foreground와 background 사이의 큰 imbalance 문제를 해결하도록 one-stage에서 설계되었습니다.

그리고 binary classification을 위한 Cross Entropy(CECE)를 바탕으로 시작합니다.

ground-truth class에 대해서 [0, 1]로 분류하고, label과 동일하면 1입니다.

표기상 편의를 위해 ptp_t라고 정의합니다.

y=1y=1일 때, pp이고 그 외의 경우엔 1p1-p입니다. 그래서 CE(p,y)CE(p, y)의 식을 다시 써서, CE(pt)CE(pt) = log(pt)-log(pt)라고 표기합니다.


(1) Balanced Cross Entropy

여기서 y에 상관없이 ptp_t > 0.5 이면 Confidence가 높으므로 Loss가 크게 줄어드는데, 문제는 쉽게 분류가 잘 돼서 0.5를 넘기기 쉬운 Background나 class들이 너무 많이 Loss를 줄여버리게 됩니다.

이렇게 되면 Rare한 클래스가 Loss에 미치는 귀중한 영향을 압도해버릴 수 있는데요.

해당 논문에서는 CECE에다가 balance를 맞춰주는 idea로 Balanced Cross Entropy란 것을 먼저 제안합니다.

Balanced Cross Entropy는 Weightng Factor를 제안한 것인데요.

y가 1일 때와 -1일 때, 각각 Loss에 미치는 영향을 다르게 만들어주는 아이디어입니다.

  • y가 -1일 때는 loss에 (1α)(1-α)의 weight를 줌
  • y = 1일 때는 αα의 weight를 줌

Weighting Factor 로 Positive와 Negative Sample들이 Loss에 미치는 영향의 정도는 조정해주었습니다.

하지만 아직 진짜 목표인 Easy/Hard Sample들에 대한 Loss 반영 정도를 조정해주지 않았습니다.

이 부분을 해결한 것이 Scaling Factor이고, Scaling Factor가 추가된 것이 Focal loss function입니다!


(2) Focal Loss Definition

쉽게 분류되는 negative는 loss의 대부분을 차지하고, gradient를 거의 지배합니다.

αα balance는 positive/negative에겐 영향을 주지만, 그것은 easy/hard example 사이를 구별짓지는 못합니다.

그래서 CECE(1pt)γ(1-p_t)^γ를 곱해 factor에 더 변화를 주었습니다.

γγ는 조정할 수 있는 파라미터 값입니다.

Focal Loss 식 설명

(1) ptp_t 와 modulating factor와의 관계

example이 잘못 분류되거나 ptp_t가 작으면 factor는 1에 가깝고, loss는 영향을 받지 않습니다.

ptp_t가 1이면 factor는 0으로 가고, 잘 분류되는 example의 loss는 가중치가 낮아집니다.

(2) focusing parameter γγ의 역할

파라미터 γγ은 easy example의 가중치가 작아지는 비율을 더 부드럽게 조정해줍니다.

γγ가 0일 때, FLFLCECE와 동일하면서 γγ이 증가함에 따라 Scaling factor의 영향이 커집니다.

modulating factor는 easy example의 기여도를 줄이고,

example이 작은 loss를 받는 범위를 확장시키는 기능을 합니다.

예를 들어 γ=2γ=2, pt=0.9p_t=0.9일 때, CE에 비해 100배 적은 loss를 가지며 pt=0.968p_t=0.968일 때는 1000배 적은 loss를 가집니다.

이는 잘못 분류된 example을 수정하는 작업의 중요도를 상승시킴을 의미합니다.

여기서는 γ=2γ=2일 때, 가장 효과적이라고 언급하고 있습니다.

마지막으로 FLFL에 앞에서 αα의 balance를 추가합니다.

결론적으로는 위의 식을 채택했는데, balance가 맞지 않은 형식에 비해 정확도가 약간 향상되었습니다.

loss layer의 구현은 pp를 계산하기 위한 sigmoid 연산과 loss 계산을 결합하여 더 좋은 성능을 가져온다는 점에 주목했습니다.



RetinaNet

RetinaNet은 하나의 backbone network와 두 가지의 task를 가진 subnetwork가 있습니다.

backbone은 전체 input image에 대한 convolutional feature map의 연산을 하는 기능을 합니다. 이건 자체 convolutional network입니다.

feedforward로 ResNet을 사용했습니다. 그림을 보면 ResNet 상단에서 FPN backbone을 사용했고, multi-scale convolutional feature pyramid를 생성합니다.

여기서 anchor box를 생성합니다.

first subnet은 backbone의 output(anchor box)에 대한 object를 classification하는 역할을 합니다.

second subnet은 anchor box와 GT(Ground Truth) Box를 비교하는 regression의 연산을 수행합니다.


(1) FPN(Feature Pyramid Network Backbone)

RetinaNet의 Backbone으로 FPN(Feature Pyramid Network Backbone)을 사용하였습니다.

FPN은 하나의 input image에 대해 multio-scale feature pyramid를 생성합니다.

각 레벨의 pyramid는 다른 scale에서 object를 detect하는데 사용됩니다.

작은 크기의 object부터 큰 크기의 object까지 다양한 scale을 가지는 object의 detect 능력이 향상 됩니다.

ResNet 자체만 사용했을 때는 AP가 낮아서 ResNet 상단에 FPN을 적용합니다

pyramid는 level P3~P7을 사용했고, pyramid의 channels의 수는 256입니다.


(2) Anchors

  • three aspect ratios 1:2;1:1,2:1{1:2; 1:1, 2:1}
  • IoU threshold of 0.5
    • [0, 0.4)의 IoU는 background라고 판단
    • [0.4, 0.5]의 IoU를 가지는 Anchors Box는 학습 도중에 무시된다.

(3) Classification Subnet

  • Anchor box 내에 object가 존재할 확률을 predict합니다.
  • subnet은 FPN level 옆에 붙어있는 작은 FCN(Fully Convolution Network)입니다.
  • subnet의 파라미터는 pyramid level에서 공유됩니다.
  • 333*3 conv layers, ReLU activations, sigmoid activations

RPN과 비교해서, object classification subnet은 더 깊고, 오직 333*3 conv layers만 사용하여 box regression subnet과는 공유하지 않습니다.


(4) Box Regression Subnet

  • Classification Subnet과 같이 각 FPN level에 작은 FCN을 붙입니다.
  • 각 Anchor box 의 offset 4개 (center x, center y, width, height)를 GT박스와 유사하게 regression합니다.
  • class-agnostic bounding box regressor를 사용
    • 파라미터 수가 적고 성능이 좋습니다.
    • regressor은 class 정보 없이 anchor box를 regression합니다.
  • Classification Subnet과 Box Regression Subnet은 구조는 같지만 개별적인 파라미터를 사용합니다. 즉, 파라미터 공유가 일어나지 않습니다.


Inference and Training

RetinaNet의 판단 속도 향상을 위해, 각 FPN level에서 가장 box prediction 점수가 높은 1,000개의 box만 result에 사용하였습니다.

다른 detector와 마찬가지로 최종 detection에 NMS(non-maximum suppression)를 0.5 임계값으로 적용하여 최종 값을 산출합니다.

RetinaNet을 COCO 데이터셋을 통해 학습시킨 후 서로 다른 loss function을 사용하여 AP 값을 측정했습니다.

  • CECE loss는 30.2%
  • BalancedCEBalanced CE는 31.1%
  • FLFL의 AP는 34%

또한, SSD 모델을 통해 positive/negative 비율을 1:3으로

NMS threshold=0.5로 설정한 OHEM과 성능을 비교한 결과,

Focal loss를 사용한 경우의 AP값이 3.2% 더 높게 나타났습니다.

이를 통해, Focal loss가 class imbalance 문제를 기존의 방식보다 효과적으로 해결했습니다.



Comparison

RetinaNet의 성능은 기존 two-stage, one-stafe 모델들과 비교해보았을 때도, 우수함을 알 수 있습니다.



Conclusion

one-stage의 가장 주요한 obstacle이었던 class imbalance문제를 해결하기 위해 FocalFocal LossLoss를 제안하였고, 성능을 입증했습니다.

해당 논문의 접근은 굉장히 간단하면서 효과적인데요.

fully convolutional one-stage detector를 설계하여 효과를 증명하였고, SOTA를 달성했습니다!

페이스북이 만든 성과를 구경하고 싶으신 분들은 해당 github으로 이동해서 보시길 바랍니다.

Reference

📌 논문 리뷰 참고1: RetinaNet 논문(Focal Loss for Dense Object Detection) 리뷰
📌 논문 리뷰 참고2: Focal Loss for Dense Object Detection 리뷰
📌 논문: Feature Pyramid Networks for Object Detection

profile
미남이 귀엽죠

0개의 댓글