Skip to main content

Entrena y Despliega Tu Propio Modelo de IA en Grove - Vision AI

Actualizable a Sensores Industriales

Con el controlador S2110 y el registrador de datos S2100 de SenseCAP, puedes convertir fácilmente el Grove en un sensor LoRaWAN®. Seeed no solo te ayuda con el prototipado, sino que también te ofrece la posibilidad de expandir tu proyecto con la serie SenseCAP de sensores industriales robustos.

La carcasa IP66, configuración Bluetooth, compatibilidad con la red global LoRaWAN®, batería integrada de 19 Ah y el potente soporte de la APP hacen del SenseCAP S210x la mejor opción para aplicaciones industriales. La serie incluye sensores para humedad del suelo, temperatura y humedad del aire, intensidad de luz, CO2, EC, y una estación meteorológica 8 en 1. Prueba el último SenseCAP S210x para tu próximo proyecto industrial exitoso.

Sensor Industrial SenseCAP
S2100
Registrador de Datos
S2101
Temp. y Humedad del Aire
S2102
Luz
S2103
Temp. y Humedad del Aire y CO2
S2104
Humedad y Temp. del Suelo
S2105
Humedad y Temp. del Suelo y EC
S2110
Controlador LoRaWAN®
S2120
Estación Meteorológica 8 en 1

Descripción general

En esta wiki, te enseñaremos cómo entrenar tu propio modelo de IA para tu aplicación específica y luego desplegarlo fácilmente en el Grove - Vision AI Module. ¡Comencemos!

Introducción al hardware

Utilizaremos principalmente el Grove - Vision AI Module a lo largo de esta wiki. Así que primero, familiaricémonos con el hardware.

Grove - Vision AI Module

Grove Vision AI Module representa una cámara de IA del tamaño de un pulgar, sensor personalizado que ya tiene instalado un algoritmo ML para detección de personas, y otros modelos personalizados. Siendo fácilmente desplegado y mostrado en minutos, funciona bajo un modelo de ultra bajo consumo, y proporciona dos formas de transmisión de señal y múltiples módulos integrados, todo lo cual lo hace perfecto para comenzar con cámaras potenciadas por IA.

Introducción al software

Utilizaremos las siguientes tecnologías de software en esta wiki

  • Roboflow - para anotar
  • YOLOv5 - para entrenar
  • TensorFlow Lite - para inferencia

¿Qué es Roboflow?

Roboflow es una herramienta de anotación basada en línea. Esta herramienta te permite anotar fácilmente todas tus imágenes, agregar procesamiento adicional a estas imágenes y exportar el conjunto de datos etiquetado en diferentes formatos como YOLOV5 PyTorch, Pascal VOC, ¡y más! Roboflow también tiene conjuntos de datos públicos fácilmente disponibles para los usuarios.

¿Qué es YOLOv5?

YOLO es una abreviatura del término 'You Only Look Once'. Es un algoritmo que detecta y reconoce varios objetos en una imagen en tiempo real. Ultralytics YOLOv5 es la versión de YOLO basada en el framework PyTorch.

¿Qué es TensorFlow Lite?

TensorFlow Lite es un framework de aprendizaje profundo de código abierto, listo para producción y multiplataforma que convierte un modelo pre-entrenado en TensorFlow a un formato especial que puede ser optimizado para velocidad o almacenamiento. El modelo de formato especial puede ser desplegado en dispositivos edge como móviles usando Android o iOS o dispositivos embebidos basados en Linux como Raspberry Pi o Microcontroladores para hacer la inferencia en el Edge.

Estructura de la wiki

Esta wiki se dividirá en tres secciones principales

  1. Entrena tu propio modelo de IA con un conjunto de datos público
  2. Entrena tu propio modelo de IA con tu propio conjunto de datos
  3. Despliega el modelo de IA entrenado en el Grove - Vision AI Module

La primera sección será la forma más rápida de construir tu propio modelo de IA con el menor número de pasos. La segunda sección tomará algo de tiempo y esfuerzo para construir tu propio modelo de IA, pero definitivamente valdrá la pena el conocimiento. La tercera sección sobre desplegar el modelo de IA puede hacerse ya sea después de la primera o segunda sección.

Así que hay dos formas de seguir esta wiki:

  1. Seguir sección 1 y luego sección 3 - rápido de seguir
  2. Seguir sección 2 y luego sección 3 - lento de seguir

Sin embargo, alentamos a seguir la primera forma al principio y luego pasar a la segunda forma.

1. Entrena tu propio modelo de IA con un conjunto de datos público

El primer paso de un proyecto de detección de objetos es obtener datos para el entrenamiento. ¡Puedes descargar conjuntos de datos disponibles públicamente o crear tu propio conjunto de datos!

Pero, ¿cuál es la forma más rápida y fácil de comenzar con la detección de objetos? Bueno... Usar conjuntos de datos públicos puede ahorrarte mucho tiempo que de otro modo gastarías recopilando datos por ti mismo y anotándolos. Estos conjuntos de datos públicos ya están anotados listos para usar, dándote más tiempo para enfocarte en tus aplicaciones de visión de IA.

Preparación del hardware

  • Grove - Vision AI Module
  • Cable USB Type-C
  • Windows/ Linux/ Mac con acceso a internet

Preparación del software

  • No es necesario preparar software adicional

Usar conjunto de datos anotado disponible públicamente

Puedes descargar varios conjuntos de datos disponibles públicamente como el conjunto de datos COCO, conjunto de datos Pascal VOC y muchos más. Roboflow Universe es una plataforma recomendada que proporciona una amplia gama de conjuntos de datos y tiene más de 90,000 conjuntos de datos con más de 66 millones de imágenes disponibles para construir modelos de visión por computadora. También, puedes simplemente buscar conjuntos de datos de código abierto en Google y elegir entre una variedad de conjuntos de datos disponibles.

  • Paso 1. Visita esta URL para acceder a un conjunto de datos de Detección de Manzanas disponible públicamente en Roboflow Universe

  • Paso 2. Haz clic en Create Account para crear una cuenta de Roboflow

  • Paso 3. Haz clic en Download, selecciona YOLO v5 PyTorch como el Format, haz clic en show download code y haz clic en Continue

Esto generará un fragmento de código que usaremos más tarde dentro del entrenamiento de Google Colab. Así que por favor mantén esta ventana abierta en segundo plano.

Entrenar usando YOLOv5 en Google Colab

Después de haber elegido un conjunto de datos público, necesitamos entrenar el conjunto de datos. Aquí usamos un entorno de Google Colaboratory para realizar el entrenamiento en la nube. Además, usamos la api de Roboflow dentro de Colab para descargar fácilmente nuestro conjunto de datos.

Haz clic aquí para abrir un espacio de trabajo de Google Colab ya preparado, revisa los pasos mencionados en el espacio de trabajo y ejecuta las celdas de código una por una.

Nota: En Google Colab, en la celda de código bajo Step 4, puedes copiar directamente el fragmento de código de Roboflow como se mencionó anteriormente

Te guiará a través de lo siguiente:

  • Configurar un entorno para el entrenamiento
  • Descargar un conjunto de datos
  • Realizar el entrenamiento
  • Descargar el modelo entrenado

Para un conjunto de datos de detección de manzanas con 699 imágenes, tomó alrededor de 7 minutos terminar el proceso de entrenamiento en Google Colab ejecutándose en GPU NVIDIA Tesla T4 con 16GB de memoria GPU.

Si seguiste el proyecto de Colab anterior, sabes que puedes cargar 4 modelos al dispositivo todos a la vez. Sin embargo, ten en cuenta que solo un modelo puede ser cargado a la vez. Esto puede ser especificado por el usuario y se explicará más adelante en este wiki.

Desplegar e inferencia

Si quieres saltar directamente a la sección 3 que explica cómo desplegar el modelo de IA entrenado en Grove - Vision AI Module y realizar inferencia, haz clic aquí.

2. Entrena tu propio modelo de IA con tu propio conjunto de datos

Si quieres construir proyectos específicos de detección de objetos donde los conjuntos de datos públicos no tienen los objetos que quieres detectar, es posible que quieras construir tu propio conjunto de datos. Cuando registres datos para tu propio conjunto de datos, tienes que asegurarte de cubrir todos los ángulos (360 grados) del objeto, colocar el objeto en diferentes entornos, diferentes condiciones de iluminación y diferentes condiciones climáticas. Después de registrar tu propio conjunto de datos, también tienes que anotar las imágenes en el conjunto de datos. Todos estos pasos se cubrirán en esta sección.

