Cada oveja con su pareja....el emparejador de calcetines

Publicado por Loli Diéguez en

Vamos a crear un proyecto que reconozca calcetines y los empareje de forma correcta....cada oveja con su pareja.

Haremos todo esto en una Raspberry Pi, con Edge Impulse Machine Learning y Balena. 

Todos sabemos que emparejar los calcetines después de lavarlos es una pesadilla, por lo que tener un sistema inteligente y asequible que diga si un calcetín combina con otro es una idea genial!.

Lo interesante de este proyecto es cómo usaremos Edge Impulse y algunos equipos bastante asequibles para ayudarte a comenzar con la IA.

Antes de empezar, veremos en que consiste Edge Impulse, y el material necesario para realizar este proyecto.

¿Qué es Edge Impulse?

Edge Impulse es un servicio que te permite generar modelos entrenados en aprendizaje automático en la nube e implementarlo en microcontroladores (por ejemplo, Arduino y STM32) u ordenadores de placa única como Raspberry Pi

Eso significa que no se necesitan GPU o CPU porque todo el aprendizaje automático y el entrenamiento de redes neuronales se realizan de antemano en la nube con métodos avanzados.

Edge Impulse genera un modelo entrenado que se emplea en el dispositivo y te permite clasificar imágenes (o sonido, movimiento,...) sin ningún requisito de hardware especial.

Este proyecto implementa un clasificador de imágenes del flujo de video capturado a través de la cámara Raspberry Pi, clasifica imágenes utilizando un modelo entrenado en la red neuronal de Edge Impulse basado en la técnica de aprendizaje de transferencia para imágenes más un conjunto de datos de imágenes tomadas con la cámara del teléfono móvil, en este caso.

También te mostraremos cómo generar un modelo de aprendizaje automático utilizando Edge Impulse e implementar un sistema de clasificación de imágenes que se ejecuta en una Raspberry Pi con balena. 

Al final de este proyecto, podrás reunir todos tus calcetines sin emparejar nuevamente (y probar otros casos de uso de IA de vanguardia).

Material necesario

Para construir este proyecto, necesitarás el siguiente hardware:

  • Raspberry Pi 4B
  • Cámara Pi v2 o cámara USB
  • Tarjeta SD (recomendamos las de SanDisk, ya que son bastante confiables)
  • Cable USB-C u otro medio para alimentar tu Pi
Para la configuración del software, necesitarás:
  • Una cuenta gratuita de Edge Impulse Studio ( regístrate aquí )
  • Una cuenta gratuita de balenaCloud ( regístrate aquí )
  • Software para flashear una tarjeta SD, por ejemplo, balenaEtcher
  • balenaCLI  (Opcional: si deseas insertar código manualmente o trabajar en tu dispositivo localmente).

Ya estamos preparados para comenzar el Tutorial.

Crear el proyecto Edge Impulse

Vete al sitio web de Edge Impulse Studio y crea una cuenta.

 

Haz clic en el menú y selecciona Create new project e introduce un nombre para tu nuevo proyecto. En este caso, crearemos un proyecto que clasificará los calcetines y nos dirá si los calcetines coinciden o no.

Entrenar el modelo del Proyecto

Conecta un dispositivo y comienza a tomar fotografías.

Una vez creado el proyecto, selecciona el proyecto y comienza a recopilar los datos para entrenar el modelo de Machine Learning.

Navega a Dispositivos en el menú principal y luego haz clic en Connect a new device, en en la parte superior derecha. 

Aparecerá un menú para conectar un nuevo dispositivo. Para este proyecto, usaremos nuestro teléfono móvil para tomar fotografías para entrenar al modelo.

Haz clic en Use your mobile phone y luego escanea el código QR, generado por el sitio web, en tu teléfono. El código QR abrirá un sitio web en tu teléfono móvil donde podrás capturar imágenes de los calcetines emparejados o sin emparejar, una vez que le des permiso a tu cámara.

 

En este punto, haz clic en Label, escribe par , y comienza a tomar fotografías de calcetines emparejados. Una vez que hayas tomado 40-50 fotografías de diferentes pares de calcetines (dependiendo de tu jungla de calcetines), cambia la etiqueta para desemparejar y toma fotografías de tus calcetines desemparejados.

