YOLOv10: Detección de Objetos de Extremo a Extremo en Tiempo Real
YOLOv10, construido sobre el paquete de Python de Ultralytics por investigadores de la Universidad de Tsinghua, introduce un nuevo enfoque para la detección de objetos en tiempo real, abordando tanto las deficiencias de post-procesamiento como de arquitectura del modelo encontradas en versiones anteriores de YOLO. Al eliminar la supresión no máxima (NMS) y optimizar varios componentes del modelo, YOLOv10 logra un rendimiento de última generación con una sobrecarga computacional significativamente reducida. Amplios experimentos demuestran sus superiores equilibrios de precisión-latencia en múltiples escalas de modelo.
Ver: Cómo entrenar YOLOv10 en el conjunto de datos SKU-110k usando Ultralytics | Conjunto de datos de minoristas
Visión general
La detección de objetos en tiempo real tiene como objetivo predecir con precisión las categorías y posiciones de los objetos en las imágenes con baja latencia. La serie YOLO ha estado a la vanguardia de esta investigación debido a su equilibrio entre rendimiento y eficiencia. Sin embargo, la dependencia de NMS y las ineficiencias arquitectónicas han dificultado un rendimiento óptimo. YOLOv10 aborda estos problemas introduciendo asignaciones duales consistentes para el entrenamiento sin NMS y una estrategia holística de diseño de modelos impulsada por la eficiencia y la precisión.
Arquitectura
La arquitectura de YOLOv10 se basa en las fortalezas de los modelos YOLO anteriores al tiempo que introduce varias innovaciones clave. La arquitectura del modelo consta de los siguientes componentes:
- Backbone: Responsable de la extracción de características, el backbone en YOLOv10 utiliza una versión mejorada de CSPNet (Red Parcial de Etapas Cruzadas) para mejorar el flujo de gradiente y reducir la redundancia computacional.
- Cuello (Neck): El cuello está diseñado para agregar características de diferentes escalas y pasarlas al encabezado. Incluye capas PAN (Path Aggregation Network) para una fusión de características multiescala eficaz.
- Encabezado de uno a muchos (One-to-Many Head): Genera múltiples predicciones por objeto durante el entrenamiento para proporcionar señales de supervisión enriquecidas y mejorar la precisión del aprendizaje.
- Encabezado de uno a uno (One-to-One Head): Genera una única mejor predicción por objeto durante la inferencia para eliminar la necesidad de NMS, lo que reduce la latencia y mejora la eficiencia.
Características clave
- Entrenamiento sin NMS: Utiliza asignaciones duales consistentes para eliminar la necesidad de NMS, reduciendo la latencia de inferencia.
- Diseño Holístico del Modelo: Optimización integral de varios componentes desde perspectivas de eficiencia y precisión, incluidos los encabezados de clasificación ligeros, el submuestreo desacoplado espacial-canal y el diseño de bloques guiado por rango.
- Capacidades de modelo mejoradas: Incorpora convoluciones de kernel grande y módulos de autoatención parcial para mejorar el rendimiento sin un coste computacional significativo.
Variantes de modelo
YOLOv10 viene en varias escalas de modelo para satisfacer diferentes necesidades de aplicación:
- YOLOv10n: Versión Nano para entornos con recursos extremadamente limitados.
- YOLOv10s: Versión pequeña que equilibra velocidad y precisión.
- YOLOv10m: Versión mediana para uso de propósito general.
- YOLOv10b: Versión equilibrada con mayor anchura para una mayor precisión.
- YOLOv10l: Versión grande para una mayor precisión a costa de un aumento de los recursos computacionales.
- YOLOv10x: Versión extra grande para máxima precisión y rendimiento.
Rendimiento
YOLOv10 supera a las versiones anteriores de YOLO y a otros modelos de última generación en términos de precisión y eficiencia. Por ejemplo, YOLOv10s es 1.8 veces más rápido que RT-DETR-R18 con un AP similar en el conjunto de datos COCO, y YOLOv10b tiene un 46% menos de latencia y un 25% menos de parámetros que YOLOv9-C con el mismo rendimiento.
Rendimiento
Latencia medida con TensorRT FP16 en GPU T4.
Modelo | Tamaño de entrada | APval | FLOPs (G) | Latencia (ms) |
---|---|---|---|---|
YOLOv10n | 640 | 38.5 | 6.7 | 1.84 |
YOLOv10s | 640 | 46.3 | 21.6 | 2.49 |
YOLOv10m | 640 | 51.1 | 59.1 | 4.74 |
YOLOv10b | 640 | 52.5 | 92.0 | 5.74 |
YOLOv10l | 640 | 53.2 | 120.3 | 7.28 |
YOLOv10x | 640 | 54.4 | 160.4 | 10.70 |
Metodología
Asignaciones duales consistentes para entrenamiento sin NMS
YOLOv10 emplea asignaciones de etiquetas duales, combinando estrategias de uno a muchos y de uno a uno durante el entrenamiento para garantizar una supervisión rica y una implementación eficiente de extremo a extremo. La métrica de coincidencia consistente alinea la supervisión entre ambas estrategias, mejorando la calidad de las predicciones durante la inferencia.
Diseño de modelo holístico impulsado por la eficiencia y la precisión
Mejoras de eficiencia
- Encabezado de clasificación ligero: Reduce la sobrecarga computacional del encabezado de clasificación mediante el uso de convoluciones separables en profundidad.
- Submuestreo desacoplado espacial-canal: Desacopla la reducción espacial y la modulación de canales para minimizar la pérdida de información y el costo computacional.
- Diseño de bloques guiado por rango: Adapta el diseño de bloques en función de la redundancia de etapa intrínseca, lo que garantiza una utilización óptima de los parámetros.
Mejoras de precisión
- Convolución de kernel grande: Amplía el campo receptivo para mejorar la capacidad de extracción de características.
- Autoatención parcial (PSA): Incorpora módulos de autoatención para mejorar el aprendizaje de la representación global con una sobrecarga mínima.
Experimentos y resultados
YOLOv10 se ha probado exhaustivamente en puntos de referencia estándar como COCO, lo que demuestra un rendimiento y una eficiencia superiores. El modelo logra resultados de última generación en diferentes variantes, mostrando mejoras significativas en la latencia y la precisión en comparación con las versiones anteriores y otros detectores contemporáneos.
Comparaciones
Comparado con otros detectores de última generación:
- YOLOv10s / x son 1.8× / 1.3× más rápidos que RT-DETR-R18 / R101 con una precisión similar
- YOLOv10b tiene un 25% menos de parámetros y un 46% menos de latencia que YOLOv9-C con la misma precisión
- YOLOv10l / x supera a YOLOv8l / x en 0.3 AP / 0.5 AP con 1.8× / 2.3× menos parámetros
Rendimiento
Aquí hay una comparación detallada de las variantes de YOLOv10 con otros modelos de última generación:
Modelo | Parámetros (M) |
FLOPs (G) |
mAPval 50-95 |
Latencia (ms) |
Latencia-forward (ms) |
---|---|---|---|---|---|
YOLOv6-3.0-N | 4.7 | 11.4 | 37.0 | 2.69 | 1.76 |
Gold-YOLO-N | 5.6 | 12.1 | 39.6 | 2.92 | 1.82 |
YOLOv8n | 3.2 | 8.7 | 37.3 | 6.16 | 1.77 |
YOLOv10n | 2.3 | 6.7 | 39.5 | 1.84 | 1.79 |
YOLOv6-3.0-S | 18.5 | 45.3 | 44.3 | 3.42 | 2.35 |
Gold-YOLO-S | 21.5 | 46.0 | 45.4 | 3.82 | 2.73 |
YOLOv8s | 11.2 | 28.6 | 44.9 | 7.07 | 2.33 |
YOLOv10s | 7.2 | 21.6 | 46.8 | 2.49 | 2.39 |
RT-DETR-R18 | 20.0 | 60.0 | 46.5 | 4.58 | 4.49 |
YOLOv6-3.0-M | 34.9 | 85.8 | 49.1 | 5.63 | 4.56 |
Gold-YOLO-M | 41.3 | 87.5 | 49.8 | 6.38 | 5.45 |
YOLOv8m | 25.9 | 78.9 | 50.6 | 9.50 | 5.09 |
YOLOv10m | 15.4 | 59.1 | 51.3 | 4.74 | 4.63 |
YOLOv6-3.0-L | 59.6 | 150.7 | 51.8 | 9.02 | 7.90 |
Gold-YOLO-L | 75.1 | 151.7 | 51.8 | 10.65 | 9.78 |
YOLOv8l | 43.7 | 165.2 | 52.9 | 12.39 | 8.06 |
RT-DETR-R50 | 42.0 | 136.0 | 53.1 | 9.20 | 9.07 |
YOLOv10l | 24.4 | 120.3 | 53.4 | 7.28 | 7.21 |
YOLOv8x | 68.2 | 257.8 | 53.9 | 16.86 | 12.83 |
RT-DETR-R101 | 76.0 | 259.0 | 54.3 | 13.71 | 13.58 |
YOLOv10x | 29.5 | 160.4 | 54.4 | 10.70 | 10.60 |
Ejemplos de uso
Para predecir nuevas imágenes con YOLOv10:
Ejemplo
from ultralytics import YOLO
# Load a pre-trained YOLOv10n model
model = YOLO("yolov10n.pt")
# Perform object detection on an image
results = model("image.jpg")
# Display the results
results[0].show()
# Load a COCO-pretrained YOLOv10n model and run inference on the 'bus.jpg' image
yolo detect predict model=yolov10n.pt source=path/to/bus.jpg
Para entrenar YOLOv10 en un dataset personalizado:
Ejemplo
from ultralytics import YOLO
# Load YOLOv10n model from scratch
model = YOLO("yolov10n.yaml")
# Train the model
model.train(data="coco8.yaml", epochs=100, imgsz=640)
# Build a YOLOv10n model from scratch and train it on the COCO8 example dataset for 100 epochs
yolo train model=yolov10n.yaml data=coco8.yaml epochs=100 imgsz=640
# Build a YOLOv10n model from scratch and run inference on the 'bus.jpg' image
yolo predict model=yolov10n.yaml source=path/to/bus.jpg
Tareas y modos admitidos
La serie de modelos YOLOv10 ofrece una gama de modelos, cada uno optimizado para la Detección de Objetos de alto rendimiento. Estos modelos se adaptan a diversas necesidades computacionales y requisitos de precisión, lo que los hace versátiles para una amplia gama de aplicaciones.
Modelo | Nombres de archivo | Tareas | Inferencia | Validación | Entrenamiento | Exportar |
---|---|---|---|---|---|---|
YOLOv10 | yolov10n.pt yolov10s.pt yolov10m.pt yolov10l.pt yolov10x.pt |
Detección de objetos | ✅ | ✅ | ✅ | ✅ |
Exportación de YOLOv10
Debido a las nuevas operaciones introducidas con YOLOv10, no todos los formatos de exportación proporcionados por Ultralytics son compatibles actualmente. La siguiente tabla describe qué formatos se han convertido con éxito utilizando Ultralytics para YOLOv10. No dude en abrir un pull request si puede proporcionar un cambio de contribución para agregar soporte de exportación de formatos adicionales para YOLOv10.
Formato de exportación | Soporte de exportación | Inferencia del modelo exportado | Notas |
---|---|---|---|
TorchScript | ✅ | ✅ | Formato de modelo estándar de PyTorch. |
ONNX | ✅ | ✅ | Ampliamente compatible para su implementación. |
OpenVINO | ✅ | ✅ | Optimizado para hardware Intel. |
TensorRT | ✅ | ✅ | Optimizado para GPUs NVIDIA. |
CoreML | ✅ | ✅ | Limitado a dispositivos Apple. |
TF SavedModel | ✅ | ✅ | Formato de modelo estándar de TensorFlow. |
TF GraphDef | ✅ | ✅ | Formato TensorFlow antiguo. |
TF Lite | ✅ | ✅ | Optimizado para dispositivos móviles e integrados. |
TF Edge TPU | ✅ | ✅ | Específico para los dispositivos Edge TPU de Google. |
TF.js | ✅ | ✅ | Entorno JavaScript para uso en navegador. |
PaddlePaddle | ❌ | ❌ | Popular en China; menor soporte global. |
NCNN | ✅ | ❌ | Capa torch.topk no existe o no está registrada |
Conclusión
YOLOv10 establece un nuevo estándar en la detección de objetos en tiempo real al abordar las deficiencias de las versiones anteriores de YOLO e incorporar estrategias de diseño innovadoras. Su capacidad para ofrecer una alta precisión con un bajo coste computacional lo convierte en una opción ideal para una amplia gama de aplicaciones del mundo real, incluyendo la fabricación, el comercio minorista y los vehículos autónomos.
Citas y agradecimientos
Nos gustaría agradecer a los autores de YOLOv10 de la Universidad de Tsinghua por su extensa investigación y sus importantes contribuciones al framework Ultralytics:
@article{THU-MIGyolov10,
title={YOLOv10: Real-Time End-to-End Object Detection},
author={Ao Wang, Hui Chen, Lihao Liu, et al.},
journal={arXiv preprint arXiv:2405.14458},
year={2024},
institution={Tsinghua University},
license = {AGPL-3.0}
}
Para obtener información detallada sobre la implementación, las innovaciones arquitectónicas y los resultados experimentales, consulte el artículo de investigación y el repositorio de GitHub de YOLOv10 del equipo de la Universidad de Tsinghua.
Preguntas frecuentes
¿Qué es YOLOv10 y en qué se diferencia de las versiones anteriores de YOLO?
YOLOv10, desarrollada por investigadores de la Universidad de Tsinghua, introduce varias innovaciones clave en la detección de objetos en tiempo real. Elimina la necesidad de la supresión no máxima (NMS) mediante el empleo de asignaciones duales consistentes durante el entrenamiento y componentes de modelo optimizados para un rendimiento superior con una menor sobrecarga computacional. Para obtener más detalles sobre su arquitectura y características clave, consulte la sección de descripción general de YOLOv10.
¿Cómo puedo empezar a ejecutar la inferencia usando YOLOv10?
Para facilitar la inferencia, puede utilizar la librería de python Ultralytics YOLO o la interfaz de línea de comandos (CLI). A continuación, se muestran ejemplos de predicción de nuevas imágenes utilizando YOLOv10:
Ejemplo
from ultralytics import YOLO
# Load the pre-trained YOLOv10n model
model = YOLO("yolov10n.pt")
results = model("image.jpg")
results[0].show()
yolo detect predict model=yolov10n.pt source=path/to/image.jpg
Para obtener más ejemplos de uso, visite nuestra sección de Ejemplos de uso.
¿Qué variantes de modelo ofrece YOLOv10 y cuáles son sus casos de uso?
YOLOv10 ofrece varias variantes de modelo para adaptarse a diferentes casos de uso:
- YOLOv10n: Adecuado para entornos con recursos extremadamente limitados
- YOLOv10s: Equilibra velocidad y precisión
- YOLOv10m: Uso de propósito general
- YOLOv10b: Mayor precisión con mayor anchura
- YOLOv10l: Alta precisión a costa de recursos computacionales
- YOLOv10x: Máxima precisión y rendimiento
Cada variante está diseñada para diferentes necesidades computacionales y requisitos de precisión, lo que las hace versátiles para una variedad de aplicaciones. Explore la sección de Variantes de modelo para obtener más información.
¿Cómo mejora el rendimiento el enfoque sin NMS en YOLOv10?
YOLOv10 elimina la necesidad de la supresión no máxima (NMS) durante la inferencia mediante el empleo de asignaciones duales consistentes para el entrenamiento. Este enfoque reduce la latencia de la inferencia y mejora la eficiencia de la predicción. La arquitectura también incluye un encabezado uno a uno para la inferencia, lo que garantiza que cada objeto obtenga una única mejor predicción. Para obtener una explicación detallada, consulte la sección de Asignaciones duales consistentes para el entrenamiento sin NMS.
¿Dónde puedo encontrar las opciones de exportación para los modelos YOLOv10?
YOLOv10 admite varios formatos de exportación, incluidos TorchScript, ONNX, OpenVINO y TensorRT. Sin embargo, no todos los formatos de exportación proporcionados por Ultralytics son compatibles actualmente con YOLOv10 debido a sus nuevas operaciones. Para obtener detalles sobre los formatos compatibles e instrucciones sobre la exportación, visite la sección de Exportación de YOLOv10.
¿Cuáles son los puntos de referencia de rendimiento para los modelos YOLOv10?
YOLOv10 supera a las versiones anteriores de YOLO y a otros modelos de última generación tanto en precisión como en eficiencia. Por ejemplo, YOLOv10s es 1.8 veces más rápido que RT-DETR-R18 con un AP similar en el conjunto de datos COCO. YOLOv10b muestra un 46% menos de latencia y un 25% menos de parámetros que YOLOv9-C con el mismo rendimiento. Se pueden encontrar benchmarks detallados en la sección de Comparaciones.