본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Deep Learning Network

[Model] RetinaNet

by zpstls 2023. 2. 22.
반응형

이번 포스트는 RetinaNet에 대해 정리해보고자 합니다.

 

Object Detection 및 Keypoints Detection을 수행할 경우, ResNet과 비슷하게 많이 사용되는 Model이 RetinaNet이라고 생각됩니다. 해당 모델은 ResNet을 Backbone으로 하고 있으며 일부 더 나은 결과를 보이기도 합니다.

 

우선, RetinaNet에 대한 논문은 다음과 같습니다.

 

Focal Loss for Dense Object Detection

The highest accuracy object detectors to date are based on a two-stage approach popularized by R-CNN, where a classifier is applied to a sparse set of candidate object locations. In contrast, one-stage detectors that are applied over a regular, dense sampl

arxiv.org

 

흔히, Object Detection Model은 Image내의 객체의 영역을 추정하고 IoU threshold에 따라 Positive/Negative Sample로 구분한 후, 이를 활용하여 Train을 진행합니다. 하지만 일반적인 경우, Image내의 객체의 수가 적기 때문에 Positive Sample(= 객체 영역)은 Negative Sample(= 배경 영역)에 비해 매우 적습니다. 이로 인해 Positive/Negative Sample사이에 큰 차이가 생겨 Class Imbalance 문제가 발생됩니다.

이러한 Class Imbalance는 학습을 진행하는 동안 2가지 문제를 야기합니다. 해당 문제점은 다음과 같습니다.

  1. 비효율적인 학습 : 대부분의 Sample이 Easy Negative, 즉 Class를 예측하기 쉬운 Sample이기 때문에 유용한 기여를 하지 못합니다.
  2. Model의 성능 하락 : Easy Negative의 수가 압도적으로 많기 때문에 이것이 학습에 끼치는 영향력이 커집니다.

 

Two-stage Detector 계열의 모델(= RCNN, GoogLeNet, VGGNet, ResNet, DenseNet 등)은 이러한 문제를 해결하기 위해 두 가지 측면에서 해결책을 적용하였습니다. 각각의 방식은 다음과 같습니다.

 

  • Two-stage Cascade

Resion Proposals를 추려내는 방법을 적용하여, 대부분의 Background Sample을 걸러줍니다. 이에 대한 예시로 Selective Search, Edgeboxes, Deepmask, RPN 등이 있습니다.

 

  • Sampling Heuristic

Positive/Negative Sample의 수를 적절하게 유지합니다. Hard Negative Mining, OHEM 등이 이러한 방법에 해당합니다.

 

하지만 위에서 언급한 Two-stage Detector에서의 Class Imbalance 문제를 해결하는 방법은 One-stage Detector (= YOLO, SSD, RefineDet 등)에 적용하기가 어렵습니다. One-stage Detector는 Region Proposal 과정이 없어 전체 이미지를 빽빽하게 순회하면서 Sampling 하는 Dense Sampling 방법을 수행하기에 Two-stage Detector에 비해 훨씬 더 많은 후보 영역을 생성하는 특징이 있습니다. 즉 Class Imbalance 문제가 Two-stage Detector보다 심각합니다. 기존의 Sampling Heuristic 방법을 적용해도 여전히 배경으로 쉽게 분류된 Sample이 압도적으로 많기 때문에 학습이 비효율적으로 진행됩니다.

 

RetinaNet에서는 학습 시 발생하는 Training Imbalance가 주된 문제로 보고 이러한 문제를 해결하여 One-stage Detector에 적용할 수 있는 새로운 Loss Fuction을 제시하였습니다.

새로 제시된 Loss Function은 Focal Loss입니다. 이는 Cross Entropy Loss에 Class에 따라 변하는 동적인 Scaling Factor를 추가한 형태를 가집니다. 이러한 Loss Fuction을 통해 학습을 진행하면 Easy Example의 기여도를 자동적으로 Down-Weight 하며, Hard Example에 대해서 Weight를 높여 학습을 집중시킬 수 있습니다.

RetinaNet은 One-stage Detector입니다. 해당 Network는 ResNet-101-FPN을 Backbone Network로 가지며, Anchor Boxes를 적용하여 기존의 Two-stage Detector에 비해 높은 성능을 보여줍니다.

 

 

 

 

 

이제 논문에서 설명된 몇가지 중요한 부분만 다뤄보도록 하겠습니다.

 

Focal Loss

One-stage Detector Model에서 Foreground와 Background Class 사이에 발생하는 극단적인 Class Imbalance 문제를 해결하는 데 사용됩니다. Focal Loss는 이진 분류에서 사용되는 Cross Entropy Loss Fuction으로부터 비롯되었습니다.

 

  • Cross Entropy Loss

우선, 이진 분류에서 사용되는 Cross Entropy Loss는 다음과 같습니다.

Cross Entropy Loss

Cross Entropy Loss의 문제점은 모든 Sample에 대한 예측 결과에 모두 동등한 가중치를 준다는 것입니다. 이로 인해 어떠한 Sample이 쉽게 분류될 수 있음에도 작지 않은 Loss를 유발하게 됩니다. 때문에 많은 수의 Easy Example의 Loss가 더해지면 잘 등장하지 않는 Class를 압도해 버려 학습이 제대로 이루어지지 않습니다.

 

  • Balanced Cross Entropy

위와 같은 문제를 해결하기 위해 가중치 Parameter인 $\alpha \ \epsilon \ [0, 1]$를 곱해준 다음과 같은 식을 사용해보았다고 합니다.

y=1일 때, $\alpha$를 곱해주고 y=-1일 때, 1-$\alpha$을 곱해줍니다. 하지만 이 식은 Positive/Negative Sample 사이의 균형은 잡아주지만 Easy/Hard Sample에 대해서는 균형을 잡지 못한다는 문제가 있습니다.

 

  • Focal Loss

위의 문제를 해결하기 위해 Focal Loss, 즉 Easy Example을 Down-Weight하여 Hard Negative Sample에 집중하여 학습하는 Loss Fuction을 구성하였고 이는 다음과 같은 형태를 가집니다.

Balanced Cross Entropy를 baseline으로 삼고 Modulating Fator ${(1-P_t)}^{\gamma}$와 Tunable Focusing Parameter $\gamma$를 Cross Entropy에 추가한 형태입니다.

 

서로 다른 $\gamma \ \epsilon \ [0,5]$ 값에 따른 Loss는 아래 그래프를 통해 확인할 수 있습니다. 참고로 아래 그래프에서의 파란색 선($\gamma=0$)은 Cross Entropy를 의미하며 이는 경사가 완만하여 $p_t$가 높은 Example과 낮은 Example 사이의 차이가 크지 않다는 것을 의미합니다.

반면, Focal Loss는 Focusing Parameter $\gamma$에 따라 $p_t$가 높은 Example과 낮은 Example 사이의 차이가 상대적으로 크다는 것을 확인할 수 있습니다. 즉, y=1인 Class임에도 $p_t$가 낮은 경우와 y=-1 임에도 $p_t$가 높은 경우에 Focal Loss가 높고 반대의 경우에는 Down-weight 되어 Loss 값이 낮게 나타납니다.

 

이를 통해 다음과 같은 Focal Loss의 2가지 특성을 확인할 수 있습니다.

 

  • $p_t$와 Modulating Factor와의 관계

Example이 잘 못 분류되고 $p_t$가 작으면 Modulating Factor는 1과 가까워지며 Loss는 영향을 받지 않습니다. 반대로 $p_t$ 값이 크면 Modulating Factor는 0에 가까워지고 잘 분류된 Example의 Loss은 Down-Weight됩니다.

 

  • Focusing Parameter $\gamma$의 역할

Focusing Parameter $\gamma$는 Easy Example을 Down-Weight 하는 정도를 부드럽게 조정합니다. $\gamma=0$인 경우 Focal Loss는 Cross Entropy와 같으며 $\gamma$가 상승할수록 Modulating Factor의 영향력이 커지게 됩니다. 논문에서는 $\gamma=2$일 때가 가장 좋은 결과를 보였다고 합니다.

 

직관적으로 보면 Modulating Factor는 Easy Example의 기여도를 줄이고 Example이 작은 Loss를 받는 범위를 확장시키는 기능을 합니다.

 

 

 

 

 

RetinaNet

RetinaNet은 하나의 Backbone Network와 각각의 Classification과 Bounding Box Regression을 수행하는 2개의 Subnetwork로 구성되어 있습니다. 그림으로 표현하면 다음과 같습니다.

Structure Of RetinaNet

 

RetinaNet을 이용한 Training의 과정을 설명하면 다음과 같습니다.

 

  • Feature Pyramid by ResNet + FPN

먼저, 이미지를 Backbone Network(= ResNet기반의 FPN(Feature Pyramid Network))에 입력하여 서로 다른 5개의 Scale을 가진 Feature Pyramid를 출력합니다. Pyramid Level은 P3~P7로 설정합니다.

 

FPN에 대한 더 자세한 내용은 다음 링크를 참고하면 좋을 것 같습니다.

 

[Model] FPN

이번 포스트에서는 FPN이라는 Network에 대해 정리해보고자 합니다. 우선, FPN에 대한 논문은 다음과 같습니다. Feature Pyramid Networks for Object Detection Feature pyramids are a basic component in recognition systems for d

mj-thump-thump-story.tistory.com

 

  • Classification by Classification Subnetwork

앞의 과정에서 얻은 각 Pyramid Level별 Feature Map을 Classification Subnetwork에 입력합니다. 해당 Subnet은 3x3(xC) Conv Layer - ReLU - 3x3(xKxA) Conv Layer로 구성되어 있습니다. 이때 K는 분류하고자 하는 Class의 수, A는 Anchor Box의 수를 의미합니다.

A=9로 설정하며, 마지막으로 얻은 Feature Map의 각 Spatial Location(= Feature Map의 Cell)마다 Sigmoid Activation Fuction을 적용합니다. 이를 통해 Channel 수가 KxA인 5개의 Feature Map을 얻을 수 있습니다. (= Feature Pyramid)

 

  • Bounding Box Regression By Bounding Box Regression Subnetwork

ResNet + FPN에 의한 Feature Pyramid 과정에서 얻은 각 Pyramid Level별 Feature Map을 Bounding Box Regression Subnetwork에 입력합니다. 해당 Subnet도 Classification Subnet과 같이 FCN(= Fully Convolutional Network)입니다.

Feature Map이 Anchor Box별로 4개의 좌표 값 (= x, y, w, h)을 Encode 하도록 Channel 수를 조정합니다. 최종적으로 Channel 수가 4xA인 5개의 Feature Map을 얻을 수 있습니다.

 

 

Inference

각 FPN의 pyramid level에서 가장 점수가 높은 1000개의 prediction만을 사용합니다. 2개의 Subnetwork의 출력 결과에서 모든 level의 예측 결과는 병합되고, Non maximum suppression(threshold=0.5)를 통해 최종 예측 결과를 산출합니다.

산출된 결과를 토대로 작성한 결과물은 다음과 같습니다.

Result

RetinaNet을 COCO dataset을 통해 학습시킨 후, 서로 다른 Loss Fuction을 사용하여 AP 값을 측정한 결과, Cross Entropy Loss는 30.2%, Balanced Cross Entropy Loss는 31.1%, Focal Loss는 34% AP였다고 합니다.

또한 SSD Model을 통해 Positive/Negative 비율을 1:3으로, NMS Threshold=0.5로 설정한 OHEM과 성능을 비교한 결과 Focal Loss를 사용한 경우의 AP 값이 3.2% 더 높게 나타났다고 합니다.

결론적으로 Focal Loss가 Class Imbalance 문제를 기존의 방식보다 효과적으로 해결했다고 볼 수 있습니다.

 

 

RetinaNet Model 자체가 가지는 특이점은 거의 없지만, Class Imbalance 문제를 Loss Fuction을 통해 일부 해결했다는 점에서는 의의가 있다고 생각합니다. 성능 향상에 있어 Loss Fuction의 중요성을 확인시켜주는 사례라고 생각합니다.

 

Network 자체의 구조도 중요하지만 Parameter나 Loss Fuction들도 역시 중요한 것 같습니다.

 

이번 포스트는 이렇게 마무리하도록 하겠습니다.

반응형

'Programming > Deep Learning Network' 카테고리의 다른 글

[Model] R-CNN  (0) 2023.02.23
[Model] FPN  (0) 2023.02.22
[Model] MobileNet v1  (0) 2023.02.21
[Model] Grad-CAM  (1) 2023.02.15
[Model] ResNet  (0) 2023.02.13

댓글