מאחר שספריית המפעילים המובנית של TensorFlow Lite תומכת רק במספר מוגבל של מפעילי TensorFlow, לא כל דגם ניתן להמרה. לפרטים, עיין בתאימות למפעיל .
כדי לאפשר המרה, משתמשים יכולים לאפשר שימוש באופציות מסוימות של TensorFlow במודל TensorFlow Lite שלהם. עם זאת, הפעלת דגמי TensorFlow Lite עם TensorFlow אופציות דורשת משיכה של זמן הריצה הליבה של TensorFlow, מה שמגדיל את הגודל הבינארי של מתורגמן TensorFlow Lite. עבור אנדרואיד, אתה יכול להימנע מכך על ידי בנייה סלקטיבית של פעולות נדרשות של Tensorflow בלבד. לפרטים, עיין בהקטנת הגודל הבינארי .
מסמך זה מתאר כיצד להמיר ולהפעיל מודל TensorFlow Lite המכיל אופציות של TensorFlow בפלטפורמה לבחירתך. הוא דן גם במדדי ביצועים וגודל ובמגבלות ידועות .
המר דגם
הדוגמה הבאה מראה כיצד ליצור מודל TensorFlow Lite עם אופציות של TensorFlow נבחרות.
import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.target_spec.supported_ops = [
tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops.
tf.lite.OpsSet.SELECT_TF_OPS # enable TensorFlow ops.
]
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
הפעל מסקנות
בעת שימוש במודל TensorFlow Lite שהומר עם תמיכה בפעולות TensorFlow נבחרות, על הלקוח להשתמש גם בזמן ריצה של TensorFlow Lite הכולל את הספרייה הדרושה של TensorFlow ops.
אנדרואיד AAR
כדי להקטין את הגודל הבינארי, אנא בנו קבצי AAR מותאמים אישית משלכם כפי שהודרך בסעיף הבא . אם הגודל הבינארי אינו מהווה דאגה משמעותית, אנו ממליצים להשתמש ב- AAR המובנה מראש עם אופציות TensorFlow המתארחות ב-MavenCentral .
אתה יכול לציין זאת בתלות ב- build.gradle
שלך על ידי הוספתו לצד התקן TensorFlow Lite AAR באופן הבא:
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly-SNAPSHOT'
// This dependency adds the necessary TF op support.
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly-SNAPSHOT'
}
כדי להשתמש בצילומי מצב לילי, ודא שהוספת מאגר תמונות מצב של Sonatype .
לאחר שהוספת את התלות, הנציג הדרוש לטיפול ב-TensorFlow ops של הגרף אמור להיות מותקן אוטומטית עבור גרפים הדורשים אותם.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
בניית AAR של אנדרואיד
להקטנת הגודל הבינארי או מקרים מתקדמים אחרים, אתה יכול גם לבנות את הספרייה באופן ידני. בהנחה שסביבת בנייה פועלת של TensorFlow Lite , בנה את AAR Android עם אופציות נבחרות של TensorFlow באופן הבא:
sh tensorflow/lite/tools/build_aar.sh \
--input_models=/a/b/model_one.tflite,/c/d/model_two.tflite \
--target_archs=x86,x86_64,arm64-v8a,armeabi-v7a
זה יפיק את קובץ ה-AAR bazel-bin/tmp/tensorflow-lite.aar
עבור TensorFlow Lite פעולות מובנות ומותאמות אישית; וצור את קובץ ה-AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
עבור TensorFlow ops. אם אין לך סביבת בנייה עובדת, תוכל גם לבנות קבצים לעיל עם docker .
משם, אתה יכול לייבא את קבצי ה-AAR ישירות לפרויקט שלך, או לפרסם את קובצי ה-AAR המותאמים אישית למאגר Maven המקומי שלך:
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite -Dversion=0.1.100 -Dpackaging=aar
mvn install:install-file \
-Dfile=bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar \
-DgroupId=org.tensorflow \
-DartifactId=tensorflow-lite-select-tf-ops -Dversion=0.1.100 -Dpackaging=aar
לבסוף, ב- build.gradle
של האפליקציה שלך, ודא שיש לך את התלות mavenLocal()
והחלף את התלות הסטנדרטית של TensorFlow Lite בזו שתומך באופציות נבחרות של TensorFlow:
allprojects {
repositories {
mavenCentral()
maven { // Only for snapshot artifacts
name 'ossrh-snapshot'
url 'https://oss.sonatype.org/content/repositories/snapshots'
}
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}
iOS
שימוש ב-CocoaPods
TensorFlow Lite מספק TF ops CocoaPods נבחרים שנבנו מדי לילה עבור arm64
, שעליהם אתה יכול לסמוך לצד TensorFlowLiteSwift
או TensorFlowLiteObjC
CocoaPods.
# In your Podfile target:
pod 'TensorFlowLiteSwift' # or 'TensorFlowLiteObjC'
pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'
לאחר הפעלת pod install
, עליך לספק דגל קישור נוסף כדי לאלץ לטעון את המסגרת הנבחרת של TF ops לתוך הפרויקט שלך. בפרויקט ה-Xcode שלך, עבור אל Build Settings
-> Other Linker Flags
והוסף:
עבור גרסאות >= 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.xcframework/ios-arm64/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
עבור גרסאות < 2.9.0:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
לאחר מכן, אתה אמור להיות מסוגל להפעיל את כל הדגמים שהומרו עם ה- SELECT_TF_OPS
באפליקציית iOS שלך. לדוגמה, אתה יכול לשנות את אפליקציית סיווג תמונה ל-iOS כדי לבדוק את תכונת TF ops הנבחרת.
- החלף את קובץ הדגם בקובץ שהומר כאשר
SELECT_TF_OPS
מופעל. - הוסף תלות של
TensorFlowLiteSelectTfOps
ל-Podfile
לפי ההוראות. - הוסף את דגל המקשר הנוסף כמו לעיל.
- הפעל את האפליקציה לדוגמה ובדוק אם הדגם פועל כהלכה.
באמצעות Bazel + Xcode
ניתן לבנות את TensorFlow Lite עם אופציות TensorFlow נבחרות עבור iOS באמצעות Bazel. ראשית, עקוב אחר הוראות הבנייה של iOS כדי להגדיר כהלכה את סביבת העבודה של Bazel וקובץ ה- .bazelrc
.
לאחר שתגדיר את סביבת העבודה עם תמיכה ב-iOS מופעלת, תוכל להשתמש בפקודה הבאה כדי לבנות את המסגרת select TF ops addon, אותה ניתן להוסיף על גבי TensorFlowLiteC.framework
הרגיל. שים לב שלא ניתן לבנות את המסגרת הנבחרת של TF ops עבור ארכיטקטורת i386
, לכן עליך לספק במפורש את רשימת ארכיטקטורות היעד למעט i386
.
bazel build -c opt --config=ios --ios_multi_cpus=arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
זה יפיק את המסגרת תחת ספריית bazel-bin/tensorflow/lite/ios/
. אתה יכול להוסיף את המסגרת החדשה הזו לפרויקט Xcode שלך על ידי ביצוע שלבים דומים המתוארים בסעיף הגדרות פרויקט Xcode במדריך הבנייה של iOS.
לאחר הוספת המסגרת לפרויקט האפליקציה שלך, יש לציין דגל קישור נוסף בפרויקט האפליקציה שלך כדי לאלץ לטעון את המסגרת הנבחרת של TF ops. בפרויקט ה-Xcode שלך, עבור אל Build Settings
-> Other Linker Flags
והוסף:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
C/C++
אם אתה משתמש ב-Bazel או ב-CMake כדי לבנות מתורגמן של TensorFlow Lite, אתה יכול להפעיל את Flex delegate על ידי קישור ספריה משותפת של TensorFlow Lite Flex delegate. אתה יכול לבנות אותו עם Bazel בתור הפקודה הבאה.
bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex
פקודה זו יוצרת את הספרייה המשותפת הבאה ב- bazel-bin/tensorflow/lite/delegates/flex
.
פּלַטפוֹרמָה | שם הספרייה |
---|---|
לינוקס | libtensorflowlite_flex.so |
macOS | libtensorflowlite_flex.dylib |
חלונות | tensorflowlite_flex.dll |
שימו לב שה- TfLiteDelegate
הדרוש יותקן אוטומטית בעת יצירת המתורגמן בזמן ריצה כל עוד הספרייה המשותפת מקושרת. אין צורך להתקין במפורש את מופע הנציג כפי שנדרש בדרך כלל עם סוגי נציג אחרים.
פִּיתוֹן
TensorFlow Lite עם אופציות TensorFlow נבחרות יותקן אוטומטית עם חבילת TensorFlow pip . אתה יכול גם לבחור להתקין רק את חבילת ה-TensorFlow Lite Interpreter pip .
מדדים
ביצועים
בעת שימוש בתערובת של אופציות מובנות ונבחרות של TensorFlow, כל אותן אופטימיזציות של TensorFlow Lite ואופציות מובנות אופטימליות יהיו זמינות וניתנות לשימוש עם הדגם שהומר.
הטבלה הבאה מתארת את הזמן הממוצע שלוקח להפעיל הסקה ב-MobileNet ב-Pixel 2. הזמנים הרשומים הם ממוצע של 100 ריצות. יעדים אלה נבנו עבור אנדרואיד באמצעות הדגלים: --config=android_arm64 -c opt
.
לִבנוֹת | זמן (מילישניות) |
---|---|
רק פעולות מובנות ( TFLITE_BUILTIN ) | 260.7 |
שימוש רק ב-TF ops ( SELECT_TF_OPS ) | 264.5 |
גודל בינארי
הטבלה הבאה מתארת את הגודל הבינארי של TensorFlow Lite עבור כל build. יעדים אלה נבנו עבור אנדרואיד באמצעות --config=android_arm -c opt
.
לִבנוֹת | C++ גודל בינארי | גודל APK של אנדרואיד |
---|---|---|
רק פעולות מובנות | 796 KB | 561 KB |
אופציות מובנות + TF אופציות | 23.0 מגה-בייט | 8.0 מגה-בייט |
פעולות מובנות + אופציות TF (1) | 4.1 מגה-בייט | 1.8 מגה-בייט |
(1) ספריות אלו בנויות באופן סלקטיבי עבור מודל i3d-kinetics-400 עם 8 פעולות מובנות של TFLite ו-3 אופציות של Tensorflow. לפרטים נוספים, עיין בסעיף הקטנת הגודל הבינארי של TensorFlow Lite .
מגבלות ידועות
- סוגים לא נתמכים: ייתכן שאופס מסוימים של TensorFlow לא יתמכו במערך המלא של סוגי קלט/פלט הזמינים בדרך כלל ב-TensorFlow.
עדכונים
- גרסה 2.6
- התמיכה באופרטורים מבוססי תכונות GraphDef ובאתחולי משאבי HashTable השתפרו.
- גרסה 2.5
- אתה יכול להחיל אופטימיזציה המכונה קוונטיזציה לאחר אימון
- גרסה 2.4
- התאימות עם נציגים מואצים בחומרה השתפרה