Ensamblaje de modelos YOLOv5
馃摎 Esta gu铆a explica c贸mo utilizar el ensamblaje de modelos Ultralytics YOLOv5 馃殌 durante las pruebas y la inferencia para mejorar el mAP y el Recall.
Del aprendizaje por conjuntos:
La modelizaci贸n por conjuntos es un proceso en el que se crean m煤ltiples modelos diversos para predecir un resultado, ya sea utilizando muchos algoritmos de modelizaci贸n distintos o utilizando diferentes conjuntos de datos de entrenamiento. A continuaci贸n, el modelo de conjunto agrega la predicci贸n de cada modelo base y da como resultado una predicci贸n final para los datos no vistos. La motivaci贸n para utilizar modelos de conjunto es reducir el error de generalizaci贸n de la predicci贸n. Siempre que los modelos de base sean diversos e independientes, el error de predicci贸n del modelo disminuye cuando se utiliza el enfoque de conjunto. El enfoque busca la sabidur铆a de la multitud para hacer una predicci贸n. Aunque el modelo ensemble tiene m煤ltiples modelos base dentro del modelo, act煤a y funciona como un 煤nico modelo.
Antes de empezar
Clonar repo e instalar requirements.txt en a Python>=3.8.0 incluyendo PyTorch>=1.8. Los modelos y conjuntos de datos se descargan autom谩ticamente de la 煤ltimaversi贸n de YOLOv5 .
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
Prueba normalmente
Antes de ensamblar, establezca el rendimiento de referencia de un 煤nico modelo. Este comando prueba YOLOv5x en COCO val2017 con un tama帽o de imagen de 640 p铆xeles. yolov5x.pt
es el modelo m谩s grande y preciso disponible. Otras opciones son yolov5s.pt
, yolov5m.pt
y yolov5l.pt
o su propio punto de control a partir del entrenamiento de un conjunto de datos personalizado ./weights/best.pt
. Para m谩s detalles sobre todos los modelos disponibles, consulte la tabla de puntos de control preentrenados.
Salida:
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
Prueba de conjunto
Se pueden ensamblar varios modelos preentrenados en el momento de la prueba y de la inferencia simplemente a帽adiendo modelos adicionales al modelo --weights
en cualquier comando val.py o detect.py existente. Este ejemplo prueba un conjunto de 2 modelos juntos:
- YOLOv5x
- YOLOv5l6
Salida:
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
Inferencia conjunta
A帽adir modelos adicionales al --weights
para ejecutar la inferencia de conjunto:
Salida:
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)
Ventajas del ensamblaje de modelos
El ensamblaje de modelos con YOLOv5 ofrece varias ventajas:
- Mayor precisi贸n: Como se demuestra en los ejemplos anteriores, el ensamblaje de varios modelos aumenta mAP de 0,504 a 0,515 y mAR de 0,681 a 0,689.
- Mejor generalizaci贸n: La combinaci贸n de diversos modelos ayuda a reducir el sobreajuste y mejora el rendimiento con datos variados.
- Mayor robustez: Los conjuntos suelen ser m谩s resistentes al ruido y a los valores at铆picos de los datos.
- Puntos fuertes complementarios: Los distintos modelos pueden destacar en la detecci贸n de diferentes tipos de objetos o en diferentes condiciones ambientales.
La principal contrapartida es el aumento del tiempo de inferencia, como muestran las m茅tricas de velocidad (22,4 ms para el modelo 煤nico frente a 39,5 ms para el conjunto).
Cu谩ndo utilizar el ensamblaje de modelos
Considere la posibilidad de utilizar el ensamblaje de modelos en estos escenarios:
- Cuando la precisi贸n es m谩s importante que la velocidad de inferencia
- Para aplicaciones cr铆ticas en las que deben minimizarse los falsos negativos
- Al procesar im谩genes dif铆ciles con iluminaci贸n, oclusi贸n o escala variables
- Durante competiciones o evaluaciones comparativas en las que se exige el m谩ximo rendimiento
Para aplicaciones en tiempo real con estrictos requisitos de latencia, la inferencia de modelo 煤nico puede ser m谩s apropiada.
Entornos compatibles
Ultralytics proporciona una serie de entornos listos para usar, cada uno de ellos preinstalado con dependencias esenciales como CUDACUDNN, Pythony PyTorchpara poner en marcha sus proyectos.
- Cuadernos gratuitos GPU:
- Google Nube: Gu铆a de inicio r谩pido de GCP
- Amazon: Gu铆a de inicio r谩pido de AWS
- Azure: Gu铆a de inicio r谩pido de AzureML
- Docker: Gu铆a de inicio r谩pido de Docker
Estado del proyecto
Este distintivo indica que todas las pruebas de integraci贸n continua (IC) deYOLOv5 GitHub Actions se han superado con 茅xito. Estas pruebas de IC comprueban rigurosamente la funcionalidad y el rendimiento de YOLOv5 en varios aspectos clave: formaci贸n, validaci贸n, inferencia, exportaci贸n y puntos de referencia. Garantizan un funcionamiento coherente y fiable en macOS, Windows y Ubuntu, con pruebas realizadas cada 24 horas y en cada nueva confirmaci贸n.