Tabla de contenido:

Reconocimiento de imágenes con placas K210 y Arduino IDE / Micropython: 6 pasos (con imágenes)
Reconocimiento de imágenes con placas K210 y Arduino IDE / Micropython: 6 pasos (con imágenes)

Video: Reconocimiento de imágenes con placas K210 y Arduino IDE / Micropython: 6 pasos (con imágenes)

Video: Reconocimiento de imágenes con placas K210 y Arduino IDE / Micropython: 6 pasos (con imágenes)
Video: #XGNR2020 | Inteligencia Artificial con MaixPy 2024, Noviembre
Anonim
Image
Image

Ya escribí un artículo sobre cómo ejecutar demostraciones de OpenMV en Sipeed Maix Bit y también hice un video de demostración de detección de objetos con esta placa. Una de las muchas preguntas que la gente ha hecho es: ¿cómo puedo reconocer un objeto para el que la red neuronal no está entrenada? En otras palabras, cómo crear su propio clasificador de imágenes y ejecutarlo con aceleración de hardware.

Esta es una pregunta comprensible, ya que para su proyecto probablemente no necesite reconocer algunos objetos genéricos, como perros, gatos y aviones. Desea reconocer algo específico, por ejemplo, una raza de perro para esa puerta automática para mascotas, o una especie de planta para clasificar, o cualquier otra aplicación existente en la que pueda pensar.

¡Te entiendo! En este artículo, le enseñaré cómo crear su propio clasificador de imágenes personalizado con transferencia de aprendizaje en Keras, convertir el modelo entrenado a formato.kmodel y ejecutarlo en la placa Sipeed (puede ser cualquier placa, Bit / Dock o Go) usando Micropython o IDE de Arduino. Y solo tu imaginación será el límite para las tareas que puedes hacer con este conocimiento.

ACTUALIZACIÓN DE MAYO DE 2020: Al ver cómo mi artículo y video sobre Reconocimiento de imágenes con placas K210 siguen siendo muy populares y entre los mejores resultados en YouTube y Google, decidí actualizar el artículo para incluir la información sobre aXeleRate, marco de trabajo basado en Keras para IA en el Edge que desarrollo.

aXeleRate, esencialmente, se basa en la colección de scripts que utilicé para entrenar modelos de reconocimiento de imágenes / detección de objetos, combinados en un solo marco y optimizados para el flujo de trabajo en Google Colab. Es más cómodo de usar y más actualizado.

Para la versión anterior del artículo, aún puede verlo en steemit.com.

Paso 1: CNN y aprendizaje transferido: algo de teoría

CNN y el aprendizaje transferido: algo de teoría
CNN y el aprendizaje transferido: algo de teoría

Las redes neuronales convolucionales o CNN son una clase de redes neuronales profundas, más comúnmente aplicadas al análisis de imágenes visuales. Hay mucha literatura en Internet sobre el tema y daré algunos enlaces en la última parte del artículo. En resumen, puede pensar en CNN como una serie de filtros, aplicados a la imagen, cada filtro busca una característica específica en la imagen; en las capas convolucionales inferiores, las características suelen ser líneas y formas simples y en las capas superiores, las características. puede ser más específico, p. ej. partes del cuerpo, texturas específicas, partes de animales o plantas, etc. La presencia de cierto conjunto de características puede darnos una pista de cuál podría ser el objeto de la imagen. ¿Bigotes, dos ojos y una nariz negra? ¡Debe ser un gato! ¿Hojas verdes, un tronco de árbol? ¡Parece un árbol!

Espero que ahora se haga una idea sobre el principio de funcionamiento de CNN. Normalmente, una red neuronal profunda necesita miles de imágenes y horas de tiempo de entrenamiento (depende del hardware que esté usando para el entrenamiento) para "desarrollar" filtros que son útiles para reconocer los tipos de objetos que desea. Pero hay un atajo.

Un modelo entrenado para reconocer muchos objetos comunes diferentes (gatos, perros, electrodomésticos, transporte, etc.) ya tiene muchos de esos filtros útiles "desarrollados", por lo que no lo necesitamos para aprender a reconocer las formas y partes básicas. de los objetos de nuevo. Podemos simplemente volver a entrenar las últimas capas de la red para reconocer clases específicas de objetos que son importantes para nosotros. A esto se le llama "aprendizaje por transferencia". Necesita mucho menos datos de entrenamiento y tiempo de cálculo con el aprendizaje por transferencia, ya que solo está entrenando las últimas capas de la red, compuestas tal vez por unos pocos cientos de neuronas.

Suena genial, ¿verdad? Veamos cómo implementarlo.

Paso 2: Prepare su entorno

Prepare su entorno
Prepare su entorno

Hay dos formas de usar aXeleRate: ejecutándose localmente en una máquina Ubuntu o en Google Colab. Para ejecutar en Google Colab, eche un vistazo a este ejemplo:

Clasificación de imágenes Colab Notebook

Entrenar su modelo localmente y exportarlo para usarlo con aceleración de hardware también es mucho más fácil ahora.

Mi entorno de trabajo es Ubuntu 16.04, 64 bits. Puede usar la máquina virtual para ejecutar la imagen de Ubuntu, ya que no usaremos GPU para el entrenamiento. Con algunas modificaciones, también puede ejecutar el script de entrenamiento en Windows, pero para la conversión del modelo deberá usar el sistema Linux. Entonces, el entorno preferible para que ejecute este tutorial es Ubuntu 16.04, que se ejecuta de forma nativa o en una máquina virtual.

Comencemos instalando Miniconda, que es un administrador de entorno para Python. Crearemos un entorno aislado, por lo que no cambiaremos nada accidentalmente en el entorno Python de su sistema.

