Comparación de versiones de YOLO: de YOLOv1 a YOLOv8
Guía completa sobre las distintas versiones de YOLO, sus características y sus aplicaciones.
InSkillCoach
Comparación de versiones de YOLO: de YOLOv1 a YOLOv8
Guía completa sobre la evolución de YOLO (You Only Look Once) a través de sus distintas versiones.
1. De YOLOv1 a YOLOv5
1.1 YOLOv1 (2015)
- Primera versión, creada por Joseph Redmon
- Arquitectura sencilla con 24 capas de convolución
- Limitaciones:
- Baja precisión con objetos pequeños
- Dificultad con objetos cercanos entre sí
- Sin detección multiescala
1.2 YOLOv2 (2016)
- Mejoras principales:
- Batch Normalization
- Anchors boxes
- Dimension clustering
- Fine-grained features
- Multi-scale training
1.3 YOLOv3 (2018)
- Características principales:
- Detección multiescala
- Feature Pyramid Network (FPN)
- Mejor gestión de los objetos pequeños
- Soporte de 80 clases
1.4 YOLOv4 (2020)
- Mejoras significativas:
- Mosaic augmentation
- CSP (Cross Stage Partial Network)
- PANet
- SAM (Spatial Attention Module)
- Mayor precisión y velocidad
1.5 YOLOv5 (2020)
- Desarrollada por Ultralytics
- Características:
- Auto-learning bounding box anchors
- Mosaic augmentation
- Multi-scale training
- Soporte de varios frameworks
2. YOLOv6 y YOLOv7
2.1 YOLOv6 (2022)
- Desarrollada por Meituan
- Mejoras:
- RepVGG backbone
- CSPVoVNet neck
- Mejor rendimiento en móvil
- Optimización para la inferencia
2.2 YOLOv7 (2022)
- Desarrollada por WongKinYiu
- Innovaciones:
- E-ELAN (Extended Efficient Layer Aggregation Network)
- Model scaling
- Auxiliary head
- Mayor precisión que YOLOv5
3. YOLOv8 (2023)
3.1 Características principales
# Instalación
pip install ultralytics
# Import
from ultralytics import YOLO
# Modelos disponibles
model_nano = YOLO('yolov8n.pt') # Nano
model_small = YOLO('yolov8s.pt') # Small
model_medium = YOLO('yolov8m.pt') # Medium
model_large = YOLO('yolov8l.pt') # Large
model_xlarge = YOLO('yolov8x.pt') # XLarge
3.2 Mejoras
-
Arquitectura
- Nuevo backbone CSP
- Mejor gestión de las características
- Optimización para la inferencia
-
Rendimiento
- Mayor velocidad de inferencia
- Mayor precisión
- Soporte multitarea
-
Funcionalidades
- Detección de objetos
- Segmentación de instancias
- Clasificación de imágenes
- Pose estimation
4. Comparación de rendimiento
4.1 Métricas
def benchmark_yolo_versions():
# Configuración
test_image = "path/to/test/image.jpg"
# Prueba de las distintas versiones
versions = {
'v5': YOLO('yolov5n.pt'),
'v6': YOLO('yolov6n.pt'),
'v7': YOLO('yolov7n.pt'),
'v8': YOLO('yolov8n.pt')
}
results = {}
for version, model in versions.items():
# Medición del tiempo de inferencia
start_time = time.time()
results[version] = model(test_image)
inference_time = time.time() - start_time
print(f"YOLO{version}:")
print(f"Temps d'inférence: {inference_time:.2f}s")
print(f"Nombre de détections: {len(results[version][0].boxes)}")
print(f"Précision moyenne: {results[version][0].boxes.conf.mean():.2f}")
4.2 Tabla comparativa
| Versión | Velocidad | Precisión | Memoria | Funcionalidades |
|---|---|---|---|---|
| v5 | Base | Base | Base | Base |
| v6 | +10% | +3% | -5% | +1 nueva |
| v7 | +15% | +5% | -8% | +2 nuevas |
| v8 | +20% | +7% | -10% | +3 nuevas |
5. Aplicaciones prácticas
5.1 Detección en tiempo real
def real_time_detection():
# Inicialización
cap = cv2.VideoCapture(0)
model = YOLO('yolov8n.pt') # Uso de YOLOv8
while cap.isOpened():
success, frame = cap.read()
if not success:
continue
# Detección
results = model(frame)
# Visualización
annotated_frame = results[0].plot()
# Visualización en pantalla
cv2.imshow('YOLOv8 Detection', annotated_frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
5.2 Segmentación de instancias
def instance_segmentation():
# Inicialización
model = YOLO('yolov8n-seg.pt')
# Segmentación
results = model('path/to/image.jpg')
# Visualización
for result in results:
# Máscaras de segmentación
masks = result.masks
# Cuadros delimitadores
boxes = result.boxes
# Visualización
annotated_frame = result.plot()
cv2.imshow('Segmentation', annotated_frame)
cv2.waitKey(0)
cv2.destroyAllWindows()
6. Buenas prácticas
-
Elección de la versión
- v5 para aplicaciones básicas
- v6 para aplicaciones móviles
- v7 para aplicaciones avanzadas
- v8 para aplicaciones innovadoras
-
Optimización
- Utilizar la aceleración por GPU
- Ajustar los umbrales de confianza
- Optimizar el tamaño del batch
-
Despliegue
- Exportar en el formato adecuado
- Utilizar la aceleración por hardware
- Implementar un sistema de caché
Conclusión
Puntos clave:
- Evolución significativa del rendimiento
- Nuevas funcionalidades en cada versión
- Optimización continua para la inferencia
- Soporte multitarea con YOLOv8
Recomendaciones:
- Elegir la versión según las necesidades
- Optimizar el rendimiento
- Utilizar la aceleración por hardware
- Implementar una gestión robusta de errores
Acerca de InSkillCoach
Experto en formación y tecnologías
Coach especializado en tecnologías avanzadas e IA, impulsado por GNeurone Inc.
Certificaciones:
- AWS Certified Solutions Architect – Professional
- Certificaciones de Google Cloud
- Microsoft Certified: DevOps Engineer Expert
- Certified Kubernetes Administrator (CKA)
- CompTIA Security+
Comentarios
Los comentarios funcionan con GitHub Discussions
Inicia sesión con GitHub para participar en la discusión