YOLO 모델 학습률 높이기 프로젝트

2024. 12. 1. 00:30프로그래밍/AI

개요

어떻게 저떻게 정말 얕은 지식으로 AI와 관련된 것을 기반지식도 없이 해나가고 있는 상황에서 결국에 직면하게 될 문제를 맞이하게 되었다.

결국 모델의 성능을 높이기 위한 고민은 필수불가결적인데 내가 간과하거나 혹은 미처 알지 못했던 모델의 성능 지표를 분석하고 개선할 수 있는 방법에 대해 정리해보겠다. 

 

 

YOLO 모델 학습 중 맞이한 문제점

처음에 아무것도 모를 때는 몇백개의 데이터셋만으로도 모델이 object detection을 수행하는 것을 보고 정말 재밌다 생각했으나 object를 인식하지 못하는 경우도 있으며 같은 영역내 인식한 ROI가 여러개가 생긴다던지 정확도가 떨어진다던지 하는 문제가 발생하였다.

그래서 모델 학습 후 생성되는 다양한 학습 지표를 분석하면서 모델 성능 개선법에 대해 찾아보게 되었다.

출처 : https://github.com/ultralytics/ultralytics/issues/6650

 

YOLO 성능을 개선시키기 위해 위와 같이 여러가지 방법을 제시한다. 간략하게 요약하자면

 

1. 다양한 형태의 이미지를 학습시켜라. 뒤집는다던지, 다양한 색상, 잘린 이미지 등등

2. 하이퍼파라미터를 활용해 가중치를 조절하여 최적화해라.

 

 

어떤 지표를 참고해야 할까?

YOLO는 학습한 후 F1_curve, P_curve, PR_curve, R_curve와 같은 측정 지표를 제공한다.

 

이 지표들에 대해 이해하려면 관련 용어를 꽤 많이 알아야 하는데 간략하게 요약하면 다음과 같다.

 

precison : 모델 예측의 정밀도
accuracy : 모델 예측의 정확도

true positive : 긍정을 응답했고 그게 맞음(진짜 정답은 긍정임)

true negative : 부정을 응답했고 그게 맞음(진짜 정답은 부정임)

false posivie : 긍정을 응답했으나 틀렸음(진짜 정답은 부정임)

false negative : 부정을 응답했으나 틀렸음(진짜 정답은 긍정임)

recall : 모델 예측의 재현율 : True Positive / (True Positive + False Negative)

-> 이 지표는 False Negative의 비율이 높을 때 중요하게 확인해야 할 지표이다. 왜냐하면 True Posivice든 False Negative든 결국 진짜 정답은 긍정이나 서로 다른 응답이 나왔다는 것이기 때문에 Positive 데이터셋에 대한 정확도를 뜻함. 즉 1에 가까울수록 False Negative의 비율이 적다는 것을 의미하므로 좋다고 볼 수 있음.

threshold : 임계치, confidence가 몇 이상일 때 양성(Positive)으로 분류하겠느냐의 기준치가 됨. 
-> 예를들어 threshold를 0.5로 설정한다면 confidence가 0.5일때, 즉 예측 확률이 50%일 때 양성으로 분류하겠다는 것이다. 따라서 threshold를 높게 설정할 수록 모델의 양성 판단의 샘플 수가 줄어듬(True positive, False Positive). True Positive가 줄어든다는 것은 False Negative가 증가한다는 것과 논리적 동치이기 때문에 분자는 작아지고 분모는 유지되는 것이다. 즉 값이 감소함.

Recall-Confidence 그래프에서의 confidence는 threshold와 같은 뜻으로 봐도 된다.

결론적으로는 R-curve 그래프는 시작점이 1에 가까울수록 좋으며 confidence(threshold)가 높아져도 감소폭이 완만한 것이 좋다고 볼 수 있다.(기준점이 높은데도 불구하고 양성 데이터 샘플을 놓치지 않고 올바르게 True Positive를 판단한것이므로)

 

https://www.mindee.com/blog/how-use-confidence-scores-ml-models

 

Accuracy와 Precison의 차이점에 관한 좋은 예시

https://wikidocs.net/124957

 

이 같은 기본적인 개념을 알아야 지표를 보고 뭐가 좋은지를 판단할 수 있을 것이다.

또한 위의 여러가지 지표들이 어떤 값을 가져야 좋은지에 대해 정리된 컬럼들도 확인할 수 있다.

mindee.com/blog/how-use-confidence-scores-ml-models

 

YOLO 학습 후 부산물(?) 분석

체크포인트 별로 비교해보겠다.

P-curve 그래프(좌측 : 체크포인트4, 우측 : 체크포인트8)

위에서 설명했듯이 confidence 점수는 높으면 높을수록 좋다. 좌측의 그래프를 보면 모델이 3.8% 확신하는 단계에서 이미 예측을 끝마친 상태이다. 즉 매우 부정확한 상태라고 볼 수 있다. 그러나 여러번의 학습을 거쳐 우측의 그래프는 36.8% 확신하는 예측을 한 것이다. 실제로 같은 리소스에 대한 테스트 결과도 당연히 개선되었다.

 

 

Recall-Confidence 그래프 (좌측 : 체크포인트4, 우측 : 체크포인트8)

Recall에 대한 설명이 조금 난해했던 것 같은데 그래프로 보면 쉽게 이해할 수 있으리라 생각한다.

전술했듯이 초기값은 1에 가까운 것이 좋으며 임계치(그래프 상 confidence)가 높아짐에도 recall score는 1에 가까운 상태를 유지하는 것이 좋다. 따라서 좌측의 그래프는 학습이 부족한 모델이라고 판단할 수 있고 우측도 높은 임계치(0.6이상)에서는 양성 데이터 샘플을 많이 놓치는 것을 확인할 수 있다.

 

 

'프로그래밍 > AI' 카테고리의 다른 글

Roboflow를 활용한 YOLO 사용법  (2) 2024.11.18