Descarga el instalador aquí

Una vez completada la instalación, cree un nuevo entorno:

conda crear -n ml python = 3.7

Activemos el nuevo entorno

conda activar ml

Aparecerá un prefijo antes de su shell bash con el nombre del entorno, lo que indica que ahora trabaja en ese entorno.

Paso 3: Instale AXeleRate y ejecute pruebas

Instale AXeleRate y ejecute pruebas
Instale AXeleRate y ejecute pruebas

Instale aXeleRate en su máquina local con

pip install git +

Para descargar ejemplos, ejecute:

clon de git

Puede ejecutar pruebas rápidas con tests_training.py en la carpeta aXeleRate. Ejecutará entrenamiento e inferencia para cada tipo de modelo, guardará y convertirá modelos entrenados. Dado que solo se está entrenando durante 5 épocas y el conjunto de datos es muy pequeño, no podrá obtener modelos útiles, pero este script solo está destinado a verificar la ausencia de errores.

Paso 4: Vuelva a entrenar el modelo, convierta el modelo de Keras a.kmodel

Vuelva a entrenar el modelo, convierta el modelo de Keras a.kmodel
Vuelva a entrenar el modelo, convierta el modelo de Keras a.kmodel

Para este ejemplo de juguete, entrenaremos al modelo para que reconozca a Santa Claus y Arduino Uno. Obviamente puedes elegir otras clases. Descarga el conjunto de datos desde aquí. Cree una copia del archivo classifier.json en la carpeta de configuración, luego cámbielo en consecuencia, similar al archivo de configuración en la captura de pantalla: asegúrese de que la ruta a las carpetas de capacitación y validación sea correcta.

Ejecute el siguiente comando desde la carpeta aXeleRate:

python axelerate / train.py - c configs / santa_uno.json

Comenzará el entrenamiento. Si la precisión de la validación (nuestra métrica de validación) no mejora durante 20 épocas, el entrenamiento se detendrá prematuramente. Cada vez que mejora la precisión de la validación, el modelo se guarda en la carpeta del proyecto. Una vez finalizado el entrenamiento, aXeleRate convierte automáticamente el mejor modelo a los formatos especificados; puede elegir "tflite", "k210" o "edgetpu" a partir de ahora.

Paso 5: Ejecute el modelo en Sipeed Maix Bit

Ejecute el modelo en Sipeed Maix Bit
Ejecute el modelo en Sipeed Maix Bit
Ejecute el modelo en Sipeed Maix Bit
Ejecute el modelo en Sipeed Maix Bit
Ejecute el modelo en Sipeed Maix Bit
Ejecute el modelo en Sipeed Maix Bit

Hay dos formas de ejecutar el modelo que tiene ahora en el hardware Sipeed Maix: firmware micropython y Arduino IDE. El hardware de Micropython es más fácil de usar, pero ocupa una parte significativa de la memoria disponible, por lo que queda menos espacio para el modelo. Arduino IDE es básicamente código C, que es mucho más eficiente y ocupa menos memoria. Mi modelo es de solo 1,9 Mb, por lo que ambas opciones funcionan. Puede usar modelos tan grandes como 2.9 Mb con Micropython, para cualquier cosa más grande, debe considerar el uso de Arduino IDE.

Descargue OpenMV IDE desde aquí y firmware de micropython mínimo desde aquí.

Grabe el firmware con la herramienta kflash_gui. También puede optar por grabar el modelo entrenado en flash también, como se muestra en la captura de pantalla. O cópielo a la tarjeta SD (en ese caso copie.kmodel a la raíz de una tarjeta SD e inserte la tarjeta SD en Sipeed Maix Bit)

Abra OpenMV IDE y presione el botón de conexión. Abra el script santa_uno.py de la carpeta example_scripts y presione el botón Inicio. ¡Debería ver una transmisión en vivo desde la cámara y si abre Serial Terminal obtendrá el mejor resultado de reconocimiento de imagen con la puntuación de confianza!

Para usar con Arduino IDE, primero debe seguir el procedimiento para agregar placas Sipeed a Arduino IDE, que se documenta aquí. Su versión de Arduino IDE debe ser al menos 1.8.12. Después de agregar los tableros, abra el boceto mobilenet_v1_transfer_learning.ino y cárguelo en Sipeed Maix Bit. Cambie el nombre del modelo en la tarjeta SD a "modelo" (o haga una copia con este nombre). Puede cambiar los nombres de las etiquetas en names.cpp. Mostrará la transmisión de la cámara en vivo en la pantalla de Sipeed Maix junto con el resultado de reconocimiento de imagen superior.

Paso 6: Conclusiones

Aquí hay más materiales para leer sobre el tema de las CNN y la transferencia de aprendizaje:

Transferir aprendizaje usando Mobilenet y Keras Una gran explicación de Transferir aprendizaje, este tutorial usa una versión modificada del código de ese artículo.

Gatos y perros y redes neuronales convolucionales Explica los conceptos básicos detrás de las CNN y visualiza algunos de los filtros. ¡Con gatos!

¡Entrene, convierta, ejecute MobileNet en Sipeed MaixPy y MaixDuino! Un tutorial del equipo de Sipeed sobre cómo entrenar clases de Mobilenet 1000 desde cero (sin transferencia de aprendizaje). ¡Puedes descargar su modelo previamente entrenado y probarlo!

¡Espero que pueda usar el conocimiento que tiene ahora para construir algunos proyectos increíbles con visión artificial! Puede comprar placas Sipeed aquí, se encuentran entre las opciones más baratas disponibles para ML en sistemas integrados.

Recomendado: