티스토리 뷰

Object Detection 모델을 Real-world Applications에 실제로 적용/배포해보았다면, 예상치도못한 False positives(FPs)를 굉장히 많이 관측할 수 있을 것이다. 특정 태스크에서는 True positive(TP)를 증가시키는 것 보다 차라리 TP를 조금 감소시키고 FP를 크게 줄이는 방법이 더 좋은 선택이 될 수 있다. 물론 TP를 증가시키고, FP도 줄일 수 있는 방법이 베스트다.

 

여기서, TP는 Positive sample(Foreground)을 잘 찾은 케이스이고, FP는 Negative sample을 Background 혹은 Negative sample을 Positive sample로 잘못 예측한 케이스이다. TP는 정탐, FP는 오탐으로 생각하면된다. False negative(FN)는 Positive sample을 못 찾은 케이스로 미탐이다.


Gaussian YOLOv3: An Accurate and Fast Object Detector Using Localization Uncertainty for Autonomous DrivingFP를 감소시키면서 TP는 증가시킬 수 있는 방법을 제안하는 논문이다. 본 논문에서는 FP가 치명적인 문제를 야기할 수 있는 태스크로 자율 주행을 예시로 들었다.

 

논문 제목에서도 알 수 있듯이 이 방법은 YOLOv3 모델을 기저로한 방법이다. YOLOv3를 통해 예측되는 객체의 바운딩 박스별 아웃풋은 아래와 같다.

 

\(t_{x}\), \(t_{y}\), \(t_{w}\), \(t_{h}\) 는 Localization을 위한 아웃풋이고, Objectness score와 Class scores는 Classification을 위한 아웃풋이다. Classification을 위한 아웃풋인 Objectness score와 Class scores는 0~1 사이의 값으로 나오기때문에 이를 확률로 보고 이 값이 낮으면 물체일 확률이 낮은 것으로 판단하고 Background 혹은 Negative sample로 분류하여 검출 결과를 무시한다.

 

하지만 Localization을 위한 아웃풋인 \(t_{x}\), \(t_{y}\), \(t_{w}\), \(t_{h}\) 는 확률로 대응시키기 어려운 값이므로 이 값들로는 예측해낸 객체가 Background 인지 Negative sample 인지 알기란 어렵다. 즉, 이 값만으로는 예측된 Localization 결과를 얼마나 신뢰할 수 있는지 혹은 얼마나 불확실한지에 대한 Uncertainty를 판단하기가 어렵다.

 

사실은 모델이 잘 학습이 되었다면 Objectness score와 Class scores만으로 대부분의 Negative sample들이 잘 걸러져야할 것이지만 실제로는 그렇지 않아 False Positive가 많이 검출된다.

 

이 논문에서는 Localization 결과에 대한 Uncertainty를 예측할 수 있는 방법을 제안하고, 이 Uncertainty를 이용해 False Positives를 줄일 수 있는 방법을 제안한다.


먼저, Uncertainty를 예측하기 위하여 모델의 아웃풋을 수정하였다. 

Localization 을 위한 아웃풋이 4개(YOLOv3)에서 8개(Gaussain YOLOv3)로 증가되었다. 여기서, \(\mu_{t_{x}}\), \(\mu_{t_{y}}\), \(\mu_{t_{w}}\), \(\mu_{t_{h}}\) 는 기존 YOLOv3 모델의 아웃풋인 \(t_{x}\), \(t_{y}\), \(t_{w}\), \(t_{h}\) 와 같게 나오게끔 학습 및 추론 되는 값인데 이 값을 이해하려면 Loss function 까지 이해해야한다. 나머지 4개의 값은 각 Localizaiton에 필요한 변수들의 각각의 분산값을 의미한다.

 

각 변수는 아래와 같이 정의된다.

그리고 모델은 위 값들을 예측하기 위해 아래의 Loss function에 의하여 학습이 된다.

 

학습을 통해 해당 Loss function의 값이 Minimize 되려면 log 안쪽의 값이 Maximize 돼야 한다.

 

그럼 log 안쪽의 값이 Maximize 되기 위해 모델이 어떻게 학습되는지 알아보자.

 

