최고의 YOLOv5 학습 결과를 얻기 위한 팁#
📚 이 가이드는 YOLOv5로 최고의 mAP와 학습 결과를 생성하는 방법을 설명합니다 🚀.
대부분의 경우 데이터셋이 충분히 크고 라벨링이 잘 되어 있다면 모델이나 학습 설정을 변경하지 않아도 좋은 결과를 얻을 수 있습니다. 처음에 만족스러운 결과가 나오지 않더라도 개선할 수 있는 단계들이 있지만, 변경을 고려하기 전에 먼저 모든 기본 설정으로 학습해 보시기를 항상 권장합니다. 이는 성능 기준을 확립하고 개선이 필요한 영역을 파악하는 데 도움이 됩니다.
학습 결과에 대해 질문이 있으신 경우, 유용한 답변을 얻으려면 가능한 한 많은 정보를 제공하는 것을 권장합니다. 결과 플롯(학습 손실, 검증 손실, P, R, mAP), PR 곡선, 혼동 행렬, 학습 모자이크, 테스트 결과 및 labels.png와 같은 데이터셋 통계 이미지가 포함됩니다. 이 모든 항목은 project/name 디렉터리에 있으며, 일반적으로 yolov5/runs/train/exp에 위치합니다.
아래에 YOLOv5 학습에서 최상의 결과를 얻고자 하는 사용자를 위한 전체 가이드를 정리해 두었습니다.
데이터셋#
- 클래스당 이미지 수. 클래스당 ≥ 1500장 권장
- 클래스당 인스턴스 수. 클래스당 ≥ 10000개 인스턴스(라벨링된 객체) 권장
- 이미지 다양성. 배포될 환경을 대표해야 합니다. 실제 사용 사례의 경우 시간대, 계절, 날씨, 조명, 각도, 출처(온라인 크롤링, 로컬 수집, 다른 카메라 등)가 다른 이미지를 권장합니다.
- 라벨 일관성. 모든 이미지에 있는 모든 클래스의 모든 인스턴스를 라벨링해야 합니다. 부분적인 라벨링은 작동하지 않습니다.
- 레이블 정확도. 레이블은 각 객체를 밀접하게 감싸야 합니다. 객체와 바운딩 박스 사이에 공백이 있어서는 안 됩니다. 레이블이 누락된 객체가 없어야 합니다.
- 학습/검증 분할 원칙. 과도하게 낙관적인 지표를 피하기 위해 검증 및 테스트 이미지가 학습 세트에 절대 포함되지 않도록 하십시오. 분할 간의 클래스 분포를 유사하게 유지하십시오.
- 레이블 검증. 학습 시작 시
train_batch*.jpg을 확인하여 레이블이 올바르게 나타나는지 확인하십시오. 예를 들어 예시 모자이크를 참조하십시오. - 배경 이미지. 배경 이미지는 데이터셋에 추가되어 오탐(False Positive, FP)을 줄이기 위해 사용되는 객체가 없는 이미지입니다. FP를 줄이기 위해 전체의 약 0-10%를 배경 이미지로 구성하는 것을 권장합니다(참고로 COCO는 전체의 1%인 1000개의 배경 이미지를 포함하고 있습니다). 배경 이미지에는 라벨이 필요 없습니다.
모델 선택#
YOLOv5x 및 YOLOv5x6와 같은 더 큰 모델은 거의 모든 경우에 더 나은 결과를 생성하지만, 파라미터가 더 많고, 학습에 더 많은 CUDA 메모리가 필요하며, 실행 속도가 더 느립니다. 모바일 배포의 경우 YOLOv5s/m을 권장하며, 클라우드 배포의 경우 YOLOv5l/x를 권장합니다. 모든 모델의 전체 비교는 README 표를 참조하십시오.

