data.f[0] = ángulo; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Error al invocar el modelo"); devolver; } TfLiteTensor* output = interpreter.output(0); float predicción = output->data.f[0]; Serial.print("Ángulo: "); Serial.print(angle); Serial.print(", Seno predicho: "); Serial.println(prediction); retraso(1000); } Copiar código ✔ ¡Copiado! Sube al ESP32, abre el Monitor Serial para ver los resultados. Detalle inesperado Puede que no esperes que la función de flotante aleatorio utilice un simple escalado de random(0, 10000), que puede no ser el más preciso para ML, pero funciona para este ejemplo. Desplegando TensorFlow Lite en ESP32 Este análisis exhaustivo explora el despliegue de TensorFlow Lite en el microcontrolador ESP32, detallando el proceso desde el entrenamiento del modelo hasta la ejecución, basado en investigaciones e implementaciones prácticas. El enfoque está en proporcionar una guía completa para desarrolladores, asegurando que todos los pasos sean claros y accionables, con consideraciones para las limitaciones de memoria y la integración de bibliotecas. Antecedentes y Contexto TensorFlow Lite, una versión ligera de TensorFlow, está diseñado para ejecutar modelos de aprendizaje automático en dispositivos con recursos limitados, como teléfonos móviles, sistemas embebidos y microcontroladores. El ESP32, desarrollado por Espressif, es un microcontrolador popular con capacidades de Wi-Fi y Bluetooth, lo que lo hace ideal para aplicaciones de IoT. Ejecutar modelos de aprendizaje automático localmente en el ESP32 mejora la privacidad, reduce la latencia y disminuye los costos al evitar la dependencia de la nube. El proceso implica entrenar un modelo en una PC, convertirlo al formato TensorFlow Lite, configurar el entorno de desarrollo ESP32, integrar el modelo y ejecutarlo para observar los resultados. Este análisis cubre cada paso, abordando posibles desafíos y proporcionando ejemplos de código detallados. Pasos Detallados para el Despliegue Paso 1: Entrenamiento de un Modelo de Aprendizaje Automático El primer paso es entrenar un modelo de aprendizaje automático utilizando un escritorio o servidor con suficiente potencia de cálculo. Para este ejemplo, entrenamos una red neuronal simple para predecir el seno de un ángulo dado, utilizando Python y la API de Keras. Instalación: Instala TensorFlow con el comando pip install tensorflow. Código de Entrenamiento: El siguiente código genera un conjunto de datos y entrena el modelo: importar numpy como np importar tensorflow como tf de tensorflow import keras # Generar conjunto de datos ángulos = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1)) sines = np.sin(ángulos) # Crear un modelo de red neuronal simple modelo = keras.Sequential([ keras.layers.Dense(1, input_shape=(1,)) ]) # Compilar el modelo model.compile(optimizer='adam', loss='mean_squared_error') # Entrenar el modelo model.fit(angles, sines, epochs=100, verbose=0) # Guardar el modelo model.save('sine_model.h5') Copiar código ✔ ¡Copiado! Notas: Este modelo es simple, con una capa densa, adecuado para los recursos limitados del ESP32. El conjunto de datos consiste en 1000 ángulos aleatorios y sus valores de seno, entrenado durante 100 épocas con el optimizador Adam y la pérdida de error cuadrático medio. Paso 2: Convertir el modelo al formato TensorFlow Lite Después del entrenamiento, convierte el modelo al formato TensorFlow Lite (.tflite) para su implementación en dispositivos con recursos limitados. Instalación: Instala la herramienta de conversión con pip install tflite. Comando de Conversión: Utilice lo siguiente para convertir: intento tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite Copiar código ✔ ¡Copiado!   Detalles: El archivo .tflite está optimizado para tamaño y rendimiento, lo cual es crucial para microcontroladores como el ESP32 con memoria flash y RAM limitadas. Paso 3: Configuración del Entorno de Desarrollo ESP32 Utiliza el IDE de Arduino para el desarrollo de ESP32, asegurándote de que el soporte de la placa y las bibliotecas necesarias estén instaladas. Soporte para la placa ESP32:   Abre el IDE de Arduino, ve a Archivo > Preferencias, y añade http://dl.espressif.com/dl/package_esp32_index.json a las URL adicionales del administrador de la junta.   Ve a Herramientas > Placa > Gestor de Placas, busca "esp32" e instala la última versión. Biblioteca TensorFlow Lite Micro:   Descarga desde el repositorio de GitHub y agrégalo al directorio de bibliotecas de Arduino, o usa el Administrador de Bibliotecas si está disponible.   Asegúrese de la compatibilidad con ESP32, ya que Espressif proporciona soporte específico para tflite-micro. Paso 4: Integrando el Modelo en el Código ESP32 Integra el modelo convirtiendo el archivo .tflite en un array de C y escribiendo un sketch de Arduino para cargarlo y ejecutarlo. Convertir a arreglo C: Usa xxd -i sine_model.tflite > sine_model.h para generar un archivo de encabezado que contenga los datos del modelo como un arreglo C, típicamente: unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model); Arduino Sketch: El siguiente código carga y ejecuta el modelo: #include #include "tflite-micro.h" #include "sine_model.h" tflite::MicroErrorReporter micro_error_reporter; tflite::ErrorReporter* error_reporter = µ_error_reporter; const unsigned char* model_data = sine_model; const size_t model_size = sine_model_len; const tflite::Model* modelo = tflite::GetModel(datos_del_modelo); tflite::AllOpsResolver resolver; constexpr int kTensorArenaSize = 2000; uint8_t tensor_arena[kTensorArenaSize]; tflite::MicroInterpreter intérprete(modelo, resolutor, tensor_arena, kTensorArenaSize, reportero_de_errores); float randomFloat(float min, float max) { return min + (max - min) * (float)random(0, 10000) / 10000.0; } configuración vacía() { Serial.begin(115200); interpreter.AsignarTensores(); } bucle vacío() { float angle = randomFloat(-3.1416, 3.1416); TfLiteTensor* input = interpreter.input(0); input->data.f[0] = ángulo; if (interpreter.Invoke() != kTfLiteOk) { error_reporter->Report("Error al invocar el modelo"); devolver; } TfLiteTensor* output = interpreter.output(0); float predicción = output->data.f[0]; Serial.print("Ángulo: "); Serial.print(angle); Serial.print(", Seno predicho: "); Serial.println(prediction); retraso(1000); } Copiar código ✔ ¡Copiado!   Notas: La función randomFloat genera ángulos aleatorios para pruebas, utilizando un método de escalado simple. El tamaño del área de tensores (2000 bytes) puede necesitar ajustes para modelos más grandes, dado que el ESP32 tiene 520 KB de SRAM. Paso 5: Cargar y Ejecutar el Código Compila y sube el sketch usando Arduino IDE, luego abre el Monitor Serial para observar los resultados, como ángulos y valores de seno predichos. Procedimiento: Asegúrese de que la placa esté seleccionada correctamente (por ejemplo, Módulo de Desarrollo ESP32), compile y cargue. Abra el Monitor Serial a 115200 baudios para ver las salidas. Consideraciones y Desafíos Potenciales Restricciones de Memoria: El ESP32 tiene 520 KB de SRAM y flash limitado, así que asegúrate de que el modelo y el área de tensores se ajusten dentro de estos límites. Optimiza reduciendo la complejidad del modelo o aumentando el tamaño del área de tensores si es necesario. Compatibilidad de la biblioteca: Asegúrese de que la versión de la biblioteca tflite-micro coincida con los requisitos de ESP32, ya que Espressif proporciona soporte específico. Generación de Números Aleatorios: La función randomFloat utiliza un método de escalado simple, que puede no ser preciso para todas las aplicaciones. Considera usar un generador de números aleatorios más robusto para producción. Paso Descripción Ejemplo de Comando/Código Instalar TensorFlow Instalar TensorFlow para el entrenamiento de modelos pip install tensorflow Modelo de tren Entrenar un modelo de predicción de seno utilizando Keras Ver el código de Python arriba Convertir modelo Convertir a formato TensorFlow Lite tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite Convertir a matriz C Generar encabezado C para datos del modelo xxd -i sine_model.tflite > sine_model.h Configurar ESP32 Instalar el soporte para la placa ESP32 y la biblioteca tflite-micro Agregar URL http://dl.espressif.com/dl/package_esp32_index.json, instalar a través del Gestor de Placas Ejecutar en ESP32 Boceto de Arduino para cargar y ejecutar el modelo Vea el código C++ arriba   Observación Inesperada Puede que no esperes que la función de flotante aleatorio utilice un simple escalado de random(0, 10000), lo cual puede no ser lo más preciso para el aprendizaje automático, pero funciona para este ejemplo, destacando las compensaciones en sistemas embebidos.   Conclusión Esta guía proporciona un proceso integral para implementar TensorFlow Lite en ESP32, desde el entrenamiento de un modelo simple de predicción de seno hasta su ejecución local. Abre posibilidades para dispositivos IoT inteligentes, con consideraciones para la memoria y la integración de bibliotecas que aseguran una implementación práctica. Citas clave Fácil TinyML en ESP32 y Arduino TensorFlow Lite Micro para chipsets Espressif Primeros pasos con ESP32 y TensorFlow Lite para Microcontroladores TensorFlow Lite TinyML para ESP32  ">
saltar al contenido

