최상의 YOLOv5 학습 결과를 위한 팁#
📚 이 가이드에서는 YOLOv5로 최상의 mAP 및 학습 결과를 얻는 방법을 설명합니다 🚀.
대부분의 경우 데이터셋의 규모가 충분하고 라벨이 잘 지정되어 있다면 모델이나 학습 설정을 변경하지 않아도 좋은 결과를 얻을 수 있습니다. 처음에 좋은 결과를 얻지 못하더라도 개선을 위해 취할 수 있는 단계가 있지만, 변경을 고려하기 전에 항상 먼저 모든 기본 설정으로 학습할 것을 권장합니다. 이렇게 하면 성능 기준선을 설정하고 개선이 필요한 영역을 파악하는 데 도움이 됩니다.
학습 결과에 대한 질문이 있는 경우, 유용한 답변을 기대한다면 가능한 한 많은 정보를 제공할 것을 권장합니다. 여기에는 결과 플롯(train losses, val losses, P, R, mAP), PR 곡선, 혼동 행렬, 학습 모자이크, 테스트 결과, labels.png와 같은 데이터셋 통계 이미지가 포함됩니다. 이러한 파일은 모두 project/name 디렉터리(일반적으로 yolov5/runs/train/exp)에 있습니다.
YOLOv5 학습에서 최상의 결과를 얻고자 하는 사용자를 위해 전체 가이드를 아래에 정리했습니다.
데이터셋#
- 클래스별 이미지 수. 클래스당 ≥ 1500개의 이미지를 권장합니다
- 클래스별 인스턴스 수. 클래스당 ≥ 10000개의 인스턴스(라벨이 지정된 객체)를 권장합니다
- 이미지 다양성. 배포 환경을 대표해야 합니다. 실제 사용 사례에서는 하루 중 서로 다른 시간대, 계절, 날씨, 조명, 각도, 출처(온라인 수집, 로컬 수집, 서로 다른 카메라 등)의 이미지를 사용할 것을 권장합니다.
- 라벨 일관성. 모든 이미지에서 모든 클래스의 모든 인스턴스에 라벨을 지정해야 합니다. 부분적인 라벨 지정은 작동하지 않습니다.
- 라벨 정확도. 라벨은 각 객체를 밀접하게 둘러싸야 합니다. 객체와 바운딩 박스 사이에 빈 공간이 없어야 합니다. 라벨이 누락된 객체가 없어야 합니다.
- Train/val 분할 원칙. 지나치게 낙관적인 메트릭을 방지하려면 검증 및 테스트 이미지가 학습 세트에 절대 포함되지 않도록 해야 합니다. 분할 간 클래스 분포는 유사하게 유지합니다.
- 라벨 검증. 학습 시작 시
train_batch*.jpg을 확인하여 라벨이 올바르게 표시되는지 검증합니다. 즉, 예시 모자이크를 확인합니다. - 배경 이미지. 배경 이미지는 False Positives (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가 감지되면 Automatic Mixed Precision (AMP)을 자동으로 활성화하여 모델 정확도를 저하시키지 않고 학습 속도를 높이며 메모리 사용량을 줄입니다.
- 멀티 GPU 학습. GPU가 여러 개라면
--device 0,1,2,3을 사용하여 GPU 간에 학습을 분산할 수 있으며, 이를 통해 학습 시간을 크게 줄일 수 있습니다. - 조기 중단.
--patience 50을 사용하면 검증 메트릭이 50 에포크 동안 개선되지 않을 때 학습을 중단하여 시간을 절약하고 과적합을 방지할 수 있습니다.
고급 최적화 기법#
- 전이 학습. 특수한 데이터셋의 경우 사전 학습된 가중치로 시작한 다음 학습 중에 레이어를 점진적으로 동결 해제하여 특정 작업에 맞게 모델을 조정합니다.
- 모델 가지치기. 학습 후 모델을 가지치기하여 중복 가중치를 제거하고, 성능을 크게 저하시키지 않으면서 모델 크기를 줄이는 것을 고려해 보세요.
- 모델 앙상블. 중요한 애플리케이션의 경우 서로 다른 구성으로 여러 모델을 학습하고 예측을 결합하여 정확도를 향상합니다.
- 테스트 시점 증강.
--augment을 사용하여 추론 중 TTA를 활성화하면 입력 이미지의 증강 버전에서 얻은 결과를 평균내어 예측 정확도를 향상할 수 있습니다.
추가 읽을거리#
더 자세히 알아보려면 Karpathy의 '신경망 학습 레시피'부터 시작하는 것이 좋습니다. 이 글에는 모든 ML 분야에 폭넓게 적용할 수 있는 훌륭한 학습 아이디어가 담겨 있습니다: 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와 같은 더 작은 모델 변형을 사용하는 것도 고려해 보세요.
