7.9. TensorFlow Lite for Microcontrollers

TFLM הוא זמן הריצה שבו משתמשות רוב המצלמות כדי להריץ מודל טעון. הוא מנתח את קובץ ה-.tflite – FlatBuffer של אופרטורים, משקלים וצורות טנזורים – ועובר על רשימת האופרטורים לפי הסדר, מנתב כל אופרטור אל ליבה המייצרת את הטנזור הביניימי הבא.

טנזורי ביניים שוכנים ב-tensor arena בגודל קבוע המוקצה בזמן הטעינה. המצלמה קובעת את גודל ה-arena בשני מעברים: ראשית, נבנה מפרש זמני כנגד מקסימום הערימה הפנויה כך שהמודל יכול לדווח על זיכרון העבודה הדרוש לו; המפרש הקבוע מוקצה אז עם אותו גודל מדויק בתוספת מרווח קטן. מודלים קטנים יותר משאירים יותר ערימה פנויה עבור שאר הסקריפט.

TFLM הוא המנוע על ה-H7, ה-RT1062 וה-AE3.

Three columns side by side. Left: H7 and RT1062 run TFLM with CMSIS-NN kernels on a Cortex-M7. Middle: AE3 runs TFLM with CMSIS-NN and the Ethos-U operator on a Cortex-M55 with an Ethos-U55 NPU. Right: N6 runs STAI on a Neural-ART NPU.

המנוע שבמרכז predict() הוא מערך שונה בכל משפחת מצלמות.

7.9.1. מאתר האופרטורים

TFLM אינו נשלח עם כל ליבה. המצלמה מקשרת resolver המפרט את האופרטורים שהיא יכולה להריץ, ומודל הנטען כנגד ה-resolver נכשל בזמן הטעינה אם הוא מכיל אופרטור שאינו ברשימה. הגרסה הנשלחת רושמת את האופרטורים הנפוצים ברשתות ראייה ועיבוד אותות – שכבות ה-convolution וה-dense, שכבות ה-pool וה-activation, אופרטורי ה-reshape וה-concat, ואופרטורי ה-quantize וה-dequantize – כך שמודל שאומן כנגד אחת מהארכיטקטורות הסטנדרטיות (YOLO, MediaPipe, MobileNet) נטען ללא הרחבת הרשימה.

גרסת ה-AE3 רושמת בנוסף את אופרטור ה-Ethos-U. מודל מהודר ב-Vela הוא בכל מקרה .tflite רגיל, ו-TFLM עובר עליו כרגיל; ה-subgraphs המתויגים-Vela פוגעים באופרטור ה-Ethos-U ומנתבים אל הNPU.