Existe la posibilidad de dividir automáticamente las imágenes (80/20) como imágenes de entrenamiento y de prueba o puedes hacerlo manualmente.

Ahora, si vas a Edge Impulse Studio Data Acquisition, verás todos los datos de entrenamiento y los datos de prueba. En este caso, tenemos más de 250 elementos como Datos de entrenamiento y más de 90 elementos como Datos de prueba. 

Seleccionamos el split automático (80/20).

Crea el proyecto en Impulse

Al cargar las imágenes desde tu teléfono, es posible que hayas visto un error que dice que no se detectó ningún proyecto Impulse. Vamos a crearlo ahora.

Vaya al menú principal para Create impulse. Para este proyecto estamos usando datos de imagen en una resolución de 96x96.

Haz clic Add a processing block y agrega Image.

Haz clic en Add a learning block y Agregar Transfer Learning (Images)que se ha creado para los conjuntos de datos de imágenes.

Transfer Learning se utiliza para hacer un clasificador de modelos de imágenes rápido. Es complicado construir un buen sistema de visión por ordenador desde cero, generalmente porque se necesitan muchas imágenes para entrenar modelos en una GPU.

Transfer Learning usa un modelo bien entrenado, solo usa las capas superiores de una red neuronal para entrenar el modelo en una fracción del tiempo y trabajar en conjuntos de datos más pequeños.

Una vez que se ha creado el bloque de aprendizaje, debes ver esto: dos Output features pares diferentes , desemparejar y el desconocido.

El bloque final, Output features, debería decir 3 (emparejar, desemparejar y desconocido). Para la etiqueta desconocida, también tomamos fotografías de objetos aleatorios. 

Ahora es el momento de hacer clic en Guardar impulso y verás  otros menús a continuación de Create impulse en el menú principal. 

Despues haz clic en Image. Y clickea en Save Parameters con profundidad de color RGB. Esto nos lleva a Generate features que creará una visualización en 3D del conjunto de datos capturado.

Con el modelo 3D generado con los Datos de Entrenamiento capturados con el teléfono móvil se puede ver qué diferentes son los objetos clasificados. 

Los datos se procesan, ahora tenemos que comenzar a entrenar una red neuronal para reconocer los patrones de los datos. Las redes neuronales son algoritmos diseñados para reconocer patrones. En este caso, la red neuronal se entrenará con datos de imagen como entrada, e intentará mapear las imágenes en una de las categorías, calcetines emparejados o desemparejados más desconocidos.

Para entrenar la red neuronal usaremos estos parámetros:

  • Número de ciclos de entrenamiento a 100
  • Tasa de aprendizaje hasta 0,0075
  • Aumento de datos: habilitado
  • Índice de confianza mínimo: 0,8

Haz clic en Start training y la red neuronal comenzará a calcular todas las imágenes y se entrenará para generar el modelo de aprendizaje automático. 

Una vez finalizado el modelo, verás números de precisión, una matriz de confusión y algo de rendimiento previsto en el dispositivo en la parte inferior. 

En este momento ya has entrenado tu modelo y toca probarlo.

Prueba el modelo generado

Haz clic en Model testing en el menú principal. Selecciona todas las imágenes y haz clic Classify selected.

 

Con nuestro modelo, obtenemos más del 89% de precisión. ¡Estupendo!

Ya es el momento de implementar el modelo en una Raspberry Pi y aplicarlo al mundo real.

Implementar el modelo en la Raspberry Pi

Haz clic en el menú principal Deployment y selecciona WebAssembly, desplázate hacia abajo y haz clic en  Analyze optimizations en la tabla Optimizaciones disponibles para el aprendizaje por transferencia.

 

 

Haz clic Build para construir el modelo cuantificado (int8). Esto creará y descargará un modelo wasm. Sin embargo, no necesitarás este archivo ya que el proyecto descarga automáticamente el modelo una vez que está en balenaCloud usando tu Edge Impulse API KEY PROJECT ID como veremos a continuación.

Crea la aplicación balena

Vete al proyecto EdgeImpulse balenaCam y haz clic en el Deploy with balena. Si usa este clic, puedes omitir el paso manual de agregar valores de entorno de dispositivo más adelante porque estarán preconfigurados para ti. 

Selecciona tu placa como tipo de dispositivo (Raspberry Pi 4 en este caso) y haz clic en el botón 'Crear e implementar'.

