Эта статья подробно описывает, как портировать и запускать модель MobileNetV3 на встроенной платформе NXP i.MX8MP для достижения функции распознавания ручных цифр. От импорта наборов данных, обучения моделей и валидации до квантизации и развертывания TensorFlow Lite, она полностью демонстрирует процесс использования инструмента eIQ Portal. Импортировать набор данных Если у вас нет набора данных, вы можете напрямую нажать «Импортировать набор данных» и выбрать набор данных, предоставленный в инструменте. (Если у вас есть свой собственный набор данных, вы можете нажать «Создать пустой проект», чтобы непосредственно импортировать его.) Эта статья использует набор данных, предоставленный инструментом.Используйте инструмент для загрузки набора данных из TensorFlow, как показано ниже. Вы можете выбрать предоставленные наборы данных из меню drop-down в верхнем левом углу. Это все наборы данных, которые обычно используются в TensorFlow. Эта статья использует набор данных mnist. Набор данных mnist содержит 60 000 рукописных цифр в качестве набора обучения и 10 000 рукописных цифр в качестве набора подтверждения. 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. Кроме того, в верхнем левом углу есть меню «Тип проблемы» — вниз, которое представляет тип задачи. Как показано ниже, эта версия инструмента предоставляет только два типа, один — классификацию изображений, а другой — обнаружение объектов. В задании обнаружения объектов существует только один набор данных, coco/2017. Этот набор данных может обнаружить 80 типов распознавания объектов, с 118,287 изображениями как набор обучения, 5000 изображений как набор проверки и 20,288 изображений как набор тестирования. После выбора набора данных, нажмите кнопку «IMPORT», выберите каталог сохранения и подождите импорт, как показано на рисунке ниже: Выберите Save Directory. Подождите, пока будет импортирован набор данных. После того, как импорт завершен, вы можете просмотреть набор данных mnist. Левая сторона отображает число каждого изображения и этикетки изображения. Правая сторона отображает каждое изображение в наборе данных. Вы можете просмотреть подробную информацию, выбрав изображение. Model Training После импорта набора данных следующим шагом является выбор модели. Как показано ниже, нажмите кнопку «Выберите модель» на рисунке. The interface for selecting a model is as shown below. In this interface, three different options are shown on the left, and their functions are as follows: Восстановить модель: загрузить модель, которую вы использовали в последний раз. Базовые модели: Выберите предоставленные базовые модели. USER MODELS: Select the models you created. Справа отображаются модели с различными функциями, такие как модели классификации, модели сегментации изображений и модели обнаружения объектов. Эта статья использует базовую модель, предоставленную eIQ Portal, поэтому выберите «BASE MODEL», как показано на рисунке ниже. На рисунке ниже показано несколько базовых моделей, предоставляемых инструментом. Эта статья использует модель mobilenet_v3. Структуры различных моделей можно просмотреть через «МОДЕЛЬНЫЙ TOOL» на начальной странице. После выбора модели введите этап обучения модели. Его интерфейс выглядит так, как показано ниже. Левая сторона отображает параметры, которые нужно настроить во время процесса обучения, включая скорость обучения, размер партии и эпохи и т. д. Его можно настроить по мере необходимости. Правая сторона может отображать соответствующую информацию, такую как точность и значение потерь во время процесса обучения. Параметры для этого тренинга представлены ниже. После выбора нажмите «Пуск тренинга». Точность и значение потерь модели справа можно интуитивно просмотреть. После завершения модели обучения, как показано на рисунке ниже, вы можете настроить различные диапазоны для просмотра информации о шагах. Модель валидации After the model training is completed, the model needs to be validated. Select ''VALIDATE'' to enter the model validation stage. As shown in the figure below. В интерфейсе подтверждения модели также необходимо установить параметры подтверждения, включая порог Softmax и некоторые параметры количественного определения. Параметры, указанные в этой статье, следуют.После настройки нажмите «Валидировать», как показано ниже. После завершения проверки матрица путаницы и точность модели будут отображаться в интерфейсе, как показано ниже. Модель конверсии После завершения обучения модели и валидации, чтобы запустить модель на OKMX8MP, модель должна быть преобразована в файл в формате .tflite. Поэтому модель должна быть преобразована. Нажмите «DEPLOY» для входа в интерфейс преобразования. Как показано на рисунке ниже. Выберите тип экспорта из меню слева — рука вниз. В этой статье форматом экспорта является формат TensorFlow Lite. В то же время, для легких целей, типы данных ввода и вывода устанавливаются как на int8. После настройки параметров выберите «EXPORT MODEL», чтобы экспортировать модель в формате .tflite, а затем порт модели в этом формате в i.MX8MP. Модель прогноза Before the model prediction, the following files need to be prepared. Mobilen_v3.tflite файлы The handwritten digit image files to be predicted. Файл скрипта Python для загрузки модели и предварительной обработки изображения. Среди них, .tflite файл можно успешно экспортировать после проверки модели. Вы можете выбрать несколько рукописных цифровых изображений файлов из набора данных, или вы можете написать их вручную и затем преобразовать их в 28x28 черный - фон белый - изображения символов. Эта статья использует следующие 30 изображений для предсказания, названных в форме "group number_label". Как показано на рисунке ниже. Напишите скрипт Python: import numpy as np from PIL import Image import tflite_runtime.interpreter as tflite -------- Конфигурация -------- 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", ] -------- Загрузить модель --------- Переводчик(model_path=MODEL_PATH) переводчик.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() Модель ввода информации input_shape = input_details[0]['shape'] # [1, H, W, C] height, width, channels = input_shape[1], input_shape[2], input_shape[3] input_dtype = input_details[0]['dtype'] # np.float32 或 np.int8 Параметр количественного определения (если int8) scale, zero_point = input_details[0]['quantization']` — Предсказание — Предсказание — Предсказание 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}") Копируйте все три файла в i.MX8MP, как показано на следующем рисунке. Введите следующую команду для прогнозирования: python3 demo.py Результат выхода выглядит следующим образом: Согласно результатам выхода, можно видеть, что ярлык изображения 3_9.jpg должен быть 9, в то время как модель предсказывает 7, и все остальные изображения предсказываются как нормальные. Исходя из результатов прогноза, можно увидеть, что модель, обученная на этот раз, обладает высокой точностью и по-прежнему хорошо работает при пересадке на i.MX8MP.