최상의 YOLOv5 학습 결과를 위한 팁
📚 이 가이드는 YOLOv5 🚀로 최상의 mAP 및 학습 결과를 생성하는 방법을 설명합니다.
대부분의 경우 데이터 세트가 충분히 크고 레이블이 잘 지정되어 있다면 모델이나 학습 설정을 변경하지 않고도 좋은 결과를 얻을 수 있습니다. 처음에는 좋은 결과를 얻지 못하더라도 개선하기 위해 취할 수 있는 조치가 있지만, 변경 사항을 고려하기 전에 항상 모든 기본 설정으로 먼저 학습할 것을 권장합니다. 이렇게 하면 성능 기준을 설정하고 개선 영역을 파악하는 데 도움이 됩니다.
학습 결과에 대한 질문이 있는 경우 도움이 되는 답변을 기대한다면 가능한 한 많은 정보를 제공하는 것이 좋습니다. 결과 플롯(학습 손실, 검증 손실, P, R, mAP), PR 곡선, 혼동 행렬, 학습 모자이크, 테스트 결과 및 labels.png와 같은 데이터 세트 통계 이미지를 포함합니다. 이 모든 것은 일반적으로 다음 위치에 있습니다. project/name
디렉토리에 있습니다. yolov5/runs/train/exp
.
YOLOv5 학습에서 최상의 결과를 얻고자 하는 사용자를 위해 전체 가이드를 마련했습니다.
데이터세트
- 클래스당 이미지 수. 클래스당 ≥ 1500개의 이미지를 권장합니다.
- 클래스 당 인스턴스 수. 클래스 당 10000개 이상의 인스턴스(레이블이 지정된 객체) 권장
- 이미지 다양성. 배포 환경을 대표해야 합니다. 실제 사용 사례의 경우 하루 중 다른 시간, 다른 계절, 다른 날씨, 다른 조명, 다른 각도, 다른 소스(온라인 스크랩, 로컬 수집, 다른 카메라) 등의 이미지를 권장합니다.
- 레이블 일관성. 모든 이미지에 있는 모든 클래스의 모든 인스턴스에 레이블을 지정해야 합니다. 부분적인 레이블 지정은 작동하지 않습니다.
- 레이블 정확도. 레이블은 각 객체를 밀접하게 둘러싸야 합니다. 객체와 경계 상자 사이에 공간이 없어야 합니다. 레이블이 없는 객체가 없어야 합니다.
- 레이블 검증. 보기
train_batch*.jpg
학습 시작 시 레이블이 올바르게 나타나는지 확인합니다. 예를 들어 예시 모자이크. - 배경 이미지. 배경 이미지는 거짓 긍정(FP)을 줄이기 위해 데이터 세트에 추가되는 객체가 없는 이미지입니다. FP를 줄이기 위해 약 0~10%의 배경 이미지를 사용하는 것이 좋습니다(COCO는 참조용으로 1000개의 배경 이미지, 즉 총 이미지의 1%를 가지고 있습니다). 배경 이미지에는 레이블이 필요하지 않습니다.
모델 선택
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에서 찾을 수 있습니다.
- Epochs. 300 epochs부터 시작합니다. 이것이 초기에 과적합되면 epochs를 줄일 수 있습니다. 300 epochs 후에 과적합이 발생하지 않으면 더 오래 학습하십시오(예: 600, 1200 epochs 등). COCO는 기본 해상도로 학습합니다.
--img 640
데이터 세트 내 작은 객체의 양이 많기 때문에 더 높은 해상도에서 학습하는 것이 유리할 수 있습니다.--img 1280
작은 객체가 많은 경우 사용자 지정 데이터 세트는 기본 해상도 또는 더 높은 해상도에서 학습하는 것이 좋습니다. 최상의 추론 결과는 학습이 실행된 것과 동일한 해상도에서 얻을 수 있습니다.--img
예를 들어, 학습을--img 1280
에서 실행했다면 테스트 및 탐지도--img 1280
. - 배치 크기. 하드웨어가 허용하는 가장 큰
--batch-size
하드웨어가 허용하는 범위 내에서 설정해야 합니다. 작은 배치 크기는 성능 저하를 야기할 수 있습니다. 배치 정규화 통계이며 피해야 합니다. 다음을 사용할 수 있습니다.--batch-size -1
GPU에 맞는 최적의 배치 크기를 자동으로 선택하려면. - 학습률. 기본 학습률 스케줄은 대부분의 경우에 잘 작동합니다. 더 빠른 수렴을 위해 다음을 사용할 수 있습니다.
--cos-lr
플래그는 코사인 학습률 스케줄링을 활성화하여, epoch에 따라 코사인 곡선을 따라 학습률을 점진적으로 감소시킵니다. - 데이터 증강. YOLOv5에는 여러 훈련 이미지를 결합하는 모자이크와 같은 다양한 증강 기술이 포함되어 있습니다. 마지막 몇 epoch 동안 다음을 사용하는 것을 고려하십시오.
--close-mosaic 10
모자이크 증강을 비활성화하여 훈련을 안정화하는 데 도움이 되도록. - 하이퍼파라미터. 기본 하이퍼파라미터는 hyp.scratch-low.yaml에 있습니다. 수정하기 전에 먼저 기본 하이퍼파라미터로 학습하는 것이 좋습니다. 일반적으로 증강 하이퍼파라미터를 늘리면 과적합이 줄어들고 지연되어 더 긴 학습과 더 높은 최종 mAP가 가능합니다. 손실 구성 요소 게인 하이퍼파라미터(예:
hyp['obj']
)를 줄이면 특정 손실 구성 요소에서 과적합을 줄이는 데 도움이 됩니다. 이러한 하이퍼파라미터를 최적화하는 자동화된 방법은 다음을 참조하십시오. 하이퍼파라미터 진화 튜토리얼. - 혼합 정밀도 훈련. 혼합 정밀도 학습 활성화:
--amp
모델 정확도를 희생하지 않고 학습 속도를 높이고 메모리 사용량을 줄입니다. - 다중 GPU 훈련. GPU가 여러 개인 경우 다음을 사용하십시오.
--device 0,1,2,3
훈련을 분산시켜 훈련 시간을 크게 줄이려면. - 조기 종료. 다음을 사용합니다.
--patience 50
검증 메트릭이 50 epoch 동안 개선되지 않으면 학습을 중단하여 시간을 절약하고 과적합을 방지합니다.
고급 최적화 기법
- 전이 학습. 특수 데이터 세트의 경우, 사전 훈련된 가중치로 시작하여 모델이 특정 작업에 적응하도록 학습 중에 레이어를 점진적으로 고정 해제합니다.
- 모델 가지치기. 학습 후, 불필요한 가중치를 제거하고 성능 손실을 최소화하면서 모델 크기를 줄이기 위해 모델 가지치기를 고려해 보세요.
- 모델 앙상블. 중요한 애플리케이션의 경우, 다양한 구성으로 여러 모델을 훈련하고 예측을 결합하여 정확도를 향상시킵니다.
- 테스트 시간 증강. 추론 중 TTA 활성화:
--augment
입력 이미지의 증강된 버전에서 결과를 평균화하여 예측 정확도를 향상시킵니다.
추가 자료
자세한 내용을 알고 싶으시면 Karpathy의 '신경망 학습 레시피'에서 시작하는 것이 좋습니다. 이 레시피에는 모든 ML 도메인에 광범위하게 적용되는 훌륭한 학습 아이디어가 있습니다: https://karpathy.github.io/2019/04/25/recipe/
학습 설정 및 구성에 대한 자세한 내용은 사용 가능한 모든 매개변수에 대한 포괄적인 설명을 제공하는 Ultralytics 학습 설정 문서를 참조하십시오.
행운을 빌며 🍀 다른 질문이 있으시면 알려주세요!
FAQ
모델이 과적합되었는지 어떻게 알 수 있나요?
훈련 손실이 계속 감소하는 반면 검증 손실이 증가하기 시작하면 모델이 과적합될 수 있습니다. 검증 mAP를 모니터링하십시오. 훈련 손실이 계속 향상되는 동안 mAP가 정체되거나 감소하면 과적합의 징후입니다. 해결 방법으로는 더 많은 훈련 데이터 추가, 데이터 증대 증가 또는 정규화 기술 구현이 있습니다.
YOLOv5 훈련에 가장 적합한 배치 크기는 얼마인가요?
최적의 배치 크기는 GPU 메모리에 따라 다릅니다. 일반적으로 배치 크기가 클수록 배치 정규화 통계 및 훈련 안정성이 향상됩니다. 하드웨어가 메모리 부족 없이 처리할 수 있는 가장 큰 배치 크기를 사용하십시오. 다음을 사용할 수 있습니다. --batch-size -1
설정에 맞는 최적의 배치 크기를 자동으로 결정하려면.
YOLOv5 학습 속도를 높이려면 어떻게 해야 합니까?
학습 속도를 높이려면 --amp를 사용하여 혼합 정밀도 학습을 활성화해 보십시오. --amp
을(를) 사용하여 여러 개의 GPU를 사용합니다. --device 0,1,2,3
, 다음을 사용하여 데이터 세트를 캐싱합니다. --cache
, 배치 크기를 최적화합니다. 절대적인 정확도가 중요하지 않다면 YOLOv5s와 같이 더 작은 모델 버전을 사용하는 것도 고려해 보십시오.