수식 (5)에서, epsilon은 log 안쪽의 값이 0이 되지 않게끔 Numerical Stability를 유지시키기 위한 값으로 일단은 무시하자. 그러면, log 안쪽의 값이 Maximize 되기 위해서는 N(...)의 값이 Maximize 되어야한다. 여기서 N은 Normal Distribution(=Gaussian Distribution)을 의미한다. 수식을 간단하게 표현하면 N(Ground Truth Value=\(x^{G}\)| 평균=\(\mu\), 분산=\(\Sigma\)) 이다. 정규 분포의 PDF(Probability density function) 수식은 다음과 같다.

N(Ground Truth Value=\(x^{G}\)| 평균=\(\mu\), 분산=\(\Sigma\)) 값이 Maximize 되려면 \(\mu\)는 \(x^{G}\) 에 가깝게, \(\Sigma\)는 0에 가깝게 나와야한다. 즉 위 Loss function에 의해 모델은 \(\mu\)는 \(x^{G}\) 에 가깝게, \(\Sigma\)는 0에 가깝게 나오도록 학습된다. 이 말은 입력 데이터에 대해 모델의 아웃풋 값이 가우시안 분포를 따른다고 가정했을때, 모델은 주어진 입력에 대하여 Ground Truth Value \(x^{G}\) 를 예측할 확률이 최대가 되도록 하는 Gaussian Distribution의 평균 \(\mu\)과 분산 \(\Sigma\)을 예측하도록 학습되는 것이다. \(\Sigma\)가 0에 수렴하면 PDF 값이 1보다 커지게 되고 그러면 Loss function 값이 음수가 나오지 않나? 라고 생각할 수 있다. 이에 대해서는 아래 Implementation Issue 섹션에서 관련 자료가 있으니 참고하면 된다.

 

그런데, 왜 분산 값 \(\Sigma\) 을 예측하도록 모델을 디자인하였을까?

 

가우시안 분포의 특성으로 분산 값이 커질수록 \(P(\mu)\)의 값이 줄어든다.

 

즉 모델에서 예측된 분산 값이 클수록 예측한 값이 나올 확률이 낮은 값(=불확실성이 높다)으로 판단할 수 있다. 반대로 예측된 분산 값이 0에 가까울수록 예측한 값이 나올 확률이 높다(=불확실성이 낮다)고 판단할 수 있다. 즉, 예측한 분산 값을 Uncertainty로 생각할 수 있다.

 

식(3)을 보면 Model Output에 Sigmoid Function(식(4))을 거치도록 설계하여 분산의 값이 0~1이 되도록 제한하였다. 이렇게 제한함으로써 얻는 이점으로 이 값을 Inference 단계에서 이 값을 확률 값 마냥 직관적으로 쓸 수 있다는 점이고, 예측된 분산의 값이 곧 Uncertainty로 보고 사용할 수 있다는 점이다. 옛날에 읽다 포기한 Uncertainty Estimation 논문은 Uncertainty 값의 범위가 제한되어 있지 않아 실제로 이용하기가 굉장히 어려워보였는데 이 방법은 학습시키기도, 실제 Inference 단계에서도 쓰기 쉬워보인다.

 

최종적으로 예측한 바운딩 박스가 실제로 객체인지, 아니면 Background 혹은 Negative sample인지를 나눌 수 있는 Criterion을 새로 제안하였다. 기존에는 Classification에 대한 확률값만 이용했다면 추가로 Localization에 대한 평균적인 Certainty(=1-Uncertainty)를 이용하였다. Certainty는 그냥 이 리뷰에서 지어낸 말이므로 다른데서는 쓰면 안됨

 

와... 정말 심플하다... Forward pass만 생각해보면 기존 YOLOv3에서 마지막 아웃풋 레이어만 수정된 정도로 증가되는 연산량 또한 무시할만하다.


실험결과도 재밌다.

위 그래프는 KITTI, BDD 데이터셋에 대해 Localization Uncertainty와 그에 따른 IoU 분포를 보이는 그래프인데 실제로 Localization Uncertainty가 높을수록 Predicted Bounding Box와 Ground Truth Bounding Box간의 IoU가 낮게 나오는 것을 관측할 수 있다. 모델이 Localization Uncertainty를 어느정도 잘 예측하고 있구나라고 생각이든다.

 