+49 1626571232

info@openelab.io

🚀 ¡Envío gratis a partir de 30€ en Alemania, 50€ en la UE!

TensorFlow Lite en ESP32

25 Feb 2025 0 Comentarios

¿Qué es TensorFlow Lite?

TensorFlow Lite es una versión ligera de TensorFlow, diseñada para dispositivos móviles y embebidos como el ESP32, que permite que los modelos de aprendizaje automático se ejecuten en hardware con recursos limitados.

Pasos para desplegar en ESP32

Aquí te mostramos cómo hacer funcionar un modelo de aprendizaje automático en tu ESP32:

Entrenar un modelo

Entrena una red neuronal simple, como predecir valores de seno, usando Python y Keras en tu PC. Instala TensorFlow con:
  • Comando: pip install tensorflow
  • Código de ejemplo:
    importar numpy como np
    importar tensorflow como tf
    de tensorflow import keras
    
    ángulos = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1))
    sines = np.sin(ángulos)
    modelo = keras.Sequential([keras.layers.Dense(1, input_shape=(1,))])
    model.compile(optimizer='adam', loss='mean_squared_error')
    model.fit(angles, sines, epochs=100, verbose=0)
    model.save('sine_model.h5')
    
    
    
    ✔ ¡Copiado!

Convertir a TensorFlow Lite

