המרת רשתות נוירונים לקצה: TFLite, Micro, Edge TPU

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

תחומי פיתוח AI

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

מפתח אימן מודל סגמנטציה ב-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 אם המשימה מאפשרת. כמוצא אחרון, אנחנו משתמשים באופרטור מותאם אישית, אבל זה מסבך את הפריסה.

תהליך בדיקת תאימות מפורט
  1. טעינת מודל בפורמט .tflite.
  2. הרצה דרך הבודק: קבלת רשימת פעולות לא נתמכות.
  3. לכל פעולה, מציאת תחליף מהקבוצה הזמינה.
  4. הרצה חוזרת של בדיקת התאימות.
  5. אם החלפה בלתי אפשרית, שקילת אופרטור מותאם אישית או שינוי פלטפורמה.

תהליך העבודה

  1. ניתוח מודל: טעינה, פרופיל פעולות, הערכת גודל.
  2. בחירת פלטפורמה: MCU, SBC, או Edge TPU—בחירת האפשרות האופטימלית.
  3. המרה וקוונטיזציה: יישום QAT או קוונטיזציה לאחר אימון.
  4. אימות דיוק: השוואת פלטי מודל float ומודל מקוונטן על מערך בדיקה.
  5. פריסה: הכנת C-array, בדיקה על התקן היעד.

מה כלול

  • תיעוד: דוח המרה, הוראות פריסה.
  • קוד מקור של סקריפטים להמרה ואימות.
  • הדרכה לצוות הלקוח (1–2 מפגשים).
  • הבטחת דיוק: סטייה של לא יותר מ-5% מקו הבסיס.
  • תמיכה לאחר פריסה למשך חודש.

לוח זמנים ותקציב

לוחות זמנים: בין שבוע ל-3 שבועות בהתאם למורכבות המודל ולדרישות. העלות מחושבת באופן אישי—צרו קשר כדי להעריך את הפרויקט שלכם תוך יום עסקים אחד. קבלו ייעוץ והצעה מסחרית מותאמת לצרכים שלכם. הניסיון שלנו: למעלה מ-6 שנים ב-edge ML, 50+ פרויקטים, 30+ עבור Coral. חיסכון בשלב הפריסה הוא אחת התוצאות המרכזיות של הפרויקטים שלנו.