0%
Comparación de versiones de YOLO: de YOLOv1 a YOLOv8

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.

I

InSkillCoach

· min

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

  1. Arquitectura

    • Nuevo backbone CSP
    • Mejor gestión de las características
    • Optimización para la inferencia
  2. Rendimiento

    • Mayor velocidad de inferencia
    • Mayor precisión
    • Soporte multitarea
  3. 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ónVelocidadPrecisiónMemoriaFuncionalidades
v5BaseBaseBaseBase
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

  1. Elección de la versión

    • v5 para aplicaciones básicas
    • v6 para aplicaciones móviles
    • v7 para aplicaciones avanzadas
    • v8 para aplicaciones innovadoras
  2. Optimización

    • Utilizar la aceleración por GPU
    • Ajustar los umbrales de confianza
    • Optimizar el tamaño del batch
  3. 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
InSkillCoach

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+
584
180

Comentarios

Los comentarios funcionan con GitHub Discussions

Inicia sesión con GitHub para participar en la discusión

¡Enlace copiado!