Meet YOLO26: next-gen vision AI.

Link to this section최고의 YOLOv5 학습 결과를 얻기 위한 팁#

📚 이 가이드는 YOLOv5로 최고의 mAP와 학습 결과를 생성하는 방법을 설명합니다 🚀.

대부분의 경우 데이터셋이 충분히 크고 라벨링이 잘 되어 있다면 모델이나 학습 설정을 변경하지 않아도 좋은 결과를 얻을 수 있습니다. 처음에 만족스러운 결과가 나오지 않더라도 개선할 수 있는 단계들이 있지만, 변경을 고려하기 전에 먼저 모든 기본 설정으로 학습해 보시기를 항상 권장합니다. 이는 성능 기준을 확립하고 개선이 필요한 영역을 파악하는 데 도움이 됩니다.

If you have questions about your training results we recommend you provide the maximum amount of information possible if you expect a helpful response, including results plots (train losses, val losses, P, R, mAP), PR curve, confusion matrix, training mosaics, test results and dataset statistics images such as labels.png. All of these are located in your project/name directory, typically yolov5/runs/train/exp.

아래에 YOLOv5 학습에서 최상의 결과를 얻고자 하는 사용자를 위한 전체 가이드를 정리해 두었습니다.

Link to this section데이터셋#

  • 클래스당 이미지 수. 클래스당 ≥ 1500장 권장
  • 클래스당 인스턴스 수. 클래스당 ≥ 10000개 인스턴스(라벨링된 객체) 권장
  • 이미지 다양성. 배포될 환경을 대표해야 합니다. 실제 사용 사례의 경우 시간대, 계절, 날씨, 조명, 각도, 출처(온라인 크롤링, 로컬 수집, 다른 카메라 등)가 다른 이미지를 권장합니다.
  • 라벨 일관성. 모든 이미지에 있는 모든 클래스의 모든 인스턴스를 라벨링해야 합니다. 부분적인 라벨링은 작동하지 않습니다.
  • 라벨 정확도. 라벨은 각 객체를 밀접하게 감싸야 합니다. 객체와 바운딩 박스 사이에 공간이 있어서는 안 됩니다. 라벨이 누락된 객체가 없어야 합니다.
  • 학습/검증 분할 원칙. 과도하게 낙관적인 지표를 피하기 위해 검증 및 테스트 이미지가 학습 세트에 절대 포함되지 않도록 하십시오. 분할 간의 클래스 분포를 유사하게 유지하십시오.
  • 라벨 검증. 학습 시작 시 train_batch*.jpg를 확인하여 라벨이 올바르게 나타나는지 검증하십시오. 예시 모자이크를 참조하십시오.
  • 배경 이미지. 배경 이미지는 데이터셋에 추가되어 오탐(False Positive, FP)을 줄이기 위해 사용되는 객체가 없는 이미지입니다. FP를 줄이기 위해 전체의 약 0-10%를 배경 이미지로 구성하는 것을 권장합니다(참고로 COCO는 전체의 1%인 1000개의 배경 이미지를 포함하고 있습니다). 배경 이미지에는 라벨이 필요 없습니다.

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

