Detección de Fallas de Soldadura con YOLO y Modelos Personalizados

Clase 13 de 16Curso de Visión Artificial con Python

Resumen

La detección de fallas en soldaduras mediante inteligencia artificial representa un avance significativo para la industria manufacturera. Utilizando modelos de visión por computadora como YOLO, es posible automatizar procesos de control de calidad que tradicionalmente requerían inspección manual, ahorrando tiempo y recursos mientras se mejora la precisión. Este enfoque personalizado demuestra cómo la IA puede adaptarse a necesidades específicas de cada industria.

¿Cómo crear un modelo personalizado de detección de fallas de soldadura con YOLO?

Cuando nos enfrentamos a problemas muy específicos como la detección de fallas de soldadura en piezas mecánicas, los modelos preentrenados genéricos suelen quedarse cortos. En estos casos, necesitamos crear y entrenar un modelo personalizado que se adapte exactamente a las necesidades del cliente.

Para comenzar este proceso, es fundamental contar con una GPU adecuada, ya que los entrenamientos de modelos de visión artificial son computacionalmente costosos. En este caso, utilizamos una GPU T4 que nos permite realizar el entrenamiento de manera eficiente.

¿Qué datos necesitamos para entrenar nuestro modelo?

El punto de partida para cualquier modelo de machine learning es un conjunto de datos de calidad. Para nuestro detector de fallas de soldadura, necesitamos:

  • Dataset proporcionado por el cliente: Contiene imágenes reales del negocio.
  • Estructura del dataset: Organizado en carpetas de test, entrenamiento y validación.
  • Imágenes etiquetadas: Cada imagen tiene su correspondiente archivo de etiquetas (labels) que indica la posición de las fallas.
  • Archivo de configuración: Un archivo YAML que especifica las rutas de las carpetas y las clases a detectar.

En este caso específico, nuestro modelo debe identificar tres clases diferentes:

  • Mala soldadura
  • Buena soldadura
  • Defecto

¿Cómo configurar el entrenamiento del modelo?

Para entrenar nuestro modelo personalizado con YOLOv11, seguimos estos pasos:

  1. Instalación de dependencias:
# Instalamos Ultralytics para acceder a YOLO
!pip install ultralytics
  1. Carga del modelo preentrenado:
# Cargamos YOLOv11 como base para nuestro modelo
from ultralytics import YOLO
model = YOLO('yolov11.pt')
  1. Definición del archivo de configuración:
# Definimos la ruta al archivo YAML de configuración
yaml_path = 'data.yaml'
  1. Configuración del entrenamiento:
# Configuración por defecto
results = model.train(
    data=yaml_path,
    epochs=10,
    imgsz=640,
    augment=True
)

En esta primera aproximación, utilizamos una configuración por defecto con 10 épocas (iteraciones completas del dataset) y un tamaño de imagen de 640 píxeles. También activamos el data augmentation para hacer el modelo más robusto mediante transformaciones de las imágenes.

¿Cómo evaluar y visualizar los resultados del entrenamiento?

Una vez completado el entrenamiento, es crucial evaluar el rendimiento del modelo para determinar su efectividad. YOLO proporciona métricas detalladas y herramientas de visualización que facilitan este análisis.

Métricas clave para evaluar el modelo

Después del entrenamiento, obtenemos varias métricas importantes:

  • Precisión: 0.41 (indica qué proporción de las detecciones positivas fueron correctas)
  • Recall: 0.51 (indica qué proporción de los objetos reales fueron detectados)
  • F1-Score: Idealmente, buscamos valores superiores a 0.6-0.7

Visualización gráfica de resultados:

  • Curvas F1-Score para cada clase
  • Matriz de confusión que muestra aciertos y errores entre clases

En la matriz de confusión, pudimos observar que para la clase "mala soldadura", el modelo acertó 40 veces, pero hubo una confusión con la clase "buena soldadura" en un 53% de los casos. Esta información es valiosa para identificar áreas de mejora en el modelo.

¿Cómo guardar y cargar el modelo entrenado?

Una vez finalizado el entrenamiento, es importante guardar el modelo para su uso posterior:

# Guardamos el modelo entrenado
model.save('mi_modelo.pt')

# Para cargar el modelo posteriormente
modelo_cargado = YOLO('mi_modelo.pt')

¿Cómo realizar predicciones con el modelo entrenado?

El objetivo final de todo este proceso es utilizar el modelo para detectar fallas en nuevas imágenes. YOLO ofrece varias formas de realizar predicciones:

Visualización básica de resultados

# Creamos una carpeta para guardar los resultados
!mkdir testing

# Realizamos la predicción y visualizamos los resultados
results = modelo_cargado('ruta_a_la_imagen.jpg')
results[0].show()

Filtrado de resultados por confianza

En muchos casos, queremos filtrar las detecciones según su nivel de confianza:

# Solo mostramos detecciones con confianza superior a 0.3
results = modelo_cargado('ruta_a_la_imagen.jpg', conf=0.3)
results[0].show()

Filtrado por clase específica

Si solo nos interesa detectar una clase en particular:

# Solo detectamos la clase "buena soldadura" (clase 1)
results = modelo_cargado('ruta_a_la_imagen.jpg', classes=1)
results[0].show()

Implementación para uso en producción

Para implementaciones en producción, como APIs o interfaces gráficas, podemos crear una función que procese las imágenes y devuelva información estructurada:

def procesar_imagen(image_path, model):
    # Realizamos la inferencia
    results = model(image_path)
    result = results[0]
    
    # Extraemos información relevante
    boxes = result.boxes.xyxy.tolist()
    confidences = result.boxes.conf.tolist()
    class_names = [result.names.get(int(c), str(int(c))) for c in result.boxes.cls.tolist()]
    
    # Obtenemos la imagen anotada
    annotated_image = result.plot()
    
    return boxes, class_names, confidences, annotated_image

Esta función devuelve las coordenadas de los bounding boxes, los nombres de las clases detectadas, los niveles de confianza y la imagen con las anotaciones visuales, lo que facilita su integración en sistemas más complejos.

La detección de fallas en soldaduras mediante inteligencia artificial representa un avance significativo para la industria manufacturera. Con el enfoque personalizado que hemos explorado, es posible adaptar modelos de visión por computadora a necesidades específicas, mejorando la calidad y eficiencia de los procesos de control. ¿Has implementado soluciones similares en tu industria? Comparte tu experiencia en los comentarios.