최고의 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 학습에서 최고의 결과를 얻고자 하는 사용자들을 위해 전체 가이드를 아래와 같이 정리했습니다.
데이터셋
- 클래스당 이미지 수. 클래스당 ≥ 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)에 권장됩니다. 빈
--weights ''인수와 함께 관심 있는 모델 아키텍처 YAML 파일을 전달하십시오: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에는 여러 학습 이미지를 결합하는 모자이크와 같은 다양한 증강 기법이 포함되어 있습니다. 마지막 몇 에포크 동안은
--close-mosaic 10을 사용하여 모자이크 증강을 비활성화하는 것을 고려해 보십시오. 이는 학습을 안정화하는 데 도움이 될 수 있습니다. - 하이퍼파라미터. 기본 하이퍼파라미터는 hyp.scratch-low.yaml에 있습니다. 변경하기 전에 먼저 기본 하이퍼파라미터로 학습할 것을 권장합니다. 일반적으로 증강 하이퍼파라미터를 늘리면 과적합이 줄어들고 지연되어 더 긴 학습과 더 높은 최종 mAP가 가능해집니다.
hyp['obj']와 같은 손실 구성 요소 증가 하이퍼파라미터를 줄이면 특정 손실 구성 요소에서 과적합을 줄이는 데 도움이 됩니다. 이러한 하이퍼파라미터를 최적화하는 자동화된 방법은 하이퍼파라미터 진화 튜토리얼을 참조하십시오. - 혼합 정밀도 학습.
--amp로 혼합 정밀도 학습을 활성화하여 모델 정확도를 저하시키지 않으면서 학습 속도를 높이고 메모리 사용량을 줄이십시오. - 멀티 GPU 학습. 여러 개의 GPU가 있는 경우
--device 0,1,2,3을 사용하여 학습을 분산시키십시오. 이는 학습 시간을 크게 줄일 수 있습니다. - 조기 종료. 검증 지표가 50 에포크 동안 개선되지 않으면 학습을 중단하도록
--patience 50을 사용하여 시간을 절약하고 과적합을 방지하십시오.
고급 최적화 기법
- 전이 학습. 특수 데이터셋의 경우 사전 학습된 가중치로 시작하여 학습 중에 레이어를 점진적으로 동결 해제하여 특정 작업에 모델을 적응시키십시오.
- 모델 가지치기. 학습 후, 중복된 가중치를 제거하고 성능 손실 없이 모델 크기를 줄이기 위해 모델 가지치기를 고려하십시오.
- 모델 앙상블. 중요한 애플리케이션의 경우 서로 다른 구성으로 여러 모델을 학습시키고 예측 결과를 결합하여 정확도를 향상시키십시오.
- 테스트 시 증강. 추론 중
--augment로 TTA를 활성화하여 입력 이미지의 증강된 버전에서 얻은 결과를 평균화함으로써 예측 정확도를 개선하십시오.
더 읽어보기
더 자세히 알고 싶다면 Karpathy의 'Recipe for Training Neural Networks'부터 시작하는 것이 좋습니다. 여기에는 모든 ML 도메인에 걸쳐 광범위하게 적용되는 훌륭한 학습 아이디어가 있습니다: https://karpathy.github.io/2019/04/25/recipe/
학습 설정 및 구성에 대한 자세한 내용은 사용 가능한 모든 매개변수에 대한 포괄적인 설명을 제공하는 Ultralytics 학습 설정 문서를 참조하십시오.
행운을 빕니다 🍀 다른 질문이 있으면 알려주세요!
FAQ
모델이 과적합되었는지 어떻게 알 수 있나요?
학습 손실은 계속 감소하는데 검증 손실이 증가하기 시작한다면 모델이 과적합되었을 수 있습니다. 검증 mAP를 모니터링하십시오. 학습 손실은 계속 개선되는데 mAP가 정체되거나 감소한다면 과적합의 징후입니다. 해결책으로는 더 많은 학습 데이터 추가, 데이터 증강 증가 또는 정규화 기법 구현이 있습니다.
YOLOv5 학습을 위한 최적의 배치 크기는 얼마인가요?
최적의 배치 크기는 GPU 메모리에 따라 다릅니다. 더 큰 배치 크기는 일반적으로 더 나은 배치 정규화 통계와 학습 안정성을 제공합니다. 메모리가 부족하지 않는 범위 내에서 하드웨어가 처리할 수 있는 최대 배치 크기를 사용하십시오. --batch-size -1을 사용하여 환경에 최적화된 배치 크기를 자동으로 결정할 수 있습니다.
YOLOv5 학습 속도를 어떻게 높일 수 있나요?
학습 속도를 높이려면 --amp를 사용한 혼합 정밀도 학습 활성화, --device 0,1,2,3을 사용한 멀티 GPU 활용, --cache를 통한 데이터셋 캐싱, 배치 크기 최적화를 시도해 보십시오. 절대적인 정확도가 중요하지 않다면 YOLOv5s와 같은 더 작은 모델 변형을 사용하는 것도 고려하십시오.