Convierte el modelo entrenado al formato .tflite:
  • Instalar herramienta: pip install tflite
  • Convertir: tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite

Configurar ESP32

Usa el IDE de Arduino para el desarrollo de ESP32. Instala el soporte para ESP32:

Integrar y ejecutar

Convertir .tflite a array C: xxd -i sine_model.tflite > sine_model.h. Usa este sketch de Arduino:
  • Código:
    #include 
    #include "tflite-micro.h"
    #include "sine_model.h"
    
    tflite::MicroErrorReporter micro_error_reporter;
    tflite::ErrorReporter* error_reporter = µ_error_reporter;
    const unsigned char* model_data = sine_model;
    const size_t model_size = sine_model_len;
    const tflite::Model* modelo = tflite::GetModel(datos_del_modelo);
    tflite::AllOpsResolver resolver;
    constexpr int kTensorArenaSize = 2000;
    uint8_t tensor_arena[kTensorArenaSize];
    tflite::MicroInterpreter intérprete(modelo, resolutor, tensor_arena, kTensorArenaSize, reportero_de_errores);
    
    float randomFloat(float min, float max) {
        return min + (max - min) * (float)random(0, 10000) / 10000.0;
    }
    
    configuración vacía() {
        Serial.begin(115200);
        interpreter.AsignarTensores();
    }
    
    bucle vacío() {
        float angle = randomFloat(-3.1416, 3.1416);
        TfLiteTensor* input = interpreter.input(0);
        input->data.f[0] = ángulo;
        if (interpreter.Invoke() != kTfLiteOk) {
            error_reporter->Report("Error al invocar el modelo");
            devolver;
        }
        TfLiteTensor* output = interpreter.output(0);
        float predicción = output->data.f[0];
        Serial.print("Ángulo: ");
        Serial.print(angle);
        Serial.print(", Seno predicho: ");
        Serial.println(prediction);
        retraso(1000);
    }
    
    
    
    ✔ ¡Copiado!
  • Sube al ESP32, abre el Monitor Serial para ver los resultados.

Detalle inesperado

Puede que no esperes que la función de flotante aleatorio utilice un simple escalado de random(0, 10000), que puede no ser el más preciso para ML, pero funciona para este ejemplo.

Desplegando TensorFlow Lite en ESP32

Este análisis exhaustivo explora el despliegue de TensorFlow Lite en el microcontrolador ESP32, detallando el proceso desde el entrenamiento del modelo hasta la ejecución, basado en investigaciones e implementaciones prácticas. El enfoque está en proporcionar una guía completa para desarrolladores, asegurando que todos los pasos sean claros y accionables, con consideraciones para las limitaciones de memoria y la integración de bibliotecas.

Antecedentes y Contexto

