Оваа статија опишува како да се пренесе и да се изврши моделот MobileNetV3 на вградената платформа NXP i.MX8MP за да се постигне функцијата за препознавање на рачно напишани дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални дигитални модели. Импортирање на податоци Пред да го обучите моделот, прво треба да го подготвите датотечниот сет.Ако немате датотечен сет, можете директно да кликнете на "Ивезете датотечен сет" и да го одберете датотечниот сет обезбеден во алатката. (Ако имате свој датотечен сет, можете да кликнете на "Создај празен проект" за директно да го увезете.) Овој документ го користи сет на податоци обезбеден од алатката. Користете ја алатката за да го вчитате сетот на податоци од TensorFlow, како што е прикажано подолу. Можете да ги одберете обезбедените збирки на податоци од менито долу во горниот лев агол. Овие се сите збирки на податоци кои се користат во TensorFlow. The mnist dataset has 60,000 handwritten digits as the training set and 10,000 handwritten digits as the validation set. In addition, there are three other datasets: 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 слики како сет за обука, 5.000 слики како сет за валидација и 20.288 слики како сет за тестирање. По изборот на збир на податоци, кликнете на копчето "ИМПОРТ", изберете го директориумот за зачувување и почекајте за увоз. Како што е прикажано на сликата подолу: Изберете го директориумот за зачувување. Чекајте да се увезе датотеката. По завршувањето на увозот, можете да го видите множењето на податоци. Левата страна го прикажува бројот на секоја слика и етикетите на сликата. Десната страна ја прикажува секоја слика во збирката на податоци. Можете да ги видите деталните информации со избирање на слика. Model Training По увоз на збир на податоци, следниот чекор е да се избере модел. Како што е прикажано подолу, кликнете на копчето "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", ] ---------------- Вчитај го моделот --------- Интерпретатор(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] висина, ширина, канали = 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, како што е прикажано на следната слика. Enter the following command to make predictions: python3 demo.py Резултатот од излезот е следниот: Според резултатите од излезот, може да се види дека ознаката на сликата на 3_9.jpg треба да биде 9, додека моделот предвидува 7, а сите други слики се предвидени да бидат нормални. Врз основа на резултатите од предвидувањето, може да се види дека моделот обучен овој пат има висока точност и сеуште работи добро кога е трансплантиран на i.MX8MP.