AI 시각지능 & 멀티모달

AI 시각 지능 YOLO 모델링

수진97 2025. 11. 10. 21:31

안녕하세요~!

오늘 포스팅은 YOLO 모델링에 대해 자세히 살펴보겠습니다!

 

 

1. YOLO 모델 사용하기

1. UltraLytics 라이브러리 사용

=> 사용자가 쉽게 객체탐지를 수행할 수 있도록 PyTorch 기반의 강력한 딥러닝 모델을 제공

=> settings(YOLO 모델 사용 위한 환경 세팅 함수) / YOLO(모델 다운로드 함수)

 

 

2. 모델 다운로드

- 모델 버전과 task 지정 후 모델 다운로드

- task : detect, segment, classify, pose

- 여기서 n은 나노(작은 모델) 의미 => s,l,m 등 다양한 옵션 존재  

- pt는 파이토치를 의미함.

 

 

 

3. 모델 사용

- model.predict()와 model() 은 동일 => .predict 생략 가능

- save = True : 탐지 결과 저장

- conf = 0.25 : Confidence Score(기본값 0.25일 경우, 생략 가능)

- iou = 0.45 : IoU(기본값 0.45일 경우, 생략가능)

 

=> 여기서 results는 리스트 형태임.

=> results[0] 은 탐지 결과를 담고 있는 객체를 의미

 

 

* results[0] 주요 속성

1) .names : yolo 모델이 탐지할 수 있는 80개 객체 담김(person, bicycle, car 등)

2) .boxes : 탐지된 객체의 바운딩 박스

3) .conf : 특정 박스의 confidence score

4) .cls : 특정 박스의 예측된 클래스 ID

5) .xyxy : 바운딩 박스 좌표1 (x_min, y_min, x_max, y_max)

6) .xywh : 바운딩 박스 좌표2 (x_center, y_center, width, height)

7) .xyxyn , .xywhn : normalization

 

 

 

4. Confidence Score 임계 값 조정

1) conf = 0.7(높은 신뢰 허용 기준, 70% 이상) 

- Confidence Score가 0.7 이상인 Bounding Box만 신뢰를 허용하여 남기고, 0.7 미만의 나머지 객체들은 탐지(X)

- 탐지된 박스 개수가 적음. => 놓치는 객체가 많을 수 있음(FN 증가 == 미탐 증가 == Recall 감소)

 

2) conf = 0.1(낮은 신뢰 허용 기준, 10% 이상)

- Confidence Score가 0.1 이상인 Bounding Box 모두 탐지 => 신뢰 허용 기준이 낮기 때문에 모두 수용

- 즉, 신뢰도가 낮더라도 모든 예측을 표시하다 보니 잘못된 탐지도 많아짐 (FP 증가 == 오탐 증가 == Precision 감소)

 

 

3) iou = 0.8 (높은 중복 허용도, 80% 이상)

- 박스가 80% 이상은 겹쳐야 중복으로 판단.

=> 중복 허용을 많이 하기 때문에, 겹치는 박스가 많아도 대부분 버려지지 않고 유지됨.

 

- 장점 : 서로 붙어있는 가까운 객체 잘 구분

- 단점 : 중복 박스 많아 보일 수 있음.

 

 

4) iou = 0.1 (낮은 중복 허용도, 10% 이상)

- 박스가 10%만 겹쳐도 중복으로 판단

=> 중복 허용을 적게 하기 때문에, 조금이라도 겹치면 버리고 박스 하나만 남김

 

- 장점 : 중복을 억제했기 때문에 깨끗한 결과 도출

- 단점 : 서로 가까운 객체가 하나로 합쳐져 탐지가 안될 수 있음.

 

 

2. YOLO 모델링 - 파인 튜닝

-  Roboflow에서 데이터를 다운로드하고, data.yaml 파일 준비

=> data.yaml 에는 데이터 폴더 구조 및 label 정보를 담고 있고, 코드에서 데이터 로딩 시 yaml 파일 참조.

data.yaml 파일로 학습시키면 됨.

 

 

1) 학습 : model.train()

=> train, valid 폴더의 데이터를 이용해 학습 수행 후 최종 성능 계산

 

- lr0 = 0.0001 : 학습률은 작게

- patience : Early Stopping 옵션(기본값 : 100)

- batch(배치 크기)

- optimizer : 옵티마이저 선택(Adam). 기본값 auto(자동 선택)

- weight_decay : L2 가중치 규제, 기본값 0.0005

- dropout : 드롭아웃 비율, 기본값 0

 

 

 

2) 검증(성능 : 전체 all 관점 / class 관점으로 구분) : model.val()

검증 성능 : 수시로 튜닝하며 학습할 때 확인하는 성능을 의미

테스트 성능 : 튜닝을 마친 후, 모델에 대해 최종 성능을 확인

 

- Images  : 검증 셋 이미지

- Instances  : 레이블 된 객체

- Box(P) : Precision 정밀도 (모델이 감지한 객체 중 올바르게 감지한 비율, 높은 Precision -> 오탐(FP) 적음)

- R : Recall 재현율 (실제 객체 중 모델이 감지한 비율, 높은 Recall -> 미탐(FN)이 적음)

- mAP50 : GT(정답 박스)와 비교하여 IoU 50% 기준에서 측정한 mAP. 보통 0.9 이상이면 매우 좋은 성능

=> 보통 50이 일반적으로 쓰이는 성능 평가 지표 

 

- mAP50-95 : 다양한 IoU(50 ~ 95%) 기준으로 0.05 간격으로 나누어 측정한 평균 성능. 일반적으로 0.6 이상이면 괜찮은 성능.

출처 : https://velog.io/@ivvi/CV-YOLO-%ED%95%99%EC%8A%B5-%EC%84%B1%EB%8A%A5-%EC%A7%80%ED%91%9C

 

 

AP(Average Precision)

- Precision-Recall 곡선 아래 면적(AUC, Area Under Curve)을 의미

- 다양한 Confidence Threshold(신뢰도 임계 값)에서 계산한 후, 그 값을 평균 냄.

=> 여러 개 Confidence Threshold 설정(ex. 0.5, 0.6 ... 0.95)

=> 각각의 임계값에서 Precision과 Recall 계산해서 그래프를 그림.

=> 곡선 아래 면적(AUC)을 구하면 AP값이 됨.

 

 

mAP50

- 모든 클래스의 AP를 IoU 50% 기준에서 평균 낸 값

- IoU 50% 기준은 IoU >= 0.5일 때, 객체를 올바르게 탐지했다고 판단

=> 즉, GT와 예측된 박스가 50% 이상 겹치면 정답으로 인정

 

* mAP@50이 높은 경우?
- 예측한 객체 박스들이 실제 객체 박스와 잘 겹친다는 의미

- 일반적으로 객체 탐지 모델의 기본 성능을 측정 시, mAP50 사용

 

 

 

mAP50-95(IoU 50~95%)

- 더욱 엄격한 평가 기준. IoU를 0.50 ~ 0.95까지 0.05 간격으로 나누어 계산

- 다양한 IoU 조건에서 평균적인 모델의 성능을 평가하는 지표

 

mAP@50-95 = (AP50 + AP55 + AP60... + AP95) / 10

 

 

*mAP@50-95가 낮은 경우?

- 정확한 객체 위치를 맞추는 것이 어려운 경우

- 작은 객체, 겹쳐있는 객체에서 오차가 클 가능성이 높음.

 

 

 

* 요약

mAP50 : 객체를 적절하게 찾는 성능

mAP50-95 : 객체 위치를 정밀하게 찾는 성능