Aunque hay diferentes métodos de recolección de datos como usar la cámara de un teléfono móvil, la mejor manera de recolectar datos es usar la cámara integrada en el Grove - Vision AI Module. Esto es porque los colores, la calidad de imagen y otros detalles serán similares cuando realicemos inferencia en el Grove - Vision AI Module, lo que hace que la detección general sea más precisa.

Anotar conjunto de datos usando Roboflow

Si usas tu propio conjunto de datos, necesitarás anotar todas las imágenes en tu conjunto de datos. Anotar significa simplemente dibujar cajas rectangulares alrededor de cada objeto que queremos detectar y asignarles etiquetas. Explicaremos cómo hacer esto usando Roboflow.

Roboflow es una herramienta de anotación basada en línea. Aquí podemos importar directamente el metraje de video que hemos grabado en Roboflow y será exportado en una serie de imágenes. Esta herramienta es muy conveniente porque nos permitirá ayudar a distribuir el conjunto de datos en "entrenamiento, validación y prueba". También esta herramienta nos permitirá añadir procesamiento adicional a estas imágenes después de etiquetarlas. Además, puede exportar fácilmente el conjunto de datos etiquetado en formato YOLOV5 PyTorch que es exactamente lo que necesitamos!

Para este wiki, usaremos un conjunto de datos con imágenes que contienen manzanas para que podamos detectar manzanas más tarde y hacer conteo también.

  • Paso 1. Haz clic aquí para registrarte en una cuenta de Roboflow

  • Paso 2. Haz clic en Create New Project para iniciar nuestro proyecto

  • Paso 3. Completa Project Name, mantén la License (CC BY 4.0) y Project type (Object Detection (Bounding Box)) como predeterminados. Bajo la columna What will your model predict?, completa un nombre de grupo de anotación. Por ejemplo, en nuestro caso elegimos apples. Este nombre debe resaltar todas las clases de tu conjunto de datos. Finalmente, haz clic en Create Public Project.
  • Paso 4. Arrastra y suelta las imágenes que has capturado usando Grove - Vision AI Module
  • Paso 5. Después de que las imágenes sean procesadas, haz clic en Finish Uploading. Espera pacientemente hasta que las imágenes sean subidas.
  • Paso 6. Después de que las imágenes sean subidas, haz clic en Assign Images
  • Paso 7. Selecciona una imagen, dibuja una caja rectangular alrededor de una manzana, elige la etiqueta como apple y presiona ENTER
  • Paso 8. Repite lo mismo para las manzanas restantes

Nota: Trata de etiquetar todas las manzanas que veas dentro de la imagen. Si solo una parte de una manzana es visible, trata de etiquetarla también.

  • Paso 9. Continúa anotando todas las imágenes en el conjunto de datos

Roboflow tiene una característica llamada Label Assist donde puede predecir las etiquetas de antemano para que tu etiquetado sea mucho más rápido. Sin embargo, no funcionará con todos los tipos de objetos, sino con un tipo seleccionado de objetos. Para activar esta característica, simplemente necesitas presionar el botón Label Assist, seleccionar un modelo, seleccionar las clases y navegar a través de las imágenes para ver las etiquetas predichas con cajas delimitadoras

Como puedes ver arriba, solo puede ayudar a predecir anotaciones para las 80 clases mencionadas. Si tus imágenes no contienen las clases de objetos de arriba, no puedes usar la característica de asistencia de etiquetas.

  • Paso 10. Una vez que el etiquetado esté terminado, haz clic en Add images to Dataset
  • Paso 11. A continuación dividiremos las imágenes entre "Train, Valid y Test". Mantén los porcentajes predeterminados para la distribución y haz clic en Add Images
  • Paso 12. Haz clic en Generate New Version
  • Paso 13. Ahora puedes añadir Preprocessing y Augmentation si prefieres. Aquí cambiaremos la opción Resize a 192x192

Aquí cambiamos el tamaño de imagen a 192x192 porque usaremos ese tamaño para entrenamiento y el entrenamiento será más rápido. De lo contrario, tendrá que convertir todas las imágenes a 192x192 durante el proceso de entrenamiento, lo que consume más recursos de CPU y hace que el proceso de entrenamiento sea más lento.

  • Paso 14. A continuación, procede con los valores predeterminados restantes y haz clic en Generate
  • Paso 15. Haz clic en Export, selecciona Format como YOLO v5 PyTorch, selecciona show download code y haz clic en Continue