위 테이블은 KITTI, BDD 데이터셋에 대해 Detection Threshold value를 0.5로 설정했을때(수식 10.의 값이 0.5보다 낮으면 검출 결과를 무시한다는 의미) 카운트된 FP와 TP 수를 보이는 테이블이다. FP는 오탐, TP는 정탐이다. 오탐 케이스의 수는 낮을수록, 정탐 케이스의 수는 높을수록 좋다. Localization에 대한 Uncertainty를 고려하지 않은 YOLOv3에 비하여 Gaussian YOLOv3는 FP수가 40%가량 낮은 것을 확인할 수 있고, TP수는 YOLOv3보다 높은 것을 알 수 있다. 단순히 mAP(mean Average Precision)로 비교한게 아닌 TP와 FP 수를 비교한 테이블까지 있어서 실험결과를 이해하는데 너무나도 큰 도움이 되었다. 

 

실제 구현은 아래의 프로젝트들을 참고해보자.

 

Official Implementation

https://github.com/jwchoi384/Gaussian_YOLOv3

 

GitHub - jwchoi384/Gaussian_YOLOv3: Gaussian YOLOv3: An Accurate and Fast Object Detector Using Localization Uncertainty for Aut

Gaussian YOLOv3: An Accurate and Fast Object Detector Using Localization Uncertainty for Autonomous Driving (ICCV, 2019) - GitHub - jwchoi384/Gaussian_YOLOv3: Gaussian YOLOv3: An Accurate and Fast ...

github.com

 

PyTorch Implementation

https://github.com/motokimura/PyTorch_Gaussian_YOLOv3/blob/master/models/yolo_layer.py

 

GitHub - motokimura/PyTorch_Gaussian_YOLOv3: PyTorch implementation of Gaussian YOLOv3 (including training code for COCO dataset

PyTorch implementation of Gaussian YOLOv3 (including training code for COCO dataset) - GitHub - motokimura/PyTorch_Gaussian_YOLOv3: PyTorch implementation of Gaussian YOLOv3 (including training cod...

github.com

 

Implementation Issue

실제로 구현해서 모델을 학습시켜보면 Localization 관련 Loss 값이 음수가 될 수 있다. Loss function (수식 5.)를 참고해보면 Variance가 너무 낮아지면 log 안쪽의 값이 1보다 커지게되기 때문이다. 관련 이슈가 이미 Official Implementation 프로젝트에 있다.

 

https://github.com/jwchoi384/Gaussian_YOLOv3/issues/60

 

Loss value is going to be negative....How can I think this is proper convergence? · Issue #60 · jwchoi384/Gaussian_YOLOv3

Negative Log-Likelihood loss value is going to be negative... I think it's possible but....i can't make sure that the loss is converged... Have you experienced this problem? loss가 음수로 떨어지는데...

github.com

 

이를 방지해주고자 Gaussian PDF 계산시 분모에 곱해지는 표준편차 값에다가 epsilon 마냥 sigma_const란 것을 더하도록 설계한 것을 확인할 수 있었다.

 

YOLOv4 with Gaussian Modeling

https://arxiv.org/abs/2004.10934

 

YOLOv4: Optimal Speed and Accuracy of Object Detection

There are a huge number of features which are said to improve Convolutional Neural Network (CNN) accuracy. Practical testing of combinations of such features on large datasets, and theoretical justification of the result, is required. Some features operate

arxiv.org

 

공개 당시 Object Detection 모델의 성능을 한껏 끌어올릴 수 있는 갖가지 방법을 모두 적용했을때의 결과를 실은 YOLOv4 논문에서도 Gaussian YOLOv3의 방법을 적용했을때의 결과(on COCO)가 나와있다.

 

CSPResNeXt50-PANet-SPP-SAM-G 가 Gaussian YOLOv3의 방법을 적용해 Localization을 했을때의 결과인데 AP(Average Precision)로 보면 성능의 Drop이 있는 것을 확인할 수 있다. AP보다는 특정 Detection Threshold를 두고, TP와 FP 수를 비교한 결과가 있으면 더 좋았을 거 같은데 아쉽게도 YOLOv4에서는 이런 실험은 하지 않았다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함