TensorFlow Lite, una versión ligera de TensorFlow, está diseñado para ejecutar modelos de aprendizaje automático en dispositivos con recursos limitados, como teléfonos móviles, sistemas embebidos y microcontroladores. El ESP32, desarrollado por Espressif, es un microcontrolador popular con capacidades de Wi-Fi y Bluetooth, lo que lo hace ideal para aplicaciones de IoT. Ejecutar modelos de aprendizaje automático localmente en el ESP32 mejora la privacidad, reduce la latencia y disminuye los costos al evitar la dependencia de la nube.
El proceso implica entrenar un modelo en una PC, convertirlo al formato TensorFlow Lite, configurar el entorno de desarrollo ESP32, integrar el modelo y ejecutarlo para observar los resultados. Este análisis cubre cada paso, abordando posibles desafíos y proporcionando ejemplos de código detallados.

Pasos Detallados para el Despliegue

Paso 1: Entrenamiento de un Modelo de Aprendizaje Automático

El primer paso es entrenar un modelo de aprendizaje automático utilizando un escritorio o servidor con suficiente potencia de cálculo. Para este ejemplo, entrenamos una red neuronal simple para predecir el seno de un ángulo dado, utilizando Python y la API de Keras.
  • Instalación: Instala TensorFlow con el comando pip install tensorflow.
  • Código de Entrenamiento: El siguiente código genera un conjunto de datos y entrena el modelo:
    importar numpy como np
    importar tensorflow como tf
    de tensorflow import keras
    
    # Generar conjunto de datos
    ángulos = np.random.uniform(low=-np.pi, high=np.pi, size=(1000, 1))
    sines = np.sin(ángulos)
    
    # Crear un modelo de red neuronal simple
    modelo = keras.Sequential([
        keras.layers.Dense(1, input_shape=(1,))
    ])
    
    # Compilar el modelo
    model.compile(optimizer='adam', loss='mean_squared_error')
    
    # Entrenar el modelo
    model.fit(angles, sines, epochs=100, verbose=0)
    
    # Guardar el modelo
    model.save('sine_model.h5')
    
    
    
    ✔ ¡Copiado!
  • Notas: Este modelo es simple, con una capa densa, adecuado para los recursos limitados del ESP32. El conjunto de datos consiste en 1000 ángulos aleatorios y sus valores de seno, entrenado durante 100 épocas con el optimizador Adam y la pérdida de error cuadrático medio.

Paso 2: Convertir el modelo al formato TensorFlow Lite

Después del entrenamiento, convierte el modelo al formato TensorFlow Lite (.tflite) para su implementación en dispositivos con recursos limitados.
  • Instalación: Instala la herramienta de conversión con pip install tflite.
  • Comando de Conversión: Utilice lo siguiente para convertir:
intento
tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite


✔ ¡Copiado!

 

  • Detalles: El archivo .tflite está optimizado para tamaño y rendimiento, lo cual es crucial para microcontroladores como el ESP32 con memoria flash y RAM limitadas.

Paso 3: Configuración del Entorno de Desarrollo ESP32

Utiliza el IDE de Arduino para el desarrollo de ESP32, asegurándote de que el soporte de la placa y las bibliotecas necesarias estén instaladas.
  • Soporte para la placa ESP32:
      Abre el IDE de Arduino, ve a Archivo > Preferencias, y añade http://dl.espressif.com/dl/package_esp32_index.json a las URL adicionales del administrador de la junta.
      Ve a Herramientas > Placa > Gestor de Placas, busca "esp32" e instala la última versión.
  • Biblioteca TensorFlow Lite Micro:
      Descarga desde el repositorio de GitHub y agrégalo al directorio de bibliotecas de Arduino, o usa el Administrador de Bibliotecas si está disponible.
      Asegúrese de la compatibilidad con ESP32, ya que Espressif proporciona soporte específico para tflite-micro.

Paso 4: Integrando el Modelo en el Código ESP32

Integra el modelo convirtiendo el archivo .tflite en un array de C y escribiendo un sketch de Arduino para cargarlo y ejecutarlo.
  • Convertir a arreglo C: Usa xxd -i sine_model.tflite > sine_model.h para generar un archivo de encabezado que contenga los datos del modelo como un arreglo C, típicamente:
unsigned char sine_model[] = { 0x00, 0x00, 0x00, 0x00, ... }; unsigned int sine_model_len = sizeof(sine_model);

Arduino Sketch: El siguiente código carga y ejecuta el modelo:
#include 
#include "tflite-micro.h"
#include "sine_model.h"

