מפתח אימן מודל סגמנטציה ב-Keras, אבל על החומרה הוא קפא. המודל לא נכנס ל-2 MB של זיכרון Flash של STM32, ומשקלי FP32 ירדו מ-4 MB ל-1.2 MB לאחר קוונטיזציה ל-TFLite Micro, אבל הדיוק ירד ב-12%—והלקוח איבד את ההזמנה. אנחנו יודעים איך להימנע מתרחישים כאלה: במשך יותר משש שנים ביצענו עשרות המרות עבור MCU, Arm Linux ו-Google Coral. מקצה לקצה: ניתוח מודל, בחירת פורמט, קוונטיזציה, אימות דיוק, פריסה. רקורד שלנו: 50+ פרויקטי edge, 30+ עבור Coral. צרו קשר כדי להעריך את הפרויקט שלכם תוך יום אחד. עלות ההמרה מחושבת באופן אישי, אבל בממוצע הפרויקט מחזיר את עצמו באמצעות הפחתת עלויות חישוב והסקה מהירה יותר.
בעיות שאנחנו פותרים
אי-תאימות פעולות
TFLite Micro תומך רק בתת-קבוצה של TensorFlow המלא: ~250 פעולות לעומת ~2000. פעולות נפוצות כמו tf.nn.depthwise_conv2d, tf.reshape קיימות, אבל tf.where או tf.sort חסרות. אנחנו מחליפים ידנית שכבות לא נתמכות במקבילות—לדוגמה, החלפת tf.where ב-tf.cast בשילוב עם tf.multiply. בעיה זו חריפה במיוחד עבור edge ML, שבו כל פעולה חשובה.
גודל מודל וקוונטיזציה
Edge TPU מקבל רק מודלים מסוג INT8, והם חייבים להיות 8 MB או פחות. לצוות שלנו יש ניסיון בהתאמת YOLOv5 (14 MB float) ל-4.2 MB INT8 עם ירידת mAP של לא יותר מ-2%. אנחנו משתמשים באימון מודע לקוונטיזציה כדי לשמר דיוק. בהשוואה ל-Float16, קוונטיזציית INT8 מספקת מהירות גבוהה פי 3–4 על Edge TPU באותה עלות אנרגיה. TFLite Micro קומפקטי ב-50% יותר מ-TFLite רגיל, וזה קריטי עבור MCU.
ירידת ביצועים על MCU
גם לאחר המרה ל-TFLite Micro, מודל עשוי להיות איטי בגלל סדר פעולות לא אופטימלי. אנחנו מפרופילים כל פעולה ומשנים את הגרף כדי להפחית קריאות DMA—מרוויחים עד 40% על STM32H7. זה חשוב במיוחד עבור ML על STM32, שבו המשאבים מוגבלים.
איך אנחנו עושים את זה
צינור המרה עבור כל פלטפורמה.
TFLite (נייד / Raspberry Pi / x86 Edge)
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()תומך ב: INT8, FP16, קוונטיזציה בטווח דינמי. GPU delegate, NNAPI, Hexagon DSP. אידיאלי עבור ML על Raspberry Pi.
TFLite Micro (MCU, <1 MB)
תת-קבוצה של פעולות TFLite, C++ נייד:
xxd -i model.tflite > model_data.cc # конвертация в C array נתמך על: STM32, Arduino, ESP32, nRF52840. בודק תאימות הוא חובה—אנחנו מריצים אותו לפני תחילת העבודה.
Edge TPU (Google Coral)
Edge TPU דורש קוונטיזציית INT8. רק פעולות מהרשימה הלבנה רצות על החומרה (השאר נופל ל-CPU):
edgetpu_compiler model_quant.tflite # компилятор Google Coral ביצועים: 4 TOPS (Coral USB), 4 TOPS (Coral PCIe M.2). מצוין לסיווג תמונות וזיהוי אובייקטים. לפי תיעוד Google Coral, שמרו על המודל <8 MB להאצה מלאה.
השוואת פלטפורמות
| פלטפורמה | התקנים | גודל מודל מקסימלי | קוונטיזציה | כלים |
|---|---|---|---|---|
| TFLite | Android, iOS, RPi, x86 | ללא הגבלה | FP16, INT8, דינמי | ממיר TFLite, GPU Delegate |
| TFLite Micro | STM32, ESP32, Arduino | <1 MB Flash | INT8 חובה | XXD, בודק תאימות |
| Edge TPU | Coral USB/PCIe/M.2 | 8 MB (האצה מלאה) | INT8 חובה | edgetpu_compiler |
סוגי קוונטיזציה ופרמטרים
| סוג | גודל משקל | אובדן דיוק | האצת חומרה |
|---|---|---|---|
| FP32 | 4 בתים | קו בסיס | CPU/GPU |
| FP16 | 2 בתים | <1% | GPU, חלק מה-TPU |
| טווח דינמי | 2–4 בתים | 1–3% | CPU (אופטימיזציה) |
| INT8 | 1 בית | 1–5% | Edge TPU, DSP, MCU |
למה קוונטיזציית INT8 היא התקן עבור Edge TPU?
חומרת Edge TPU עובדת על מספרים שלמים—פעולות float מתבצעות באמולציה על CPU עם ירידת מהירות של פי 10–20. אנחנו משתמשים בכיול על מערך נתונים מייצג כדי למצוא סקלות ונקודות אפס. עבור מודלי תמונות, אובדן mAP הוא בדרך כלל 1–3%.
איך לבדוק תאימות מודל עם TFLite Micro?
אנחנו מריצים את converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir) converter.optimizations = [tf.lite.Optimize.DEFAULT] tflite_model = converter.convert() עוד לפני ההמרה. אם נמצאה פעולה לא נתמכת, אנחנו מחליפים אותה במקבילה. לדוגמה, xxd -i model.tflite > model_data.cc # конвертация в C array ניתן להחלפה ב-edgetpu_compiler model_quant.tflite # компилятор Google Coral אם המשימה מאפשרת. כמוצא אחרון, אנחנו משתמשים באופרטור מותאם אישית, אבל זה מסבך את הפריסה.
תהליך בדיקת תאימות מפורט
- טעינת מודל בפורמט .tflite.
- הרצה דרך הבודק: קבלת רשימת פעולות לא נתמכות.
- לכל פעולה, מציאת תחליף מהקבוצה הזמינה.
- הרצה חוזרת של בדיקת התאימות.
- אם החלפה בלתי אפשרית, שקילת אופרטור מותאם אישית או שינוי פלטפורמה.
תהליך העבודה
- ניתוח מודל: טעינה, פרופיל פעולות, הערכת גודל.
- בחירת פלטפורמה: MCU, SBC, או Edge TPU—בחירת האפשרות האופטימלית.
- המרה וקוונטיזציה: יישום QAT או קוונטיזציה לאחר אימון.
- אימות דיוק: השוואת פלטי מודל float ומודל מקוונטן על מערך בדיקה.
- פריסה: הכנת C-array, בדיקה על התקן היעד.
מה כלול
- תיעוד: דוח המרה, הוראות פריסה.
- קוד מקור של סקריפטים להמרה ואימות.
- הדרכה לצוות הלקוח (1–2 מפגשים).
- הבטחת דיוק: סטייה של לא יותר מ-5% מקו הבסיס.
- תמיכה לאחר פריסה למשך חודש.
לוח זמנים ותקציב
לוחות זמנים: בין שבוע ל-3 שבועות בהתאם למורכבות המודל ולדרישות. העלות מחושבת באופן אישי—צרו קשר כדי להעריך את הפרויקט שלכם תוך יום עסקים אחד. קבלו ייעוץ והצעה מסחרית מותאמת לצרכים שלכם. הניסיון שלנו: למעלה מ-6 שנים ב-edge ML, 50+ פרויקטים, 30+ עבור Coral. חיסכון בשלב הפריסה הוא אחת התוצאות המרכזיות של הפרויקטים שלנו.







