(아래의 글을 읽기 전에 Object [Detection]에 대한 정확한 의미를 짚어 가자.
1.Object Detction : 여러 Object들을 Bounding Box를 통해 Localization(위치를 찾고)하고, Classification(어떤 물체인지 분류)하는 작업
2. 배경 BBox(Easy - Negative) : 배경에 대한 BBox의 갯수가 압도적으로 많으므로, Detector에 의해 검출되기는 Easy하지만, 출력의 결과는 [오류](=Negative)이다.
3. 객체 BBox(Hard - Negative) : 객체에 대한 BBox는 개수가 매우 적으므로 Dectector에 의해 검출되기 어렵렵고, 출력의 결과는 [정상](=Positive)이다.
-> BBox와 같은 Example들은 더 학습할 필요 없음.
Object Detection에 있어서 학습이 필요한 Example은 [객체(Hard-Negative) Object]이다.
- Focal Loss의 필요성 -
Focal Loss는 간단히 말하면 Cross Entropy의 Class imbalance(클래스 불균형) 문제를 다루기 위한 개선된 버전이라고 말할 수 있으며,
[Detection이 어렵거나 or 오분류]되는 Hard Case(객체 또는 객체의 일부)에대하여 더 큰 가중치를 곱하여 Loss 값을 인위적으로 높여 준다.
반대로 Easy Case(배경 object)의 경우 클래스의 비율이 압도적으로 높으므로 작은 가중치를 곱하여 Loss 값을 인위적으
로 작게 한다.
왜냐하면 객체 BBox는 배경 BBox에 비해 매우 개수가 적으므로, Detection이 어려워서 Loss 값이 높기는 하지만 그 비율
이 매우 적으므로 전체 Loss 및 gradient를 계산할 때 갱신되는 parameter의 크기가 매우 작다.
(학습에 중요한 것은 배경 BBox가 아니라, 객체 BBox이다)
반대로 배경 BBox의 경우는 개수가 매우 많으므로, Dectection 정확도가 높다. 고로, Loss 값이 작다.
그러나 개수가 굉장히 크므로 [전체] Loss 및 Gradient를 계산할 때, 배경 BBox(Easy-Negative)의 영향이 압도적으로 커지
는 문제가 발생.
또한 [대부분의] Location(배경 BBox)는 위에서 언급하했 듯이 학습에 필요 없는 Example이다.
-> 이러한 문제점들을 해결하기 위해 만들어진 것이 Focal Loss Function이다.
(Focal Loss 식을 보면 알겠지만, Cross-Entropy의 확장판이라고 생각하면 된다)
- Class Imbalance 문제에서 Cross-Entropy를 사용하지 않는 이유 -
CE loss의 문제점은 [모든 sample에 대한 Loss값에 대한 같은 가중치(=1)를 둔다]는 것이다.
이로 인해 어떠한 sample이 쉽게 분류(Easy Case)돼 Loss 값이 작음에도 불구하고, Class의 비율이 큰 Example의 경우
총 Loss 값이 매우 커지게 된다.
->이렇게 많은 수의 Easy-Negative Sample로 인하여 총 Loss 값이 매우 커지면, 객체 Object와 같은 Hard-Positive
Example과 같은 Class의 비율이 작은 Class를 압도해버려서 객체 Object에 대한 학습이 잘 이루어 지지 않게 된다.
( 아래의 사이트에도 나와 있지만, 모델은 Loss 값이 적은 부류(배경)에 대해서는 해당 부류에 대한 학습을 더하지 않아도 잘 맞출 것이라고 인지를 하고, 반대로 Loss 값이 큰 부류(객체)에 대해서는 학습을 더 집중한다)
- FL(p) = -(1-p)^r * ln(p) -
a =1이라고 가정을 하고, Easy Example의 경우 출력값(확률 p)가 1에 가깝게 높게 나올 것이다.
고로, (1-p)의 값은 0에 가까울 것이며, (1-p)^r에서 r를 크게 설정할 수록 (1-p)^r의 값은 작아진다.
-> Focal Loss의 전략은 [1개의 출력값(확률p)에 대한 Loss 값]이 높게 나올 수록,
(컴퓨터 비전과 딥러닝 p334에도 나와 있듯이, 여러 확률 중 최대값 확률 1개에 대해서만 Loss값을 출력한다. 아래의 참
조 사이트 링크가 있을텐데, 이 개념이 매우 중요하다. 사이트에서 2.3 부분에서 2번째 이미지에 그래프가 있는데 그것
을 해석하는 데 필요한 지식임)
즉 1에 가까울 수록 이걸을 Easy Example(배경 BBox)이라고 판단하여, Class Imbalance 문제를 해결하기 위해
(1-p)^r이라는 가중치를 곱하여 Loss 값을 낮추고,
반대로 [1개의 출력값(확률p)에 대한 Loss 값]이 낮게 나올수록,
즉 0에 가까울수록 이것을 Hard Example(객체 BBox)라고 판단하여, Class Imbalance 문제를 해결하기 위해
똑같이 (1-p)^r이라는 가중치를 곱하여 Loss 값을 높임으로써 Class Imbalance 문제를 해결한다.
(위 글을 이해하고 읽어야 아래 사이트에서 무슨 말을 하는 지 이해가 될 것이다)
https://woochan-autobiography.tistory.com/929#2.3.%20Focal%20Loss%20%EC%A0%81%EC%9A%A9