tflite::MicroErrorReporter micro_error_reporter;
tflite::ErrorReporter* error_reporter = µ_error_reporter;
const unsigned char* model_data = sine_model;
const size_t model_size = sine_model_len;
const tflite::Model* modelo = tflite::GetModel(datos_del_modelo);
tflite::AllOpsResolver resolver;
constexpr int kTensorArenaSize = 2000;
uint8_t tensor_arena[kTensorArenaSize];
tflite::MicroInterpreter intérprete(modelo, resolutor, tensor_arena, kTensorArenaSize, reportero_de_errores);

float randomFloat(float min, float max) {
    return min + (max - min) * (float)random(0, 10000) / 10000.0;
}

configuración vacía() {
    Serial.begin(115200);
    interpreter.AsignarTensores();
}

bucle vacío() {
    float angle = randomFloat(-3.1416, 3.1416);
    TfLiteTensor* input = interpreter.input(0);
    input->data.f[0] = ángulo;
    if (interpreter.Invoke() != kTfLiteOk) {
        error_reporter->Report("Error al invocar el modelo");
        devolver;
    }
    TfLiteTensor* output = interpreter.output(0);
    float predicción = output->data.f[0];
    Serial.print("Ángulo: ");
    Serial.print(angle);
    Serial.print(", Seno predicho: ");
    Serial.println(prediction);
    retraso(1000);
}


✔ ¡Copiado!

 

  • Notas: La función randomFloat genera ángulos aleatorios para pruebas, utilizando un método de escalado simple. El tamaño del área de tensores (2000 bytes) puede necesitar ajustes para modelos más grandes, dado que el ESP32 tiene 520 KB de SRAM.

Paso 5: Cargar y Ejecutar el Código

Compila y sube el sketch usando Arduino IDE, luego abre el Monitor Serial para observar los resultados, como ángulos y valores de seno predichos.
  • Procedimiento: Asegúrese de que la placa esté seleccionada correctamente (por ejemplo, Módulo de Desarrollo ESP32), compile y cargue. Abra el Monitor Serial a 115200 baudios para ver las salidas.

Consideraciones y Desafíos Potenciales

  • Restricciones de Memoria: El ESP32 tiene 520 KB de SRAM y flash limitado, así que asegúrate de que el modelo y el área de tensores se ajusten dentro de estos límites. Optimiza reduciendo la complejidad del modelo o aumentando el tamaño del área de tensores si es necesario.
  • Compatibilidad de la biblioteca: Asegúrese de que la versión de la biblioteca tflite-micro coincida con los requisitos de ESP32, ya que Espressif proporciona soporte específico.
  • Generación de Números Aleatorios: La función randomFloat utiliza un método de escalado simple, que puede no ser preciso para todas las aplicaciones. Considera usar un generador de números aleatorios más robusto para producción.
Paso Descripción Ejemplo de Comando/Código
Instalar TensorFlow Instalar TensorFlow para el entrenamiento de modelos pip install tensorflow
Modelo de tren Entrenar un modelo de predicción de seno utilizando Keras Ver el código de Python arriba
Convertir modelo Convertir a formato TensorFlow Lite tflite_convert --keras_model_file sine_model.h5 --output_file sine_model.tflite
Convertir a matriz C Generar encabezado C para datos del modelo xxd -i sine_model.tflite > sine_model.h
Configurar ESP32 Instalar el soporte para la placa ESP32 y la biblioteca tflite-micro Agregar URL http://dl.espressif.com/dl/package_esp32_index.json, instalar a través del Gestor de Placas
Ejecutar en ESP32 Boceto de Arduino para cargar y ejecutar el modelo Vea el código C++ arriba

 

Observación Inesperada

Puede que no esperes que la función de flotante aleatorio utilice un simple escalado de random(0, 10000), lo cual puede no ser lo más preciso para el aprendizaje automático, pero funciona para este ejemplo, destacando las compensaciones en sistemas embebidos.

 

Conclusión

Esta guía proporciona un proceso integral para implementar TensorFlow Lite en ESP32, desde el entrenamiento de un modelo simple de predicción de seno hasta su ejecución local. Abre posibilidades para dispositivos IoT inteligentes, con consideraciones para la memoria y la integración de bibliotecas que aseguran una implementación práctica.

Citas clave

 

Publicación anterior
Siguiente publicación

Deja un comentario

Todos los comentarios del blog se revisan antes de publicarlos.

Alguien compró recientemente un

¡Gracias por suscribirte!

¡Este correo electrónico ha sido registrado!

Compra el look

Elija opciones

Visto recientemente

Editar opción
Notificación de nuevo disponible
this is just a warning
Acceso
Carro de la compra
0 elementos
RuffRuff App RuffRuff App by Tsun