Тази статия описва как да се преноси и изпълнява модела MobileNetV3 на вградената платформа NXP i.MX8MP, за да се постигне функцията за разпознаване на ръчно написани цифри. От импортирането на набори от данни, обучението на модели и валидирането до квантизирането и внедряването на TensorFlow Lite, тя напълно демонстрира процеса на използване на инструмента eIQ Portal. Чрез този случай читателите могат бързо да научат как да прилагат извод на ръба на леки модели за дълбоко обучение на индустриална платформа ARM. Импортиране на Dataset Ако нямате набор от данни, можете директно да щракнете върху "Импортиране на набор от данни" и да изберете набора от данни, предоставен в инструмента. (Ако имате свой собствен набор от данни, можете да щракнете върху "Създаване на празен проект", за да го импортирате директно.) Този документ използва набора от данни, предоставен от инструмента. Използвайте инструмента за зареждане на набора от TensorFlow, както е показано по-долу. Можете да изберете предоставените набори от падащото меню в горния ляв ъгъл. Това са всички набори от данни, които обикновено се използват в TensorFlow. Наборът от данни на 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" и изчакайте да бъде импортиран. Изберете Save Directory. Изчакайте данните да бъдат импортирани. След като импортирането приключи, можете да преглеждате набора от данни на mnist. В лявата страна се показва броят на всяко изображение и етикетите на изображението. Вдясно се показва всяко изображение в набора от данни. Можете да преглеждате подробната информация, като изберете изображение. Модел на обучението След като импортирате набора от данни, следващата стъпка е да изберете модел.Както е показано по-долу, кликнете върху бутона "SELECT MODEL" на фигурата. Интерфейсът за избор на модел е както е показано по-долу. В този интерфейс са показани три различни опции отляво и техните функции са както следва: Възстановяване на модела: Заредете модела, използван за последен път. Базови модели: Изберете предоставените базови модели. Потребителски модели: Изберете моделите, които сте създали. Вдясно са показани модели с различни функции, като например модели за класификация, модели за сегментиране на изображения и модели за откриване на обекти. Този документ използва базовия модел, предоставен от eIQ Portal, така че изберете "BASE MODEL", както е показано на фигурата по-долу. Фигурата по-долу показва няколко основни модела, предоставени от инструмента. Тази статия използва модела mobilenet_v3. След като изберете модела, въведете етапа на обучение на модела. Интерфейсът му е както е показано по-долу. Лявата страна показва параметрите, които трябва да се коригират по време на процеса на обучение, включително скоростта на обучение, размерът на партидите и епохите и т.н. Тя може да бъде коригирана според нуждите. Параметрите за това обучение са както е показано по-долу. След избора щракнете върху "Стартиране на обучението". Точността и стойността на загубата на модела отдясно могат да се видят интуитивно. След като завършите обучението по модела, както е показано на фигурата по-долу, можете да зададете различни диапазони, за да преглеждате информацията за стъпките. Модел на валидиране След завършване на обучението по модела, моделът трябва да бъде валидиран. Изберете "VALIDATE", за да влезете в етапа на валидиране на модела. В интерфейса за валидиране на модела също трябва да зададете параметрите за валидиране, включително прага на Softmax и някои параметри за количествено определяне. Параметрите, зададени в тази статия, са както следва.След настройката щракнете върху "Валидиране", както е показано по-долу. След като валидирането приключи, матрицата на объркване и точността на модела ще бъдат показани в интерфейса, както е показано по-долу. Модел на преобразуване След завършване на обучението и валидирането на модела, за да може моделът да работи на OKMX8MP, моделът трябва да бъде конвертиран в файл в .tflite формат. Следователно, моделът трябва да бъде конвертиран. Кликнете върху "DEPLOY", за да въведете интерфейса за конвертиране. Изберете експортния тип от лявото - ръчно падащо - надолу меню. В този документ форматът на експорта е форматът TensorFlow Lite. В същото време, за леки цели, типовете данни на входа и изхода са зададени както на int8. След като зададете параметрите, изберете "EXPORT MODEL", за да експортирате модела в .tflite формат и след това порт на модела в този формат в i.MX8MP. Моделна прогноза Преди да се направи прогнозата за модела, трябва да се подготвят следните файлове. Mobilen_v3.tflite файлове Ръчно написаните цифрови изображения трябва да бъдат предвидени. Файлът 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", ] -------- Заредете модела --------- Interpreter(model_path=MODEL_PATH) interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() Модел на входяща информация input_shape = input_details[0]['shape'] # [1, H, W, C] височина, ширина, канали = input_shape[1], input_shape[2], input_shape[3] input_dtype = input_details[0]['dtype'] # np.float32 或 np.int8 Параметър за количествено определяне (ако int8) мащаб, 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.