Introducere

Datorită bibliotecilor precum Pandas, scikit-learn și Matplotlib, este relativ ușor să începeți explorarea seturilor de date și să faceți câteva predicții folosind algoritmi simpli Machine Learning (ML) în Python. Deși, pentru ca aceste modele instruite să fie utile în lumea reală, este necesar să le punem la dispoziție pentru a face predicții fie pe web, fie pe dispozitive portabile.

În două dintre articolele mele anterioare, am explicat cum să creez și să implementez un model simplu de învățare automată folosind Heroku / Flask și Tensorflow.js. Astăzi, în schimb, vă voi explica cum să implementați modele Machine Learning pe smartphone-uri și dispozitive încorporate folosind TensorFlow Lite.

TensorFlow Lite

TensorFlow Lite este o platformă dezvoltată de Google pentru a instrui modele Machine Learning pe dispozitive mobile, IoT (Interned of Things) și încorporate.

Folosind TensorFlow Lite, tot fluxul de lucru este executat în interiorul dispozitivului, ceea ce evită nevoia de a trimite date înainte și înapoi de pe un server. Unele dintre principalele avantaje ale acestui lucru sunt:

  • Confidențialitate sporită, deoarece datele nu trebuie să părăsească dispozitivul (acest lucru vă poate permite să aplicați tehnici precum Confidențialitate diferențială și învățare federată).
  • Consum redus de energie, deoarece nu este necesară o conexiune la internet.
  • Latență scăzută, deoarece nu există comunicare cu serverul.

TensorFlow Lite oferă suport API pentru diferite limbi, cum ar fi Python, Java, Swift și C ++.

Un flux de lucru tipic care utilizează TensorFlow Lite ar consta în:

  1. Crearea și instruirea unui model de învățare automată în Python folosind TensorFlow.
  2. Conversia modelului nostru într-un format adecvat pentru TensorFlow Lite folosind Convertor TensorFlow Lite.
  3. Implementarea modelului nostru de învățare automată pe dispozitivul nostru mobil folosind Interpret TensorFlow Lite.
  4. Optimizarea consumului și preciziei de memorie a modelului.

Există mai multe tehnici care au fost dezvoltate în ultimii ani pentru a reduce consumul de memorie al modelelor Machine Learning [1]. Un exemplu este cuantificarea modelului.

Cuantificarea modelului își propune să reducă:

  1. Reprezentările de precizie ale greutăților rețelelor neuronale artificiale (de exemplu, conversia 34.3456657 la 34.3).
  2. Costurile de acces la memorie pentru citirea și stocarea funcțiilor intermediare de activare.

Prin urmare, utilizarea cuantizării modelului poate duce la o reducere a latenței și dimensiunii modelului. Unul dintre principalele dezavantaje ale acestei tehnici este o ușoară scădere a preciziei (care poate fi mai mult sau mai puțin importantă în funcție de aplicații).

Conform documentației TensorFlow Lite, luând ca exemplu clasificatorul de imagine Inception_v3, folosind cuantificarea modelului poate duce la scăderea cu până la 0,8% a preciziei. Pe de altă parte, folosirea cuantificării modelului a făcut posibilă reducerea dimensiunii modelului de 4 ori (95,7 MB față de 23,9 MB) și a latenței cu 285 ms (1130 ms față de 845 ms) [2].

În exemplul următor, voi demonstra cum să utilizați un model pre-instruit într-o aplicație Android.

Demonstrație

Ca exemplu practic, am creat recent o aplicație Android Studio folosind clasificatorul de imagine Inception v3 pre-instruit datorită TensorFlow Lite.

Lansarea v3

Inception Classifier a fost creat pentru a rezolva unele limitări aduse de la crearea unor rețele neuronale foarte mari și profunde pentru sarcini de clasificare a imaginilor.

În urmă cu câțiva ani, pentru a rezolva sarcinile de clasificare a imaginilor, au fost create modele de învățare profundă compuse dintr-un număr tot mai mare de straturi și neuroni în fiecare strat. Luând această abordare, a fost posibil să obținem rezultate mai bune, dar a dus și la două probleme principale:

  1. Creșterea cantității de putere de calcul necesară pentru a ne antrena modelul.
  2. Probabilitate crescută de supra-dotare (făcând modelul nostru să funcționeze foarte bine în etapa de antrenament, dar nu atât de mult atunci când lucrăm cu date noi).

Crearea clasificatorului de început a avut ca scop rezolvarea acestor probleme prin ingineria puternică a caracteristicilor modelului, mărind viteza de antrenament. În ultimii ani, au fost create diferite versiuni ale clasificatorului Inception. În exemplul următor am decis să folosesc versiunea v3.

Clasificator de imagini Android

Pentru a crea această aplicație, am decis să folosesc Android Studio ca IDE. În acest fel, a fost relativ ușor să se integreze toate dependențele necesare TensorFlow Lite pentru a încărca modelul Inception v3.

Am decis succesiv să împart această aplicație în două ferestre principale:

  • În prima, utilizatorul este binevenit și i se cere să selecteze clasificatorul de imagine pe care să-l folosească (în acest caz „Clasificatorul cuantificat inițial”). Apoi, utilizatorul este rugat să facă o fotografie a obiectului pe care dorește să îl clasifice și, în cele din urmă, imaginea este decupată. În acest caz, a fost necesar să decupați imaginea, deoarece clasificatorul Inception ia doar imagini pătrate ca intrări.
  • În cea de-a doua fereastră, utilizatorul este rugat în cele din urmă să facă clic pe butonul „Clasificați imaginea” pentru a obține în schimb cele mai probabile 3 predicții făcute de clasificator.
Cum sa implementati modele de invatare automata pe dispozitive mobile
Clasificator de imagini Android simplu

Pentru a realiza acest proiect, am făcut referire la Michael Shea și la implementările documentației TensorFlow Lite [3, 4].

Dacă sunteți interesat să testați această aplicație, tot codul și un APK al aplicației sunt disponibile în depozitul meu Github.

În cazul în care intenționați să începeți propriul proiect folosind TensorFlow Lite, al lor documentație este probabil cel mai bun loc de unde să încep.

Contacte

Dacă doriți să fiți la curent cu ultimele mele articole și proiecte urmați-mă și abonați-vă la listă de email-uri. Acestea sunt câteva dintre detaliile mele de contact:

Copertă fotografie din acest articol.

Bibliografie

[1] Nimit S. Sohoni, Christopher R. Aberger și colab., Instruirea rețelei neuronale cu memorie scăzută: un raport tehnic. Accesat la: https://arxiv.org/pdf/1904.10631.pdf [2] Optimizare model, TensorFlow. Accesat la: https://www.tensorflow.org/lite/performance/model_optimization [3] Michael Shea, TensorFlow Lite Inception Model Android Tutorial. Accesat la: https://www.youtube.com/watch?v=8zQsAl2z4iU [4] Documentație TensorFlow Lite, aplicație exemplu de clasificare a imaginilor TensorFlow Lite pentru Android. Accesat la: https://github.com/tensorflow/examples/tree/master/lite/examples/image_classification/android