Esto generará un fragmento de código que usaremos más tarde dentro del entrenamiento de Google Colab. Por favor, mantén esta ventana abierta en segundo plano.

Entrenar usando YOLOv5 en Google Colab

Después de terminar con la anotación del conjunto de datos, necesitamos entrenar el conjunto de datos. Ve a esta parte que explica cómo entrenar un modelo de IA usando YOLOv5 ejecutándose en Google Colab.

3. Desplegar el modelo entrenado y realizar inferencia

Grove - Vision AI Module

Ahora moveremos el model-1.uf2 que obtuvimos al final del entrenamiento al Grove - Vision AI Module. Aquí conectaremos el Grove - Vision AI Module con el Wio Terminal para ver los resultados de la inferencia.

Nota: Si esta es tu primera vez usando Arduino, te recomendamos encarecidamente que consultes Getting Started with Arduino. Además, por favor sigue esta wiki para configurar Wio Terminal para trabajar con Arduino IDE.

  • Paso 3. Haz doble clic en el botón de arranque del Grove - Vision AI Module para entrar en modo de almacenamiento masivo

Después de esto verás una nueva unidad de almacenamiento mostrada en tu explorador de archivos como GROVEAI

  • Paso 4. Arrastra y suelta el archivo model-1.uf2 a la unidad GROVEAI

Tan pronto como el uf2 termine de copiarse en la unidad, la unidad desaparecerá. Esto significa que el uf2 ha sido cargado exitosamente al módulo.

Nota: Si tienes 4 archivos de modelo listos, puedes arrastrar y soltar cada modelo uno por uno. Suelta el primer modelo, espera hasta que termine de copiarse, entra en modo de arranque nuevamente, suelta el segundo modelo y así sucesivamente.

  • Paso 5. Mientras el Grove - Vision AI Module aún está conectado con la PC usando USB, conéctalo al Wio Terminal mediante el puerto Grove I2C como sigue
  • Paso 6. Instala la librería Seeed_Arduino_GroveAI en Arduino IDE y abre el ejemplo object_detection.ino

  • Paso 7. Si solo has cargado un modelo (con índice 1) en Grove - Vision AI Module, cargará ese modelo. Sin embargo, si has cargado múltiples modelos, puedes especificar qué modelo usar cambiando MODEL_EXT_INDEX_[valor] donde valor puede tomar los dígitos 1,2,3 o 4

// for example:
if (ai.begin(ALGO_OBJECT_DETECTION, MODEL_EXT_INDEX_2))

Lo anterior cargará el modelo con índice 2

  • Paso 8. Dado que estamos detectando manzanas, haremos un pequeño cambio en el código aquí
Serial.print("Number of apples: ");
  • Paso 9. Conecta el Wio Terminal a la PC, sube este código al Wio Terminal y abre el monitor serie del IDE de Arduino con 115200 como velocidad de baudios

Podrás ver la información de detección en el monitor serie como se muestra arriba.

  • Paso 10. Haz clic aquí para abrir una ventana de vista previa del flujo de la cámara con las detecciones
  • Paso 11. Haz clic en el botón Connect. Entonces verás una ventana emergente en el navegador. Selecciona Grove AI - Paired y haz clic en Connect
  • Paso 12. ¡Ve los resultados de inferencia en tiempo real usando la ventana de vista previa!

Como puedes ver arriba, las manzanas están siendo detectadas con cajas delimitadoras alrededor de ellas. Aquí "0" corresponde a cada detección de la misma clase. Si tienes múltiples clases, se nombrarán como 0,1,2,3,4 y así sucesivamente. ¡También se muestra la puntuación de confianza para cada manzana detectada (0.8 y 0.84 en la demostración anterior)!

Contenido adicional

Si te sientes más aventurero, ¡puedes continuar siguiendo el resto del wiki!

¿Puedo entrenar un modelo de IA en mi PC?

También puedes usar tu propia PC para entrenar un modelo de detección de objetos. Sin embargo, el rendimiento del entrenamiento dependerá del hardware que tengas. También necesitas tener una PC con un SO Linux para el entrenamiento. Hemos usado una PC Ubuntu 20.04 para este wiki.

  • Paso 1. Clona el repositorio yolov5-swift e instala requirements.txt en un entorno Python>=3.7.0
