Focal Loss for Dense Object Detection(RetinaNet) (2018) Review
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
0. 핵심 요약
배경과 class 간의 불균형을 기존의 cross entropy loss를 변형하여 해결하고자 함
Focal Loss는 학습 시 hard examples에 집중하도록 작동
Focal Loss의 효과를 확인하기 위해 RetinaNet 제안
1. BackGround
- two-stage Detector vs one-stage Detector
Object Detection에는 총 2가지 모델 구조가 존재
먼저 two-stage detector는 말 그대로 2 단계의 구조를 가지고 있는 모델
해당 구조를 가진 모델의 예시로는 R-CNN 계열 모델들이 존재
이 모델들이 detection을 수행하는 과정은 다음과 같다
1. 위치 후보 생성
2. 클래스 예측
이러한 순서로 예측을 수행하기 때문에 속도는 느리지만 그만큼 정확도가 뛰어나다는 장점이 있다
이와 반대로 one-stage detector는 위의 단계를 하나로 합친 모델들이다
예시로는 YOLO, SSD 등이 존재
해당 모델들은 위치 후보 생성과 예측을 동시에 진행하기 때문에 속도는 매우 빠르나 정확도가 위의 모델들에 비해 떨어진다는 단점이 있다
그렇다면 one-stage detector들은 왜 모델 성능이 감소하는걸까?
논문의 저자는 이 문제를 class imbalance에 있다고 파악했다
class imbalance란 말 그대로 클래스 간의 불균형을 의미하며, 클래스의 개수 차이에서 오는 문제를 의미한다
two-stage detector는 먼저 위치 후보를 생성한다
이 과정에서 객체가 있을법한 위치에서만 박스를 생성하기 때문에 실제 객체가 있는 foreground(전경)의 개수와 background(배경)의 개수 차이가 크게 나지 않는다
또한, 위치를 생성하면서부터 이미 한번 filtering을 거치기 때문에 매우 sparse하게 box를 생성한다
하지만, one-stage detector는 이러한 filtering 과정을 거칠수가 없기 때문에 box를 생성할 때 매우 dense하게 생성한다
단적인 예로 two-stage 모델들은 한 이미지 당 약 1~2k 개의 박스를 생성하지만 one-stage 모델들은 약 100k개의 박스를 생성한다고 한다
이렇게 많은 박스를 생성하게 되면 실제 객체가 없는 부분에서도 많은 박스를 생성하게 되고, 그에 따라 foreground보다 background 박스가 매우 많이 생성되게 된다
이러한 이유로 클래스 불균형이 발생해 one-stage 모델이 성능이 떨어진다고 논문의 저자는 주장한다
이를 해결하기 위해 논문에서는 새로운 Loss를 통해 이를 해결하고자 하였다
2. 논문 핵심 내용
- Focal Loss
Focal Loss란 배경과 class의 불균형을 해결하기 위해 제안된 새로운 형태의 loss
Focal Loss는 기존에 존재하는 Cross Entropy Loss에서부터 출발한다
$CE(p, y) = \begin{cases} - log(p) & \mbox{if} y=1 \\ -log(1-p) & \mbox{otherwise} \end{cases}$
위의 식은 기존의 Cross Entropy loss를 나타낸 식이다
여기에서 p는 모델이 예측한 확률이며, y는 실제 label을 의미
위의 p와 y를 살짝 변형하여 아래와 같이 표현하면
$p_t = \begin{cases} p & \mbox{if} y=1 \\ 1-p & \mbox{otherwise} \end{cases}$
CE 식을 아래와 같이 변형할 수 있다
$CE(p,y) = CE(p_t) = -log(p_t)$
앞으로는 위와 같이 식을 표현할 예정
위의 그림은 CE와 Focal Loss(FL)를 그래프로 표현한 그래프이다
위 그림 중 파란색 선이 CE를 나타낸 것이고 나머지는 모두 FL을 나타냈다
이 중 파란색 선에 집중해서 보면 다른 선들에 비해 확률에 따른 loss 값의 차이가 적은 것을 볼 수 있다
이가 의미하는 것은 확률이 높다는 것은 그만큼 분류하기가 쉽다는 것인데 여전히 많은 loss를 부여하고 있다는 것이다
이미 모델이 잘 예측하고 있는 것은 굳이 loss를 많이 줄 필요가 없는데 이로 인해 다른 어려운 것들을 학습하는 데 방해를 하고 있다는 것이다
FL은 이러한 문제를 총 2 단계를 거쳐 해결하고자 한다
우선 첫번째 단계로 클래스 불균형을 해결하고자 $\alpha$ 값을 도입한다
이는 각 class에 가중치를 부여하는 방법으로써, foreground에는 높은 값을, background에는 낮은 값을 부여한다
이를 통해 배경은 값을 줄이고 전경에는 값을 높히면서 학습 효과를 극대화 한다
식으로 표현하면 다음과 같다
$CE(p_t) = -\alpha_t log(p_t)$
$\alpha$를 통해 positive와 negative 간의 균형을 조절해주었지만 여전히 한 가지 문제점이 존재한다
바로 앞에서 언급했던 easy example과 hard example 간의 차이이다
모델이 이미 쉽게 예측할 수 있는 것은 loss를 극단적으로 줄이고, 모델이 헷갈려하는 것들은 loss를 상대적으로 높힌다
이를 위해 도입한 것을 modulating factor라고 부르며, 식은 다음과 같다
$FL(p_t) = -(1-p_t)^\gamma log(p_t)$
해당 factor가 하는 역할은 다음과 같다
만약 data가 오분류되었고, $p_t$가 0에 가깝다면 factor는 1에 근접하게 되며 기존의 loss와 유사한 값이 나온다
하지만 $p_t$가 1에 가깝다면 factor는 반대로 0에 가까워지며 기존의 loss 값을 매우 작게 바꿔준다
또한, $\gamma$를 통해 얼마나 줄여줄 지에 대한 비율을 결정하였는데, 2로 설정하였을 때 가장 좋은 성능을 보였다
최종적으로 논문에서는 $\alpha$와 modulating factor를 동시에 사용하였으며, 식은 다음과 같다
$FL(p_t) = -\alpha_t (1-p_t)^\gamma log(p_t)$
3. Model Architecture
- RetinaNet
전체적인 모델 구조는 위의 그림과 같으며, BackBone + 2 개의 subnetwork로 구성
1. BackBone
ResNet + FPN 인 모델을 사용
FPN에 대한 설명은 이전 논문 리뷰를 참고
Feature Pyramid Networks for Object Detection(FPN)(2016) Review
Feature Pyramid Networks for Object Detection Feature pyramids are a basic component in recognition systems for detecting objects at different scales. But recent deep learning object detectors have avoided pyramid representations, in part because they are
rltjq09.tistory.com
FPN을 활용함으로써 multi-scale에 대한 학습 능력을 향상
FPN에서 $P_3$부터 $P_7$ 까지의 level을 활용
또한, 모델은 예측을 위해 Anchor를 생성하였음
Anchor에 대한 자세한 내용은 YOLO 논문 리뷰를 참고
You Only Look Once:Unified, Real-Time Object Detection(YOLO V1)(2015) Review
You Only Look Once: Unified, Real-Time Object Detection We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially
rltjq09.tistory.com
IoU가 0.5 이상인 box들을 ground-truth로 사용하였으며, 0.4 이하인 box를 background로 사용 (나머지는 무시)
2. Classification SubNetwork
해당 network에서는 각 anchor에 대해 예측을 수행
BackBone의 각 level 마다 예측을 진행하며, 모든 level에서는 parameter sharing을 진행
총 4개의 C(=256) Channels를 가진 3 x 3 convolution layer와 1개의 KA(class 개수 * 9) Channels를 가진 3 x 3 convolution layer로 구성
기존의 RPN과의 차이점으로는 Bounding Box Regression과 parameter sharing을 하지 않는다는 것
3. Box Regression SubNetwork
마지막 출력이 class가 아닌 box 좌표를 출력한다는 것만 다르고 나머지는 모두 위와 동일
4. Experiment
정확도와 inference 속도에 대한 그래프를 표현한 그래프이다
다른 모델들과 비교했을 때 정확도와 속도 모두 뛰어난 것을 볼 수 있다
FL의 각 hyper parameter들을 변경하면서 정확도를 측정했을 때의 결과이다
이를 바탕으로 최종 값을 선정하게 되었다
FL과 OHEM을 비교해봤을 때 역시 FL이 더 우세한 성능을 보이고 있다
또한, 정확도와 속도에 대한 trade-off를 비교해본 표이다
해당 그래프는 FL를 적용했을 때 전경과 배경 간의 비율을 표현한 그래프이다
보면 알 수 있듯이 전경은 기존과 큰 차이가 없지만 배경에 있어서는 매우 큰 변화가 있는 것을 확인할 수 있다
실제 Detection 성능에 대해서도 확인해봤을 때 two-stage 모델들도 뛰어넘는 모습을 볼 수 있다
5. Contribution
클래스 불균형을 one-stage detector가 two-stage detector를 능가하는 것을 방해하는 주요 장애물로 식별
이를 해결하기 위해, 우리는 교차 엔트로피 손실를 변형한 Focal Loss 제안
+ Comment
수학에 대해 흥미가 많은 사람으로써, loss 를 변형함으로써 모델의 성능을 올리는 것을 보고 매우 큰 흥미를 느꼈다
지금까지 많은 논문을 봐오면서 모델의 구조, 손실 함수, 학습 방법론 등등 다양한 방법으로 성능을 올리는 것을 보면서 정말 다양한 방법으로 개선이 가능하다는 것을 다시 한 번 느끼고 있다