Una vez implementada la aplicación en tu cuenta de balenaCloud, vete a Edge Impulse y copia tu ID de PROYECTO y la CLAVE de API para que podamos configurarlas como variables de Servicio de Aplicación en balenaCloud. 

Para el ID de PROYECTO en Edge Impulse, vete al Panel de control y lo encontrarás en la parte inferior derecha.

Para la CLAVE API, selecciona en el menú superior, junto a la Información del proyecto seleccionada, Keys y genera una nueva clave API para balenaCloud.

Cópialo y vete a balenaCloud para generar las variables de servicio en el contenedor edgeimpulse-inference EI_API_KEY EI_PROJECT_ID.

Una vez que se haya creado tu aplicación, puedes agregar un dispositivo a esa nueva aplicación haciendo clic en el botón Add device. También puedes configurar tu SSID WiFi y contraseña aquí si vas a utilizar WiFi.

Este proceso crea una imagen de balenaOS personalizada configurada para tu aplicación y tipo de dispositivo e incluye sus configuraciones de red si las especificaste. Una vez que se ha descargado la imagen de balenaOS, es hora de flashear tu tarjeta SD (en caso de que uses una Raspberry Pi).

Puedes usar balenaEtcher para esto. Si el archivo de imagen descargado tiene una extensión .zip, no es necesario descomprimirlo antes de usar balenaEtcher.

Una vez que se haya completado el proceso de flasheo, inserta tu tarjeta SD en la Raspberry Pi y conecta la fuente de alimentación.

Cuando el dispositivo se inicia por primera vez, se conecta a tu red automáticamente y luego al panel de balenaCloud. Después de unos momentos, verás el dispositivo la lista e indicara que está en línea.

Una vez que el dispositivo aparece en línea en el panel, automáticamente comenzará a descargar la aplicación Edge Impulse balenaCam. Después de unos minutos, la pantalla de información de tu dispositivo en el panel debería verse así, mostrando el dispositivo con los dos servicios de contenedor ejecutándose listos para clasificar imágenes a través de la cámara Pi adjunta a tu Raspberry Pi 4.

Cambia Public Device URL para permitirle acceder de forma remota a la cámara.

Prueba tu aplicación de clasificación de imágenes

Abre un navegador e introduce la URL de la Pi o la dirección IP local. 

La transmisión de la cámara Pi debe mostrarse en el sitio web. Si tienes algún problema, consulta la sección de solución de problemas a continuación.

Si la cámara está transmitiendo correctamente, intenta mover diferentes objetos frente a la cámara y verás qué bien funciona el clasificador. Las predicciones se muestran para todas las etiquetas con valores entre 0 y 1, siendo 1 una predicción perfecta.

 

Una pareja probable

Según Edge Impulse, hay un 99% de posibilidades de que estos calcetines coincidan.

Estos no coinciden

 

... y según Edge Impulse, hay un 99% de posibilidades de que estos calcetines "no"coincidan.

No un calcetín

Edge Impulse también puede determinar lo que probablemente no sea un calcetín, también conocido como "desconocido".

Disfruta de la formación de modelos de aprendizaje automático con Edge Impulse e impleméntalos en tu flota de dispositivos conectados con balena.

Solución de problemas que podrás encontrarte

  • Este proyecto utiliza WebRTC (un protocolo de comunicación en tiempo real). En algunos casos, falla una conexión WebRTC directa.
  • Esta versión actual usa mjpeg streaming cuando falla la conexión webRTC.
  • Los navegadores Chrome ocultarán la dirección IP local de WebRTC, haciendo que la página aparezca pero no la vista de la cámara. Para resolver esto, intenta lo siguiente:
    • Navega en chrome://flags/#enable-webrtc-hide-local-ips-with-mdns y configúralo en Desactivado.
    • Deberás reiniciar Chrome después de modificar la configuración.
  • Firefox también puede ocultar la dirección IP local de WebRTC, confirma lo siguiente en 'config:about'
    • media.peerconnection.enabled: true
    • media.peerconnection.ice.obfuscate_host_addresses: false.

SI QUIERES OTROS ARTICULOS INTERESANTES SIGUE LEYENDO AQUI


Compartir esta publicación



← Publicación más antigua Publicación más reciente →