git clone https://github.com/Seeed-Studio/yolov5-swift 
cd yolov5-swift
pip install -r requirements.txt
  • Paso 2. Si seguiste los pasos de esta wiki anteriormente, podrías recordar que exportamos el conjunto de datos después de anotar en Robolflow. También en Roboflow Universe, descargamos el conjunto de datos. En ambos métodos, había una ventana como la de abajo donde pregunta qué tipo de formato descargar para el conjunto de datos. Así que ahora, por favor selecciona download zip to computer, bajo Format elige YOLO v5 PyTorch y haz clic en Continue

Después de eso, un archivo .zip se descargará a tu computadora

  • Paso 3. Copia y pega el archivo .zip que descargamos en el directorio yolov5-swift y extráelo
# example
cp ~/Downloads/Apples.v1i.yolov5pytorch.zip ~/yolov5-swift
unzip Apples.v1i.yolov5pytorch.zip
  • Paso 4. Abre el archivo data.yaml y edita los directorios train y val como se muestra a continuación
train: train/images
val: valid/images
  • Paso 5. Descargar un modelo preentrenado adecuado para nuestro entrenamiento
sudo apt install wget
wget https://github.com/Seeed-Studio/yolov5-swift/releases/download/v0.1.0-alpha/yolov5n6-xiao.pt
  • Paso 6. Ejecuta lo siguiente para iniciar el entrenamiento

Aquí, podemos pasar varios argumentos:

  • img: define el tamaño de imagen de entrada
  • batch: determina el tamaño del lote
  • epochs: define el número de épocas de entrenamiento
  • data: establece la ruta a nuestro archivo yaml
  • cfg: especifica nuestra configuración del modelo
  • weights: especifica una ruta personalizada a los pesos
  • name: nombres de resultados
  • nosave: solo guarda el checkpoint final
  • cache: almacena en caché las imágenes para un entrenamiento más rápido
python3 train.py --img 192 --batch 64 --epochs 100 --data data.yaml --cfg yolov5n6-xiao.yaml --weights yolov5n6-xiao.pt --name yolov5n6_results --cache

Para un conjunto de datos de detección de manzanas con 987 imágenes, tomó alrededor de 30 minutos completar el proceso de entrenamiento en una PC local ejecutándose en GPU NVIDIA GeForce GTX 1660 Super con 6GB de memoria GPU.

Si siguió el proyecto de Colab anterior, sabe que puede cargar 4 modelos al dispositivo todos a la vez. Sin embargo, tenga en cuenta que solo un modelo puede cargarse a la vez. Esto puede ser especificado por el usuario y se explicará más adelante en este wiki.

  • Paso 7. Si navega a runs/train/exp/weights, verá un archivo llamado best.pt. Este es el modelo generado del entrenamiento.
  • Paso 8. Exporte el modelo entrenado a TensorFlow Lite
python3 export.py --data {dataset.location}/data.yaml --weights runs/train/yolov5n6_results/weights/best.pt --imgsz 192 --int8 --include tflite  
  • Paso 9. Convertir TensorFlow Lite a un archivo UF2

UF2 es un formato de archivo, desarrollado por Microsoft. Seeed usa este formato para convertir .tflite a .uf2, permitiendo que los archivos tflite se almacenen en los dispositivos AIoT lanzados por Seeed. Actualmente los dispositivos de Seeed soportan hasta 4 modelos, cada modelo (.tflite) es menor a 1M .

Puedes especificar el modelo a ser colocado en el índice correspondiente con -t.

Por ejemplo:

  • -t 1: índice 1
  • -t 2: índice 2
# Place the model to index 1
python3 uf2conv.py -f GROVEAI -t 1 -c runs//train/yolov5n6_results//weights/best-int8.tflite -o model-1.uf2

Aunque puedes cargar 4 modelos al dispositivo de una vez, ten en cuenta que solo un modelo puede ser cargado a la vez. Esto puede ser especificado por el usuario y se explicará más adelante en esta wiki.

  • Paso 10. Ahora se generará un archivo llamado model-1.uf2. ¡Este es el archivo que cargaremos en el Grove - Vision AI Module para realizar la inferencia!

Recursos

Soporte Técnico y Discusión de Productos

¡Gracias por elegir nuestros productos! Estamos aquí para brindarte diferentes tipos de soporte para asegurar que tu experiencia con nuestros productos sea lo más fluida posible. Ofrecemos varios canales de comunicación para satisfacer diferentes preferencias y necesidades.

Loading Comments...