YOLOv5 모델 앙상블
📚 본 가이드에서는 향상된 mAP 및 재현율을 위해 테스트 및 추론 중에 Ultralytics YOLOv5 🚀 모델 앙상블을 사용하는 방법을 설명합니다.
앙상블 학습에서:
앙상블 모델링은 여러 개의 다양한 모델을 생성하여 결과를 예측하는 프로세스이며, 다양한 모델링 알고리즘을 사용하거나 서로 다른 학습 데이터 세트를 사용합니다. 그런 다음 앙상블 모델은 각 기본 모델의 예측을 집계하고 보이지 않는 데이터에 대한 최종 예측을 한 번에 수행합니다. 앙상블 모델을 사용하는 동기는 예측의 일반화 오류를 줄이기 위함입니다. 기본 모델이 다양하고 독립적인 한, 앙상블 접근 방식을 사용하면 모델의 예측 오류가 줄어듭니다. 이 접근 방식은 예측을 할 때 집단 지성을 추구합니다. 앙상블 모델에는 모델 내에 여러 개의 기본 모델이 있지만 단일 모델로 작동하고 수행됩니다.
시작하기 전에
requirements.txt를 복제하고 Python>=3.8.0 환경에 설치합니다. 여기에는 PyTorch>=1.8이 포함됩니다. 모델 및 데이터 세트는 최신 YOLOv5 릴리스에서 자동으로 다운로드됩니다.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
정상적으로 테스트
앙상블하기 전에 단일 모델의 기준 성능을 설정하십시오. 이 명령은 이미지 크기 640 픽셀에서 COCO val2017에 대해 YOLOv5x를 테스트합니다. yolov5x.pt
은(는) 사용 가능한 모델 중 가장 크고 정확도가 높습니다. 다른 옵션으로는 yolov5s.pt
, yolov5m.pt
및 yolov5l.pt
, 또는 사용자 정의 데이터 세트를 학습하여 얻은 자체 체크포인트 ./weights/best.pt
입니다. 사용 가능한 모든 모델에 대한 자세한 내용은 다음을 참조하십시오. 사전 훈련된 체크포인트 테이블.
python val.py --weights yolov5x.pt --data coco.yaml --img 640 --half
출력:
val: data=./data/coco.yaml, weights=['yolov5x.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.65, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
val: Scanning '../datasets/coco/val2017' images and labels...4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:01<00:00, 2846.03it/s]
val: New cache created: ../datasets/coco/val2017.cache
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [02:30<00:00, 1.05it/s]
all 5000 36335 0.746 0.626 0.68 0.49
Speed: 0.1ms pre-process, 22.4ms inference, 1.4ms NMS per image at shape (32, 3, 640, 640) # <--- baseline speed
Evaluating pycocotools mAP... saving runs/val/exp/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.504 # <--- baseline mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.688
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.546
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.351
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.551
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.644
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.382
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.628
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.681 # <--- baseline mAR
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.524
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.735
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.826
앙상블 테스트
여러 사전 훈련된 모델을 테스트 및 추론 시 함께 앙상블하려면 추가 모델을 간단히 추가하면 됩니다. --weights
기존 val.py 또는 detect.py 명령에서 인수입니다. 이 예에서는 2개 모델의 앙상블을 함께 테스트합니다.
- YOLOv5x
- YOLOv5l6
python val.py --weights yolov5x.pt yolov5l6.pt --data coco.yaml --img 640 --half
출력:
val: data=./data/coco.yaml, weights=['yolov5x.pt', 'yolov5l6.pt'], batch_size=32, imgsz=640, conf_thres=0.001, iou_thres=0.6, task=val, device=, single_cls=False, augment=False, verbose=False, save_txt=False, save_conf=False, save_json=True, project=runs/val, name=exp, exist_ok=False, half=True
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients # Model 1
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients # Model 2
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt'] # Ensemble notice
val: Scanning '../datasets/coco/val2017.cache' images and labels... 4952 found, 48 missing, 0 empty, 0 corrupted: 100% 5000/5000 [00:00<00:00, 49695545.02it/s]
Class Images Labels P R mAP@.5 mAP@.5:.95: 100% 157/157 [03:58<00:00, 1.52s/it]
all 5000 36335 0.747 0.637 0.692 0.502
Speed: 0.1ms pre-process, 39.5ms inference, 2.0ms NMS per image at shape (32, 3, 640, 640) # <--- ensemble speed
Evaluating pycocotools mAP... saving runs/val/exp3/yolov5x_predictions.json...
...
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.515 # <--- ensemble mAP
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.699
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.557
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.356
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.563
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.668
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.387
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.638
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.689 # <--- ensemble mAR
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.526
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.743
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.844
앙상블 추론
모델을 추가적으로 다음 위치에 추가합니다. --weights
앙상블 추론을 실행하는 인수:
python detect.py --weights yolov5x.pt yolov5l6.pt --img 640 --source data/images
출력:
YOLOv5 🚀 v5.0-267-g6a3ee7c torch 1.9.0+cu102 CUDA:0 (Tesla P100-PCIE-16GB, 16280.875MB)
Fusing layers...
Model Summary: 476 layers, 87730285 parameters, 0 gradients
Fusing layers...
Model Summary: 501 layers, 77218620 parameters, 0 gradients
Ensemble created with ['yolov5x.pt', 'yolov5l6.pt']
image 1/2 /content/yolov5/data/images/bus.jpg: 640x512 4 persons, 1 bus, 1 tie, Done. (0.063s)
image 2/2 /content/yolov5/data/images/zidane.jpg: 384x640 3 persons, 2 ties, Done. (0.056s)
Results saved to runs/detect/exp2
Done. (0.223s)
모델 앙상블의 장점
YOLOv5를 사용한 모델 앙상블은 다음과 같은 여러 가지 이점을 제공합니다.
- 향상된 정확도: 위의 예에서 볼 수 있듯이 여러 모델을 앙상블하면 mAP가 0.504에서 0.515로, mAR이 0.681에서 0.689로 증가합니다.
- 더 나은 일반화: 다양한 모델을 결합하면 과적합을 줄이고 다양한 데이터에 대한 성능을 향상시킬 수 있습니다.
- 향상된 견고성: 앙상블은 일반적으로 데이터의 노이즈와 이상치에 더 강력합니다.
- 상호 보완적인 강점: 서로 다른 모델이 서로 다른 유형의 객체 감지 또는 서로 다른 환경 조건에서 뛰어날 수 있습니다.
주요 절충점은 속도 메트릭에 표시된 대로 추론 시간이 증가한다는 것입니다(단일 모델의 경우 22.4ms, 앙상블의 경우 39.5ms).
모델 앙상블 사용 시점
다음과 같은 시나리오에서는 모델 앙상블을 사용하는 것을 고려해 보십시오.
- 추론 속도보다 정확도가 더 중요한 경우
- 오탐지를 최소화해야 하는 중요한 애플리케이션의 경우
- 다양한 조명, 폐색 또는 스케일로 인해 어려운 이미지를 처리할 때
- 최대 성능이 요구되는 대회 또는 벤치마킹 중
엄격한 지연 시간 요구 사항이 있는 실시간 애플리케이션의 경우 단일 모델 추론이 더 적합할 수 있습니다.
지원되는 환경
Ultralytics는 CUDA, CUDNN, Python 및 PyTorch와 같은 필수 종속성이 미리 설치된 다양한 즉시 사용 가능한 환경을 제공하여 프로젝트를 시작할 수 있도록 합니다.
- 무료 GPU 노트북:
- Google Cloud: GCP 빠른 시작 가이드
- Amazon: AWS 빠른 시작 가이드
- Azure: AzureML 빠른 시작 가이드
- Docker: Docker 빠른 시작 가이드
프로젝트 상태
이 배지는 모든 YOLOv5 GitHub Actions 지속적 통합(CI) 테스트가 성공적으로 통과되었음을 나타냅니다. 이러한 CI 테스트는 학습, 유효성 검사, 추론, 내보내기 및 벤치마크와 같은 다양한 주요 측면에서 YOLOv5의 기능과 성능을 엄격하게 검사합니다. macOS, Windows 및 Ubuntu에서 일관되고 안정적인 작동을 보장하며, 테스트는 24시간마다 그리고 새로운 커밋마다 수행됩니다.