Šiame straipsnyje išsamiai aprašoma, kaip perkelti ir paleisti „MobileNetV3“ modelį į NXP i.MX8MP įmontuotą platformą, kad būtų pasiekta rankinio skaitmenų atpažinimo funkcija. Nuo duomenų rinkinių importo, modelio mokymo ir patvirtinimo iki „TensorFlow Lite“ kiekybinio įvertinimo ir diegimo, jis visiškai demonstruoja eIQ Portal įrankio naudojimo procesą. Importuoti duomenų rinkinį Prieš mokydami modelį, pirmiausia turite paruošti duomenų rinkinį.Jei neturite duomenų rinkinio, galite tiesiogiai spustelėti "Importuoti duomenų rinkinį" ir pasirinkti įrankyje pateiktą duomenų rinkinį. (Jei turite savo duomenų rinkinį, galite spustelėti "Sukurti tuščią projektą", kad jį tiesiogiai importuotumėte.) Šiame dokumente naudojamas įrankio pateiktas duomenų rinkinys. Naudokite įrankį duomenų rinkiniui įkelti iš „TensorFlow“, kaip parodyta žemiau. Galite pasirinkti pateiktus duomenų rinkinius iš viršutiniame kairiajame kampe esančio drop-down meniu. Tai visi duomenų rinkiniai, kurie paprastai naudojami TensorFlow. Šiame dokumente naudojamas mnist duomenų rinkinys. Mnist duomenų rinkinyje yra 60 000 rankraščių skaitmenų kaip mokymo rinkinys ir 10 000 rankraščių skaitmenų kaip patvirtinimo rinkinys. 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. Be to, viršutiniame kairiajame kampe yra meniu „Problemos tipas“. Kaip parodyta žemiau, ši priemonės versija suteikia tik dviejų tipų, vienas yra vaizdo klasifikavimas, o kitas yra objektų aptikimas. Objektų aptikimo užduotyje yra tik vienas duomenų rinkinys, coco/2017. Šis duomenų rinkinys gali aptikti 80 objektų atpažinimo tipų, su 118,287 vaizdais kaip mokymo rinkinys, 5000 vaizdais kaip patvirtinimo rinkinys ir 20,288 vaizdais kaip bandymo rinkinys. Pasirinkę duomenų rinkinį, spustelėkite mygtuką „IMPORT“, pasirinkite įrašymo katalogą ir palaukite, kol importuosite. Pasirinkite išsaugoti katalogą. Palaukite, kol bus importuotas duomenų rinkinys. Kai importavimas bus baigtas, galite peržiūrėti mnist duomenų rinkinį. Kairėje pusėje rodomas kiekvieno vaizdo skaičius ir vaizdo etiketės. Dešinėje pusėje rodomas kiekvienas vaizdas duomenų rinkinyje. Galite peržiūrėti išsamią informaciją pasirinkdami vaizdą. Mokymo modelis Importuojant duomenų rinkinį, kitas žingsnis yra pasirinkti modelį. Kaip parodyta žemiau, spustelėkite paveikslėlyje esantį mygtuką „SELECT MODEL“. Sąsaja, skirta pasirinkti modelį, yra tokia, kaip parodyta žemiau. Šioje sąsajoje kairėje pusėje pateikiamos trys skirtingos parinktys, o jų funkcijos yra tokios: Atkurti modelį: Įkelkite paskutinį kartą naudojamą modelį. Pagrindiniai modeliai: Pasirinkite pateiktus pagrindinius modelius. Vartotojo modeliai: Pasirinkite sukurtus modelius. Dešinėje pusėje rodomi modeliai su skirtingomis funkcijomis, pvz., klasifikavimo modeliai, vaizdo segmentacijos modeliai ir objektų aptikimo modeliai. Šiame dokumente naudojamas eIQ portalo pateiktas bazinis modelis, todėl pasirinkite „BASE MODEL“, kaip parodyta žemiau esančiame paveikslėlyje. Žemiau pateiktame paveikslėlyje pateikiami keli pagrindiniai modeliai, kuriuos teikia šis įrankis.Šiame dokumente naudojamas mobilenet_v3 modelis.Skirtingų modelių struktūras galima peržiūrėti per pradinio puslapio „MODEL TOOL“. Pasirinkus modelį, įveskite modelio mokymo etapą. Jo sąsaja yra tokia, kaip parodyta žemiau. Kairėje pusėje rodomi parametrai, kuriuos reikia koreguoti mokymo proceso metu, įskaitant mokymosi greitį, partijų dydį ir epochas ir kt. Jis gali būti koreguojamas pagal poreikį. Dešinėje pusėje galima parodyti atitinkamą informaciją, pvz., tikslumą ir nuostolių vertę mokymo proceso metu. Šio mokymo parametrai yra kaip parodyta žemiau. Po atrankos spustelėkite "Pradėti mokymą". Mokymo procesas yra kaip parodyta žemiau. modelio tikslumas ir nuostolių vertė dešinėje galima intuityviai peržiūrėti. Baigę modelio mokymą, kaip parodyta toliau pateiktame paveikslėlyje, galite nustatyti skirtingus diapazonus, kad galėtumėte peržiūrėti žingsnių informaciją. Validacijos modelis Baigus modelio mokymą, modelis turi būti patvirtintas. Pasirinkite „VALIDATE“, kad patektumėte į modelio patvirtinimo etapą. Modelio patvirtinimo sąsajoje taip pat reikia nustatyti patvirtinimo parametrus, įskaitant „Softmax“ slenkstį ir kai kuriuos kiekybinius parametrus. Šiame dokumente nustatyti parametrai yra tokie. Po nustatymo spustelėkite „Validuoti“, kaip parodyta žemiau. Po to, kai patvirtinimas bus baigtas, modelio painiojimo matrica ir tikslumas bus rodomas sąsajoje, kaip parodyta žemiau. Konversijos modelis Baigus modelio mokymą ir patvirtinimą, norint paleisti modelį OKMX8MP, modelis turi būti konvertuotas į failą .tflite formatu. Todėl modelis turi būti konvertuotas. Spauskite "DEPLOY" norėdami įvesti konversijos sąsają. Pasirinkite eksporto tipą iš kairiojo - rankų nuleidimo - žemyn meniu. Šiame dokumente eksporto formatas yra TensorFlow Lite formatas. Tuo pačiu metu, lengviems tikslams, tiek įvesties, tiek išvesties duomenų tipai yra nustatyti int8. Nustatę parametrus, pasirinkite „EXPORT MODEL“, kad galėtumėte eksportuoti modelį .tflite formatu, ir tada šį modelį perkelti į i.MX8MP. Prognozės modelis Prieš pradedant modelio prognozavimą, reikia paruošti šiuos failus. Mobilen_v3.tflite failą Ranka parašyti skaitmeniniai vaizdo failai, kuriuos reikia prognozuoti. Python skripto failas modelio įkėlimui ir vaizdo išankstiniam apdorojimui. Tarp jų.tflite failą galima sėkmingai eksportuoti po modelio patvirtinimo. Iš duomenų rinkinio galite pasirinkti keletą rankinio rašymo skaitmeninių vaizdų failų arba galite juos parašyti rankiniu būdu ir tada konvertuoti į 28x28 juoda - fone balta - simbolių vaizdus. Šis popierius naudoja šiuos 30 vaizdų prognozavimui, pavadintus "group number_label". Parašykite python scenarijų: 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", ] -------- Įkelkite modelį --------- Interpreter (model_path=MODEL_PATH) interpreter.allocate_tensors() input_details = interpreter.get_input_details() output_details = interpreter.get_output_details() Įvesties informacijos modelis input_shape = input_details[0]['shape'] # [1, H, W, C] aukštis, plotis, kanalai = input_shape[1], input_shape[2], input_shape[3] input_dtype = input_details[0]['dtype'] # np.float32 arba np.int8 Kvantizacijos parametras (jei int8) skalė, zero_point = input_details[0]['kvantifikavimas']` -------- Pranašystė -------- 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}") Visi trys failai nukopijuoti į i.MX8MP, kaip parodyta toliau esančiame paveikslėlyje. Įveskite šią komandą, kad atliktumėte prognozes: python3 demo.py Išvestinis rezultatas yra toks: Remiantis išvesties rezultatais, galima matyti, kad 3_9.jpg vaizdo etiketė turėtų būti 9, o modelis prognozuoja 7, o visi kiti vaizdai prognozuojami kaip normalūs. Remiantis prognozavimo rezultatais, matyti, kad šį kartą apmokytas modelis turi didelį tikslumą ir vis dar gerai veikia, kai persodinamas į i.MX8MP.