Tabla de contenido:
- Paso 1: CNN y aprendizaje transferido: algo de teoría
- Paso 2: Prepare su entorno
- Paso 3: Instale AXeleRate y ejecute pruebas
- Paso 4: Vuelva a entrenar el modelo, convierta el modelo de Keras a.kmodel
- Paso 5: Ejecute el modelo en Sipeed Maix Bit
- Paso 6: Conclusiones
Video: Reconocimiento de imágenes con placas K210 y Arduino IDE / Micropython: 6 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:40
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
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
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 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
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
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:
Placas de circuito grabadas con ácido de impresora SLA 3D: 7 pasos (con imágenes)
Placas de circuito grabadas al ácido de impresora SLA 3D: Remix..remix .. Bueno, necesito una placa de desarrollo para mis chips ATtiny. No tengo un CNC para cortar una PCB, no conozco Kicad y no quiero pedir placas. Pero tengo una impresora de resina … y ácido y conozco SketchUp. Y me gusta hacer cosas. Que onda
Detección de objetos con placas Sipeed MaiX (Kendryte K210): 6 pasos
Detección de objetos con placas Sipeed MaiX (Kendryte K210): como continuación de mi artículo anterior sobre el reconocimiento de imágenes con placas Sipeed MaiX, decidí escribir otro tutorial, centrado en la detección de objetos. Recientemente apareció un hardware interesante con el chip Kendryte K210, incluido S
Inteligencia artificial y reconocimiento de imágenes con HuskyLens: 6 pasos (con imágenes)
Inteligencia artificial y reconocimiento de imágenes con HuskyLens: ¡Hola, chicos! Akarsh aquí de CETech. En este proyecto, vamos a echar un vistazo a HuskyLens de DFRobot. Es un módulo de cámara impulsado por inteligencia artificial que es capaz de realizar varias operaciones de inteligencia artificial como el reconocimiento facial
Introducción a Esp 8266 Esp-01 con Arduino IDE - Instalación de placas Esp en Arduino Ide y programación Esp: 4 pasos
Introducción a Esp 8266 Esp-01 con Arduino IDE | Instalación de placas Esp en Arduino Ide y programación de Esp: En este instructables aprenderemos cómo instalar placas esp8266 en Arduino IDE y cómo programar esp-01 y cargar código en él Dado que las placas esp son tan populares, así que pensé en corregir un instructivo para esto y la mayoría de las personas enfrentan problemas
Cómo configurar el IDE de Arduino para que funcione con las placas Tinusaur .: 3 pasos
Cómo configurar el IDE de Arduino para que funcione con las placas Tinusaur: Esta es una breve guía sobre cómo configurar el IDE de Arduino para que funcione con las placas Tinusaur. Lo que hace básicamente es hacerlo funcionar con los microcontroladores Atmel ATtiny85 / 45/25. . La única diferencia es que aparecerá en la lista de tableros como Tinusau