【Paper】 RetinaNet - Focal Loss, FPN
RetinaNet에 대해서 차근 차근 핵심만 파악해보자.
FPN에 대한 자세한 내용 정리는 제가 이전에 정리해놓은 FPN 게시물을 참고하시면 매우 좋습니다.
1. RetinaNet 특징
- 2017 Facebook AI Researcher Team
- 1 stage detector는 2 stage detector 보다 정확도가 떨어진다는 분위기가 있었다.
- 이러한 인식을 해소했다. 더 빠르고 더 정확한 Detection이 가능하다.
- 지금까지도 수행성능이 다른 Detection 모델 보다 뛰어나다.
Focal Loss(새로운 Loss 함수. Cross Entropy 대체), FPN(BackBone으로 사용)을 적극 사용했다.
- 성능 : COCO에 대한 수행성능이 좋다 = 작은 객체에 대해서도 잘 찾는다. box를 정확하게 그린다.
2. Focal Loss
“잘 Detect할 수 있는 ‘배경이나, 큰 Object’에 대한 모델의 학습을 살살시키고, 어럽게 Detect 해야 하는 ‘작은 Object나 변형 형태의 Object’에 대한 모델의 학습은 크게 일어나게 함으로써, 찾기 쉬운 것도 잘 찾고 찾기 어려운 것도 잘 찾도로 만들자!”
Focal Loss는 Cross Entropy의 변형이다. Cross Entropy 공식 :
- Cross Entropy 의 문제점
- “모델이 이미 잘 Detect할 수 있는 것에 더 잘 Detect할 수 있도록 만든다. 모델이 어렵게 Detect하는건 계속 어렵게 Detect하게 하도록 만든다.”
- Why?? 왜 그런 문제점이 생길까? - Class Imbalance 문제
- 위의 사진에서 왼쪽 강아지가 Easy Example, 오른쪽 강아지가 Hard Example 이다.
- 아래 중간 내용 보충
- 많은 Background(negative ROI) Easy Example가 이미지의 대부분이다.
- 적은 foreground (Object=positive ROI) Hard Example는 매우 유용한 정보이고, 신경망 모델은 이것을 위해 학습을 해나가야 한다.
- 하지만 아래의 설명처럼 Easy Example에 대한 Loss가 너무 압도적으로 크다. 그래서 위의 사진의 Cross Entropy로 학습할 때의 현상이 나타나게 된다.
- Class Imbalance 해결 방안
- 기존의 One Stage Detector (Faster-RCNN 에서 배운 방법) :
- 학습 시키기 위한 DataSet을 그냥 다 집어넣는게 아니라, Foreground와 Backround의 비율을 같게하여 신경망에 집어넣어 학습시킨다.
- 작은 Object는 Crop하고 확대하는 등의 Data Augmentaion에 집중했다.
- Cross Entropy를 바꾸자! Focal Loss로!
- CE = Cross Entropy, FL = Focal Loss
- 이미 높은 confidence로 예측하는 것의 Loss는 많이~~!! 낮추고,
- 낮은 confidence로 예측하는 것의 Loss는 조오금… 낮춘다
- 기존의 One Stage Detector (Faster-RCNN 에서 배운 방법) :
alpha 항까지 추가하여 정리한 Focal loss
3. Featur Pyramid Network
- FPN에 대한 자세한 내용 정리는 제가 이전에 정리해놓은 게시물을 참고하시면 좋습니다.
- 위의 게시물에서 추가적인 내용만 기록해 놓겠습니다.
- FPN
- (a) : Sliding window 방식에서 사용하는 방법
- (b) : CNN 맨 위에 Sementic한 Feature를 가지지만 너무 Resolution작음
- (c) : SSD 에서 사용하는 방법
- (d) : FPN
- Upsampling + Lateral connetction 이후 3 x 3 conv를 하는 이유
- upsampling의 불완전한 feature imformation 복원을 해소시켜주기 위해서.
- aliasing effect 문제를 해결하기 위해 - Skip connection을 그냥 하면, 서로 다른 Signal이 섞여 혼동되어 본래 자신들의 의미가 서로 사라지는 문제가 있다.(?) 3 x 3 conv를 통해서 그런 문제를 해결 했다고 한다.
- FPN과 RetinaNet
- 9개의 anchor box가 FPN에서 나온 P2~P5의 개별 Layer의 개별 Grid에 할당된다,
- anchor box는 3개의 서로다른 크기와 3개의 서로 다른 스케일을 가진다.
- 약 100k개의 anchor box들이 생긴다.
- 개별 anchor(A)는 아래의 이미지 처럼 K와 4에 대한 정보를 가진다. (K개의 클래스 확률값과 Bounding box regression 4개의 좌표)