Este artículo detalla cómo portar y ejecutar el modelo MobileNetV3 en la plataforma embedded NXP i.MX8MP para lograr la función de reconocimiento de dígitos escritos a mano. Desde la importación de conjuntos de datos, formación y validación de modelos hasta la cuantización y implementación de TensorFlow Lite, demuestra completamente el proceso de uso de la herramienta eIQ Portal. A través de este caso, los lectores pueden aprender rápidamente cómo implementar la inferencia de borde de modelos de aprendizaje profundo ligeros en una plataforma ARM de clase industrial. Importar el Dataset Si no tienes un conjunto de datos, puedes hacer clic directamente en "Importar conjunto de datos" y seleccionar el conjunto de datos proporcionado en la herramienta. (Si tienes tu propio conjunto de datos, puedes hacer clic en "Crear un proyecto en blanco" para importarlo directamente.) Este documento utiliza el conjunto de datos proporcionado por la herramienta. Use la herramienta para cargar el conjunto de datos de TensorFlow, como se muestra a continuación. Puede seleccionar los conjuntos de datos proporcionados desde el menú de caída hacia abajo en la esquina superior izquierda. Estos son todos los conjuntos de datos comúnmente utilizados en TensorFlow. Este documento utiliza el conjunto de datos mnist. El conjunto de datos de mnist tiene 60.000 dígitos escritos a mano como conjunto de entrenamiento y 10.000 dígitos escritos a mano como conjunto de validación. cifar10: It contains color images of 10 classes, with 50,000 images as the training set and 10,000 images as the validation set. horses_or_humans: horses_or_humans: It has 2 classes, humans and horses. There are 1,027 images of humans and 1,027 images of horses respectively. tf_flowers: It has 5 classes, with a total of 3,670 images of all kinds of flowers. También hay un menú "tipo de problema" en la esquina superior izquierda, que representa el tipo de tarea. Como se muestra a continuación, esta versión de la herramienta solo proporciona dos tipos, uno es la clasificación de imágenes y el otro es la detección de objetos. En la tarea de detección de objetos, solo hay un conjunto de datos, coco/2017. Este conjunto de datos puede detectar 80 tipos de reconocimiento de objetos, con 118.287 imágenes como el conjunto de entrenamiento, 5.000 imágenes como el conjunto de validación y 20.288 imágenes como el conjunto de prueba. Después de seleccionar el conjunto de datos, haga clic en el botón "IMPORT", seleccione el directorio de guardar y espere la importación. Seleccione el directorio de guardar. Espere a que se importe el conjunto de datos. Después de que se haya completado la importación, puede ver el conjunto de datos del mnist. El lado izquierdo muestra el número de cada imagen y las etiquetas de la imagen. El lado derecho muestra cada imagen en el conjunto de datos. Puede ver la información detallada seleccionando una imagen. Modelos de entrenamiento Después de importar el conjunto de datos, el siguiente paso es seleccionar un modelo. Como se muestra a continuación, haga clic en el botón "SELECT MODEL" en la figura. La interfaz para seleccionar un modelo es como se muestra a continuación. En esta interfaz, se muestran tres opciones diferentes a la izquierda, y sus funciones son las siguientes: RESTAURAR MODELO: Cargar el modelo utilizado la última vez. Modelos de base: Seleccione los modelos de base proporcionados. Modelos de usuario: Seleccione los modelos que ha creado. A la derecha, se muestran modelos con diferentes funciones, como modelos de clasificación, modelos de segmentación de imagen y modelos de detección de objetos. Este documento utiliza el modelo base proporcionado por eIQ Portal, por lo que seleccione ''BASE MODEL'' como se muestra en la figura siguiente. La figura de abajo muestra varios modelos de base proporcionados por la herramienta. Este documento utiliza el modelo mobilenet_v3. Las estructuras de los diferentes modelos se pueden ver a través de la "HERRAMINA DE MODELO" en la página inicial. Después de seleccionar el modelo, ingrese la etapa de entrenamiento del modelo. Su interfaz es como se muestra a continuación. El lado izquierdo muestra los parámetros a ajustar durante el proceso de entrenamiento, incluyendo la tasa de aprendizaje, el tamaño de batches y las épocas, etc. Se puede ajustar según sea necesario. Los parámetros para este entrenamiento son como se muestra a continuación. Después de seleccionar, haga clic en "Empezar el entrenamiento". La precisión y el valor de pérdida del modelo a la derecha se puede ver intuitivamente. Después de que el entrenamiento del modelo se haya completado, como se muestra en la figura a continuación, puede establecer diferentes intervalos para ver la información de los pasos. Modelo de validación Después de que el entrenamiento del modelo se haya completado, el modelo debe ser validado. Seleccione "VALIDATE" para entrar en la fase de validación del modelo. En la interfaz de validación del modelo, también es necesario establecer los parámetros de validación, incluyendo el umbral Softmax y algunos parámetros de cuantización. Los parámetros establecidos en este documento son los siguientes. Después de configurar, haga clic en "Validar" como se muestra a continuación. Una vez concluida la validación, la matriz de confusión y la precisión del modelo se mostrarán en la interfaz, como se muestra a continuación. Modelo de conversión Después de que el entrenamiento y la validación del modelo se hayan completado, para ejecutar el modelo en el OKMX8MP, el modelo debe ser convertido en un archivo en el formato .tflite. Por lo tanto, el modelo debe ser convertido. Haga clic en "DEPLOY" para entrar en la interfaz de conversión. Como se muestra en la figura siguiente. Seleccione el tipo de exportación desde el menú izquierdo - mano baja - abajo. En este documento, el formato de exportación es el formato TensorFlow Lite. Al mismo tiempo, para fines ligeros, los tipos de datos de la entrada y la salida están ajustados a int8. Después de establecer los parámetros, seleccione "EXPORT MODEL" para exportar el modelo en el formato .tflite, y luego porte el modelo en este formato al i.MX8MP. Modelo de predicción Antes de la predicción del modelo, deben prepararse los siguientes archivos. Archivo Mobilen_v3.tflite Los archivos de imagen digitales escritos a mano para ser predichos. El archivo de script de Python para cargar el modelo y la imagen pre - procesamiento. Entre ellos, el archivo .tflite se puede exportar con éxito después de la validación del modelo. Puede seleccionar varios archivos de imagen de dígitos escritos a mano del conjunto de datos, o puede escribirlos a mano y luego convertirlos en imágenes de caracteres de 28x28 negro - fondo blanco. Este documento utiliza las siguientes 30 imágenes para la predicción, nombradas en la forma de "group number_label". Como se muestra en la figura siguiente. Escribe un script en Python: import numpy as np from PIL import Image import tflite_runtime.interpreter as tflite -------- Configuración -------- MODEL_PATH = "/home/root/mobilenet_v3.tflite" IMAGE_PATHS = [ "/home/root/1_0.jpg", ''/home/root/1_1.jpg", "/home/root/1_2.jpg", "/home/root/1_3.jpg", ''/home/root/1_4.jpg", "/home/root/1_5.jpg", ''/home/root/1_6.jpg", "/home/root/1_7.jpg", "/home/root/1_8.jpg", "/home/root/1_9.jpg", "/home/root/2_0.jpg", ''/home/root/2_1.jpg", "/home/root/2_2.jpg", "/home/root/2_3.jpg", ''/home/root/2_4.jpg", "/home/root/2_5.jpg", ''/home/root/2_6.jpg", "/home/root/2_7.jpg", "/home/root/2_8.jpg", "/home/root/2_9.jpg", "/home/root/3_0.jpg", ''/home/root/3_1.jpg", "/home/root/3_2.jpg", "/home/root/3_3.jpg", ''/home/root/3_4.jpg", "/home/root/3_5.jpg", ''/home/root/3_6.jpg", "/home/root/3_7.jpg", "/home/root/3_8.jpg", "/home/root/3_9.jpg", ] -------- Cargar el modelo --------- Interpreter(model_path=MODEL_PATH) interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() Modelo de información de entrada input_shape = input_details[0]['shape'] # [1, H, W, C] altura, anchura, canales = input_shape[1], input_shape[2], input_shape[3] input_dtype = input_details[0]['dtype'] # np.float32 或 np.int8 Parámetro de cuantización (si int8) escala, zero_point = input_details[0]['cuantización']` -------- Predicción -------- for img_path in IMAGE_PATHS: # Open the picture and turn to RGB (3 channels) img = Image.open(img_path).convert('RGB') img = img.resize((width, height)) # Convert to numpy array img_array = np.array(img, dtype=np.float32) # If the training data is black on a white background, it can be reversed #img_array = 255 - img_array # Normalized to 0 ~ 1 img_array = img_array / 255.0 # Adjust the shape to [1, H, W, 3] img_array = img_array.reshape(1, height, width, channels) # If the model is a quantized int8, then transform if input_dtype == np.int8: img_array = img_array / scale + zero_point img_array = np.round(img_array).astype(np.int8) # Set the input interpreter.set_tensor(input_details[0]['index'], img_array) # reasoning interpreter.invoke() # Get output output_data = interpreter.get_tensor(output_details[0]['index']) predicted_label = np.argmax(output_data) print(f''picture{img_path} prediction {predicted_label}") Copie los tres archivos en i.MX8MP, como se muestra en la siguiente figura. Introduzca el siguiente comando para hacer predicciones: python3 demo.py El resultado de la salida es el siguiente: De acuerdo con los resultados de salida, se puede ver que la etiqueta de imagen de 3_9.jpg debe ser 9, mientras que el modelo predice 7, y todas las demás imágenes se predicen para ser normal. Basándose en los resultados de la predicción, se puede ver que el modelo entrenado esta vez tiene una alta precisión y todavía funciona bien cuando se transplanta en i.MX8MP.