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

Mikrokontrolluesit kanë RAM dhe hapësirë ​​ruajtjeje të kufizuar, gjë që vendos kufizime në madhësitë e modeleve të të mësuarit automatik. 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 modeleve janë të mundshme.

Ky dokument shpjegon procesin e konvertimit të një modeli TensorFlow për t'u ekzekutuar në mikrokontrollues. Ai gjithashtu përshkruan operacionet e mbështetura dhe jep disa udhëzime mbi projektimin dhe trajnimin e një modeli për t'u përshtatur në memorie të kufizuar.

Për një shembull të plotë dhe të ekzekutueshëm të ndërtimit dhe konvertimit të një modeli, shihni shembullin Hello World .

Konvertimi i modelit

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

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

Konverto në një varg C

Shumë platforma mikrokontrolluesish nuk kanë mbështetje për sistemin e 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ë varg C dhe ta kompiloni atë në programin tuaj.

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

xxd -i converted_model.tflite > model_data.cc

Rezultati 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 ta keni gjeneruar skedarin, mund ta përfshini atë në programin tuaj. Është e rëndësishme të ndryshoni deklarimin e vargut në const për efikasitet më të mirë të memories në platformat e integruara.

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 .

Arkitektura e modelit dhe trajnimi

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

Madhësia e modelit

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

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

Ngarkesa e punës

Madhësia dhe kompleksiteti i modelit kanë ndikim në ngarkesën e punës. Modelet e mëdha dhe komplekse mund të rezultojnë në një cikël pune më të lartë, që do të thotë se procesori i pajisjes suaj po kalon më shumë kohë duke punuar dhe më pak kohë në gjendje joaktive. Kjo do të rrisë konsumin e energjisë dhe prodhimin e nxehtësisë, gjë që mund të jetë 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, gjë që ndikon në arkitekturat e modelit që është e mundur të ekzekutohen. Ne po punojmë për zgjerimin e mbështetjes së operacioneve, si në aspektin e implementimeve referuese ashtu edhe të optimizimeve për arkitektura specifike.

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