YOLO Vision 2026:

최고의 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개의 배경 이미지를 포함하고 있습니다). 배경 이미지에는 라벨이 필요 없습니다.

COCO 데이터셋 클래스 분포 분석

모델 선택#

YOLOv5x 및 YOLOv5x6와 같은 더 큰 모델은 거의 모든 경우에 더 나은 결과를 생성하지만, 파라미터가 더 많고, 학습에 더 많은 CUDA 메모리가 필요하며, 실행 속도가 더 느립니다. 모바일 배포의 경우 YOLOv5s/m을 권장하며, 클라우드 배포의 경우 YOLOv5l/x를 권장합니다. 모든 모델의 전체 비교는 README 를 참조하십시오.

YOLOv5 Models

  • 사전 학습된 가중치에서 시작. 소규모에서 중규모 데이터셋(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와 같은 더 작은 모델 변형을 사용하는 것도 고려하십시오.

댓글