Ndërtoni dhe konvertoni modele, Ndërtoni dhe konvertoni modele

Mikrokontrolluesit kanë RAM dhe hapësirë të kufizuar, gjë që vendos kufizime në madhësitë e modeleve të mësimit të makinerive. Përveç kësaj, LiteRT për Mikrokontrolluesit aktualisht mbështet një nëngrup të kufizuar operacionesh, kështu që jo të gjitha arkitekturat e modelit janë të mundshme.

Ky dokument shpjegon procesin e konvertimit të një modeli TensorFlow për të ekzekutuar në mikrokontrollues. Ai gjithashtu përshkruan operacionet e mbështetura dhe jep disa udhëzime për hartimin dhe trajnimin e një modeli që të përshtatet në memorie të kufizuar.

Për një shembull nga fundi në fund, të ekzekutueshëm të ndërtimit dhe konvertimit të një modeli, shihni shembullin Hello World .

Konvertimi i modelit

Për të kthyer një model të trajnuar TensorFlow për të ekzekutuar në mikrokontrollues, duhet të përdorni konvertuesin LiteRT Python API . Kjo do ta konvertojë modelin në një FlatBuffer , duke zvogëluar madhësinë e modelit dhe do ta modifikojë atë për të përdorur operacionet LiteRT.

Për të marrë madhësinë më të vogël të mundshme të modelit, duhet të konsideroni përdorimin e kuantizimit pas trajnimit .

Konvertoni në një grup C

Shumë platforma të mikrokontrolluesve nuk kanë mbështetje të sistemit të skedarëve vendas. Mënyra më e lehtë për të përdorur një model nga programi juaj është ta përfshini atë si një grup C dhe ta përpiloni atë në programin tuaj.

Komanda unix e mëposhtme do të gjenerojë një skedar burimi C që përmban modelin LiteRT si një grup char :

xxd -i converted_model.tflite > model_data.cc

Prodhimi do të duket i ngjashëm me sa vijon:

unsigned char converted_model_tflite[] = {
  0x18, 0x00, 0x00, 0x00, 0x54, 0x46, 0x4c, 0x33, 0x00, 0x00, 0x0e, 0x00,
  // <Lines omitted>
};
unsigned int converted_model_tflite_len = 18200;

Pasi të keni krijuar skedarin, mund ta përfshini atë në programin tuaj. Është e rëndësishme të ndryshohet deklarata e grupit në const për efikasitet më të mirë të memories në platformat e ngulitura.

Për një shembull se si të përfshini dhe përdorni një model në programin tuaj, shihni hello_world_test.cc në shembullin Hello World .

Arkitekturë dhe trajnim model

Kur dizajnoni një model për përdorim në mikrokontrollues, është e rëndësishme të merrni parasysh madhësinë e modelit, ngarkesën e punës dhe operacionet që përdoren.

Madhësia e modelit

Një model duhet të jetë mjaft i vogël për t'u përshtatur në memorien e pajisjes suaj të synuar së bashku me pjesën tjetër të programit tuaj, si si një binar ashtu edhe në kohën e ekzekutimit.

Për të krijuar një model më të vogël, mund të përdorni gjithnjë e më pak shtresa në arkitekturën tuaj. Megjithatë, modelet e vogla kanë më shumë gjasa të vuajnë nga mospërshtatja. Kjo do të thotë për shumë probleme, ka kuptim të provoni dhe të përdorni modelin më të madh që do të përshtatet në kujtesë. Megjithatë, përdorimi i modeleve më të mëdha do të çojë gjithashtu në rritjen e ngarkesës së procesorit.

Ngarkesa e punës

Madhësia dhe kompleksiteti i modelit ka ndikim në ngarkesën e punës. Modelet e mëdha dhe komplekse mund të rezultojnë në një cikël më të lartë funksionimi, që do të thotë se procesori i pajisjes tuaj po shpenzon më shumë kohë duke punuar dhe më pak kohë në punë. Kjo do të rrisë konsumin e energjisë dhe prodhimin e nxehtësisë, gjë që mund të jetë një problem në varësi të aplikacionit tuaj.

Mbështetje operacionale

LiteRT për Mikrokontrolluesit aktualisht mbështet një nëngrup të kufizuar të operacioneve TensorFlow, i cili ndikon në arkitekturat e modelit që është e mundur të ekzekutohet. Ne po punojmë për zgjerimin e mbështetjes së funksionimit, si për sa i përket zbatimeve të referencës ashtu edhe optimizimeve për arkitektura specifike.

Operacionet e mbështetura mund të shihen në skedarin micro_mutable_ops_resolver.h