Link to this section모델 선택#

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
  • 처음부터 학습(From Scratch). 대규모 데이터셋(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

Link to this section학습 설정#

무엇을 수정하기 전에, 성능 기준을 확립하기 위해 먼저 기본 설정으로 학습하십시오. train.py 설정 전체 목록은 train.py argparser에서 찾을 수 있습니다.

  • 에포크(Epochs). 300 에포크로 시작하십시오. 이 단계에서 조기 과적합이 발생하면 에포크를 줄일 수 있습니다. 300 에포크 후에도 과적합이 발생하지 않으면 600, 1200 에포크 등 더 오래 학습시키십시오.
  • 이미지 크기. COCO는 --img 640의 기본 해상도로 학습하지만, 데이터셋에 작은 객체가 많기 때문에 --img 1280과 같이 더 높은 해상도로 학습하는 것이 유리할 수 있습니다. 작은 객체가 많다면 커스텀 데이터셋도 기본 해상도나 더 높은 해상도에서 학습할 때 유리합니다. 가장 좋은 추론 결과는 학습 시 사용한 것과 동일한 --img 크기로 얻을 수 있습니다. 즉, --img 1280으로 학습했다면 테스트와 검출도 --img 1280에서 수행해야 합니다.
  • 배치 사이즈(Batch size). 하드웨어가 허용하는 가장 큰 --batch-size를 사용하십시오. 작은 배치 사이즈는 불량한 배치 정규화 통계를 생성하므로 피해야 합니다. --batch-size -1을 사용하여 GPU에 최적인 배치 사이즈를 자동으로 선택할 수 있습니다.
  • 학습률(Learning rate). 기본 학습률 스케줄은 대부분의 경우 잘 작동합니다. 더 빠른 수렴을 위해 코사인 학습률 스케줄링을 활성화하는 --cos-lr 플래그를 시도해 보십시오. 이는 에포크에 따라 코사인 곡선을 따라 학습률을 점진적으로 줄여줍니다.
  • Data augmentation. YOLOv5 includes various augmentation techniques like mosaic, which combines multiple training images. Adjust augmentation strength via the mosaic hyperparameter in your --hyp file to help stabilize training.
  • 하이퍼파라미터. 기본 하이퍼파라미터는 hyp.scratch-low.yaml에 있습니다. 수정을 고려하기 전에 먼저 기본 하이퍼파라미터로 학습하는 것을 권장합니다. 일반적으로 증강 하이퍼파라미터를 늘리면 과적합이 줄어들고 지연되어 더 긴 학습과 더 높은 최종 mAP가 가능해집니다. hyp['obj']와 같은 손실 성분 이득 하이퍼파라미터를 줄이면 해당 특정 손실 성분의 과적합을 줄이는 데 도움이 됩니다. 이러한 하이퍼파라미터를 최적화하는 자동화된 방법은 하이퍼파라미터 진화 튜토리얼을 참조하십시오.
  • 혼합 정밀도(Mixed precision) 학습. YOLOv5는 지원되는 GPU가 감지되면 자동으로 자동 혼합 정밀도(AMP)를 활성화하여 모델 정확도를 희생하지 않으면서 학습 속도를 높이고 메모리 사용량을 줄입니다.
  • 멀티 GPU 학습. 여러 개의 GPU가 있는 경우 --device 0,1,2,3을 사용하여 학습을 분산시키면 학습 시간을 크게 단축할 수 있습니다.
  • 조기 종료(Early stopping). 검증 지표가 50 에포크 동안 개선되지 않으면 학습을 중단하도록 --patience 50을 사용하여 시간을 절약하고 과적합을 방지하십시오.

Link to this section고급 최적화 기법#

  • 전이 학습(Transfer learning). 특수 데이터셋의 경우 사전 학습된 가중치로 시작하여 학습 중에 레이어를 점진적으로 동결 해제하여 모델을 특정 작업에 적응시키십시오.
  • 모델 가지치기(Model pruning). 학습 후, 중복된 가중치를 제거하고 상당한 성능 손실 없이 모델 크기를 줄이기 위해 모델 가지치기를 고려하십시오.
  • 모델 앙상블(Model ensemble). 중요한 애플리케이션의 경우, 서로 다른 구성으로 여러 모델을 학습시키고 예측 결과를 결합하여 정확도를 향상시키십시오.
  • 테스트 시점 증강(Test-time augmentation). 추론 시 --augment를 사용하여 TTA를 활성화하면 입력 이미지의 증강된 버전들로부터 결과를 평균화하여 예측 정확도를 향상시킬 수 있습니다.

Link to this section추가 자료#

더 자세히 알고 싶으시다면 Karpathy의 '신경망(Neural Networks) 학습을 위한 레시피'부터 시작하는 것을 권장합니다. 이 자료에는 모든 ML 도메인에 걸쳐 광범위하게 적용되는 훌륭한 학습 아이디어가 포함되어 있습니다: https://karpathy.github.io/2019/04/25/recipe/

학습 설정 및 구성에 대한 자세한 정보는 Ultralytics 학습 설정 문서를 참조하십시오. 이 문서에서는 사용 가능한 모든 파라미터에 대한 포괄적인 설명을 제공합니다.

행운을 빕니다 🍀. 다른 질문이 있으시면 언제든지 알려주십시오!

Link to this sectionFAQ#

Link to this section내 모델이 과적합되었는지 어떻게 알 수 있나요?#

학습 손실은 계속 감소하는데 검증 손실이 증가하기 시작한다면 모델이 과적합된 것일 수 있습니다. 검증 mAP를 모니터링하십시오. 학습 손실은 계속 개선되는데 검증 mAP가 정체되거나 감소한다면 과적합의 징후입니다. 해결책으로는 학습 데이터 추가, 데이터 증강 증가, 정규화 기법 구현 등이 있습니다.

Link to this sectionYOLOv5 학습을 위한 최적의 배치 사이즈는 무엇인가요?#

최적의 배치 사이즈는 GPU 메모리에 따라 다릅니다. 배치 사이즈가 클수록 일반적으로 더 나은 배치 정규화 통계와 학습 안정성을 제공합니다. 메모리 부족 없이 하드웨어가 처리할 수 있는 최대 배치 사이즈를 사용하십시오. --batch-size -1을 사용하여 환경에 최적인 배치 사이즈를 자동으로 결정할 수 있습니다.

Link to this sectionYOLOv5 학습 속도를 어떻게 높일 수 있나요?#

학습 속도를 높이려면 다음을 시도하십시오: --device 0,1,2,3을 사용하여 여러 GPU 활용, --cache로 데이터셋 캐싱, 배치 사이즈 최적화(지원되는 GPU에서는 혼합 정밀도가 자동으로 활성화됩니다). 또한 절대적인 정확도가 중요하지 않다면 YOLOv5s와 같은 더 작은 모델 변형을 사용하는 것을 고려하십시오.

댓글