7.9. TensorFlow Lite for Microcontrollers¶
TFLM este runtime-ul folosit de majoritatea camerelor pentru a executa un model încărcat. El analizează fișierul .tflite – un FlatBuffer de operatori, ponderi și forme de tensori – și parcurge lista de operatori în ordine, distribuind fiecare operator către un kernel care produce următorul tensor intermediar.
Tensorii intermediari trăiesc într-o arenă de tensori de dimensiune fixă alocată la momentul încărcării. Camera dimensionează arena în două treceri: mai întâi, un interpretor temporar este construit pe baza maximului de heap liber pentru ca modelul să poată raporta memoria de lucru de care are nevoie; apoi interpretorul persistent este alocat cu exact acea dimensiune plus o mică marjă. Modelele mai mici lasă mai mult heap liber pentru restul scriptului.
TFLM este motorul de pe H7, RT1062 și AE3.
Motorul din mijlocul lui predict() este o stivă diferită pe fiecare familie de camere.¶
7.9.1. Resolver-ul de operatori¶
TFLM nu livrează fiecare kernel. Camera leagă un resolver care listează operatorii pe care îi poate executa, iar un model încărcat folosind resolver-ul eșuează la momentul încărcării dacă conține un operator care nu se află pe listă. Versiunea livrată înregistrează operatorii comuni în rețelele de viziune și de procesare a semnalului – straturile de convoluție și dense, straturile de pooling și de activare, operatorii reshape și concat, operatorii quantize și dequantize – astfel încât un model antrenat pe baza uneia dintre arhitecturile standard (YOLO, MediaPipe, MobileNet) se încarcă fără a extinde lista.
Versiunea AE3 înregistrează în plus operatorul Ethos-U. Un model compilat cu Vela este altfel un .tflite normal, iar TFLM îl parcurge normal; subgrafurile etichetate de Vela ajung la operatorul Ethos-U și se distribuie către NPU.