הסבר על ספריית C++

ספריית C++ של TensorFlow Lite ל-Microcontrollers היא חלק ממאגר TensorFlow. הוא יהיה קריא, קל לשינוי, מאומת היטב, קל לשילוב ותואם ל-TensorFlow Lite הרגיל.

במסמך הבא מתואר המבנה הבסיסי של ספריית C++ ומספק מידע על יצירת פרויקט משלכם.

מבנה הקובץ

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

קובצי מפתח

הקבצים החשובים ביותר לשימוש במתרגם TensorFlow Lite למיקרו-בקרים נמצאים ברמה הבסיסית (root) של הפרויקט, מלווים בבדיקות:

[`micro_mutable_op_resolver.h`](https://github.com/tensorflow/tflite-micro/blob/main/tensorflow/lite/micro/micro_mutable_op_resolver.h)
can be used to provide the operations used by the interpreter to run the
model.

במאמר תחילת העבודה עם מיקרו-בקרים תוכלו למצוא הדרכה מפורטת על השימוש האופייני.

מערכת ה-build מספקת הטמעות ספציפיות לפלטפורמה של קבצים מסוימים. הקבצים האלה נמצאים בספרייה עם שם הפלטפורמה, לדוגמה cortex-m.

קיימות כמה ספריות נוספות, כולל:

  • kernel, שמכיל הטמעות של פעולות ואת הקוד המשויך.
  • tools, שכולל כלי build ואת הפלט שלהם.
  • examples, שמכיל קוד לדוגמה.

התחלת פרויקט חדש

אנחנו ממליצים להשתמש בדוגמה של Hello World (שלום עולם) כתבנית לפרויקטים חדשים. תוכלו לקבל גרסה שלה בהתאם לפלטפורמה שתבחרו, על ידי ביצוע ההוראות המפורטות בקטע הזה.

שימוש בספריית Arduino

אם אתם משתמשים ב-Arduino, הדוגמה של Hello World כלולה בספריית Arduino_TensorFlowLite Arduino, שאותה אפשר להתקין באופן ידני בסביבת הפיתוח המשולבת (IDE) ב-Arduino וב-Arduino Create.

לאחר הוספת הספרייה, עוברים אל File -> Examples. אמורה להופיע דוגמה בתחתית הרשימה בשם TensorFlowLite:hello_world. בוחרים בו ולוחצים על hello_world כדי לטעון את הדוגמה. לאחר מכן תוכלו לשמור עותק של הדוגמה ולהשתמש בו כבסיס לפרויקט שלכם.

יצירת פרויקטים לפלטפורמות אחרות

TensorFlow Lite למיקרו-בקרים יכול ליצור פרויקטים עצמאיים שמכילים את כל קובצי המקור הנדרשים, באמצעות Makefile. הסביבות הנתמכות הן כרגע, Keil, Make ו-Mbed.

כדי ליצור את הפרויקטים האלה באמצעות Make, משכפלים את מאגר TensorFlow/tflite-micro ומריצים את הפקודה הבאה:

make -f tensorflow/lite/micro/tools/make/Makefile generate_projects

הפעולה הזו תימשך כמה דקות כי צריך להוריד שרשראות כלים גדולים ליחסי התלות. בסיום התהליך, אתם אמורים לראות כמה תיקיות שנוצרו בתוך נתיב, כמו gen/linux_x86_64/prj/ (הנתיב המדויק תלוי במערכת ההפעלה המארחת שלכם). התיקיות האלה מכילות את הקובץ של הפרויקט ואת קובצי המקור שנוצרו.

אחרי הרצת הפקודה תוכלו למצוא את הפרויקטים של Hello World ב-gen/linux_x86_64/prj/hello_world. לדוגמה, hello_world/keil יכיל את פרויקט קיל.

הרצת הבדיקות

כדי ליצור את הספרייה ולהריץ את כל בדיקות היחידה שלה, משתמשים בפקודה הבאה:

make -f tensorflow/lite/micro/tools/make/Makefile test

כדי להריץ בדיקה מסוימת, משתמשים בפקודה הבאה ומחליפים את <test_name> בשם הבדיקה:

make -f tensorflow/lite/micro/tools/make/Makefile test_<test_name>

אפשר למצוא את שמות הבדיקה בקובצי Makefiles של הפרויקט. לדוגמה, examples/hello_world/Makefile.inc מציין את שמות הבדיקה בדוגמה HelloWorld.

פיתוח קבצים בינאריים

כדי ליצור קובץ בינארי שאפשר להריץ לפרויקט נתון (כמו אפליקציה לדוגמה), משתמשים בפקודה הבאה ומחליפים את <project_name> בפרויקט שרוצים ליצור:

make -f tensorflow/lite/micro/tools/make/Makefile <project_name>_bin

לדוגמה, הפקודה הבאה תיצור קובץ בינארי לאפליקציית Hello World:

make -f tensorflow/lite/micro/tools/make/Makefile hello_world_bin

כברירת מחדל, הפרויקט יעובד למערכת ההפעלה המארחת. כדי לציין ארכיטקטורת יעד אחרת, צריך להשתמש ב-TARGET= וב-TARGET_ARCH=. הדוגמה הבאה ממחישה איך ליצור את הדוגמה של Hello World עבור הקובץ הגנרי שלcortex-m0:

make -f tensorflow/lite/micro/tools/make/Makefile TARGET=cortex_m_generic TARGET_ARCH=cortex-m0 hello_world_bin

כשמגדירים יעד, כל קובצי המקור הספציפיים ליעד ישמשו במקום הקוד המקורי. לדוגמה, ספריית המשנה examples/hello_world/cortex_m_generic מכילה הטמעות של SparkFun Edge של הקבצים constants.cc ו-output_handler.cc, שישמשו כאשר יצוין היעד cortex_m_generic.

שמות הפרויקטים מופיעים בקובצי ה-Makefiles של הפרויקט. לדוגמה, examples/hello_world/Makefile.inc מציין את השמות הבינאריים בדוגמה של HelloWorld.

ליבות שעברו אופטימיזציה

הליבה של ההפניות ברמה הבסיסית (root) של tensorflow/lite/micro/kernels מוטמעות ב-C/C++ בלבד, ולא כוללות אופטימיזציות חומרה ספציפיות לפלטפורמה.

גרסאות שעברו אופטימיזציה של ליבות מסופקות בספריות משנה. לדוגמה, הקוד kernels/cmsis-nn מכיל כמה ליבות שעברו אופטימיזציה שמשתמשות בספריית CMSIS-NN של Arm.

כדי ליצור פרויקטים באמצעות ליבות שעברו אופטימיזציה, השתמשו בפקודה הבאה ומחליפים את <subdirectory_name> בשם של ספריית המשנה שמכילה את האופטימיזציות:

make -f tensorflow/lite/micro/tools/make/Makefile TAGS=<subdirectory_name> generate_projects

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

יצירה של ספריית Arduino

אם אתם צריכים ליצור build חדש של הספרייה, תוכלו להריץ את הסקריפט הבא מהמאגר ב-TensorFlow:

./tensorflow/lite/micro/tools/ci_build/test_arduino.sh

אפשר למצוא את הספרייה שתתקבל ב-gen/arduino_x86_64/prj/tensorflow_lite.zip.

יציאה למכשירים חדשים

ב-micro/docs/new_platform_support.md ניתן למצוא הנחיות להעברת TensorFlow Lite למיקרו-בקרים לפלטפורמות ולמכשירים חדשים.