-
사전 학습된 가중치에서 시작. 소규모에서 중규모 데이터셋(VOC, VisDrone, GlobalWheat 등)에 권장됩니다.
--weights인자에 모델 이름을 전달하십시오. 모델은 최신 YOLOv5 릴리스에서 자동으로 다운로드됩니다.python train.py --data custom.yaml --weights yolov5s.pt python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt -
처음부터 학습 시작. 대규모 데이터셋(COCO, Objects365, OIv6 등)에 권장됩니다. 관심 있는 모델 아키텍처 YAML을 전달하고, 빈
--weights ''인자를 함께 지정하십시오:python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
학습 설정#
무언가를 수정하기 전에, 성능 기준선을 설정하기 위해 먼저 기본 설정으로 학습을 진행하십시오. train.py 설정의 전체 목록은 train.py argparser에서 확인할 수 있습니다.
- 에포크. 300 에포크로 시작하십시오. 이로 인해 조기에 과적합이 발생하면 에포크를 줄일 수 있습니다. 300 에포크 후에도 과적합이 발생하지 않으면 600, 1200 에포크 등 더 오래 학습하십시오.
- 이미지 크기. COCO는
--img 640의 기본 해상도로 학습되지만, 데이터셋에 작은 객체가 많기 때문에--img 1280과 같은 더 높은 해상도로 학습하면 이점을 얻을 수 있습니다. 작은 객체가 많은 경우 커스텀 데이터셋은 기본 해상도 또는 더 높은 해상도로 학습하는 것이 유리합니다. 최상의 추론 결과는 학습이 실행된 것과 동일한--img에서 얻을 수 있습니다. 즉,--img 1280에서 학습한 경우--img 1280에서 테스트 및 검출을 수행해야 합니다. - 배치 크기. 하드웨어가 허용하는 가장 큰
--batch-size을 사용하십시오. 작은 배치 크기는 배치 정규화 통계를 저하시키므로 피해야 합니다.--batch-size -1을 사용하여 GPU에 최적의 배치 크기를 자동으로 선택할 수 있습니다. - 학습률. 기본 학습률 스케줄은 대부분의 경우에 잘 작동합니다. 더 빠른 수렴을 위해
--cos-lr플래그를 사용하여 코사인 학습률 스케줄링을 활성화할 수 있으며, 이는 에포크에 따라 코사인 곡선을 따라 학습률을 점진적으로 줄입니다. - 데이터 증강. YOLOv5는 여러 학습 이미지를 결합하는 모자이크와 같은 다양한 증강 기법을 포함합니다. 학습을 안정화하는 데 도움이 되도록
--hyp파일의mosaic하이퍼파라미터를 통해 증강 강도를 조정하세요. - 하이퍼파라미터. 기본 하이퍼파라미터는 hyp.scratch-low.yaml에 있습니다. 어떤 항목이든 수정하기 전에 먼저 기본 하이퍼파라미터로 학습하는 것을 권장합니다. 일반적으로 증강 하이퍼파라미터를 늘리면 과적합이 줄어들고 지연되어, 더 오랜 학습과 더 높은 최종 mAP가 가능해집니다.
hyp['obj']과 같은 손실 성분 가중치 하이퍼파라미터를 줄이면 해당 특정 손실 성분의 과적합을 줄이는 데 도움이 됩니다. 이러한 하이퍼파라미터를 최적화하는 자동화된 방법은 하이퍼파라미터 진화 튜토리얼을 참조하십시오. - 혼합 정밀도 학습. YOLOv5는 지원되는 GPU가 감지되면 자동으로 AMP(Automatic Mixed Precision)를 활성화하여, 모델 정확도를 희생하지 않으면서 학습 속도를 높이고 메모리 사용량을 줄입니다.
- 다중 GPU 학습. 여러 개의 GPU가 있는 경우
--device 0,1,2,3을 사용하여 그 사이에 학습을 분산시키면 학습 시간을 크게 단축할 수 있습니다. - 조기 종료. 검증 지표가 50 에포크 동안 개선되지 않으면
--patience 50을 사용하여 학습을 중단함으로써 시간을 절약하고 과적합을 방지하십시오.
고급 최적화 기법#
- 전이 학습. 특화된 데이터셋의 경우, 사전 학습된 가중치로 시작하여 학습 중에 레이어를 점진적으로 동결 해제함으로써 모델을 특정 작업에 맞게 조정하십시오.
- 모델 가지치기. 학습 후, 성능 저하 없이 중복 가중치를 제거하고 모델 크기를 줄이기 위해 모델 가지치기를 고려하십시오.
- 모델 앙상블. 중요한 애플리케이션의 경우, 서로 다른 구성으로 여러 모델을 학습하고 그 예측을 결합하여 정확도를 향상시키십시오.
- 테스트 시간 증강. 입력 이미지의 증강된 버전에서 결과를 평균내어 예측 정확도를 향상시키려면
--augment을 사용하여 추론 중에 TTA를 활성화하십시오.
추가 자료#
더 자세히 알고 싶다면, 모든 ML 영역에 걸쳐 광범위하게 적용되는 훌륭한 학습 아이디어를 담고 있는 Karpathy의 'Recipe for Training Neural Networks'에서 시작하는 것이 좋습니다: https://karpathy.github.io/2019/04/25/recipe/
학습 설정 및 구성에 대한 보다 자세한 정보는 사용 가능한 모든 파라미터에 대한 포괄적인 설명을 제공하는 Ultralytics 학습 설정 문서를 참조하십시오.
행운을 빕니다 🍀. 다른 질문이 있으시면 언제든지 알려주십시오!
FAQ#
학습 손실은 계속 감소하는데 검증 손실이 증가하기 시작한다면 모델이 과적합된 것일 수 있습니다. 검증 mAP를 모니터링하십시오. 학습 손실은 계속 개선되는데 검증 mAP가 정체되거나 감소한다면 과적합의 징후입니다. 해결책으로는 학습 데이터 추가, 데이터 증강 증가, 정규화 기법 구현 등이 있습니다.
최적의 배치 크기는 GPU 메모리에 따라 다릅니다. 더 큰 배치 크기는 일반적으로 더 나은 배치 정규화 통계와 학습 안정성을 제공합니다. 메모리 부족 오류 없이 하드웨어가 처리할 수 있는 가장 큰 배치 크기를 사용하십시오.
--batch-size -1을 사용하여 설정에 맞는 최적의 배치 크기를 자동으로 결정할 수 있습니다.학습 속도를 높이려면
--device 0,1,2,3을 사용한 다중 GPU 활용,--cache을 이용한 데이터셋 캐싱, 그리고 배치 크기 최적화를 시도해 보십시오(지원되는 GPU에서는 혼합 정밀도가 자동으로 활성화됩니다). 절대적인 정확도가 중요하지 않은 경우 YOLOv5s와 같은 더 작은 모델 변형을 사용하는 것도 고려하십시오.
