از آنجا که کتابخانه عملگر داخلی TensorFlow Lite فقط تعداد محدودی از عملگرهای TensorFlow را پشتیبانی می کند ، بنابراین همه مدل ها قابل تبدیل نیستند. برای جزئیات بیشتر ، به سازگاری اپراتور مراجعه کنید.
برای اجازه تبدیل ، کاربران می توانند استفاده از برخی گزینه های TensorFlow را در مدل TensorFlow Lite خود فعال کنند. با این حال ، اجرای مدل های TensorFlow Lite با گزینه های TensorFlow نیاز به کشیدن زمان اصلی TensorFlow دارد ، که اندازه باینری مفسر TensorFlow Lite را افزایش می دهد. برای Android ، می توانید فقط با انتخاب گزینه های مورد نیاز 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 است.
Android AAR
برای کاهش اندازه باینری ، لطفاً پرونده های AAR سفارشی خود را طبق راهنمای بخش بعدی بسازید. اگر اندازه باینری مسئله قابل توجهی نیست ، توصیه می کنیم از AAR پیش ساخته با اپلیکیشن های TensorFlow که در JCenter میزبانی می شود استفاده کنید .
شما می توانید این مورد را در وابستگی های 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'
}
هنگامی که وابستگی را اضافه کردید ، نماینده لازم برای مدیریت نمودارهای TensorFlow نمودار باید به طور خودکار برای نمودارهایی که به آنها نیاز دارند نصب شود.
android {
defaultConfig {
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a'
}
}
}
ساخت Android AAR
برای کاهش اندازه باینری یا موارد پیشرفته دیگر ، می توانید کتابخانه را به صورت دستی نیز بسازید. با فرض یک محیط ساخت TensorFlow Lite ، Android AAR را با انتخاب گزینه های 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
برای bazel-bin/tmp/tensorflow-lite.aar
داخلی و سفارشی bazel-bin/tmp/tensorflow-lite.aar
Lite تولید می شود. و فایل AAR bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
برای bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
های bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar
. اگر محیط ساخت ساز ندارید ، می توانید فایل های فوق را با 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 {
jcenter()
mavenLocal()
}
}
dependencies {
implementation 'org.tensorflow:tensorflow-lite:0.1.100'
implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.1.100'
}
iOS
با استفاده از CocoaPods
ما با ارائه شبانه ارائه میشود را انتخاب کنید عملیات TF CocoaPods برای armv7
و 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
و موارد زیر را اضافه کنید:
-force_load $(SRCROOT)/Pods/TensorFlowLiteSelectTfOps/Frameworks/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps
سپس باید بتوانید هر مدل تبدیل شده با SELECT_TF_OPS
در برنامه iOS خود اجرا کنید. به عنوان مثال ، می توانیدبرنامه iOS Classification Image را برای آزمایش ویژگی انتخاب شده TF ops اصلاح کنید.
- فایل مدل را با پرونده فعال شده با
SELECT_TF_OPS
جایگزین کنید. - اضافه کردن
TensorFlowLiteSelectTfOps
وابستگی بهPodfile
به عنوان دستور. - پرچم پیوند دهنده اضافی را مانند بالا اضافه کنید.
- برنامه مثال را اجرا کنید و ببینید آیا مدل به درستی کار می کند یا خیر.
با استفاده از Bazel + Xcode
TensorFlow Lite با گزینه های TensorFlow برای iOS با استفاده از Bazel ساخته می شود. ابتدا ، برای پیکربندی صحیح فضای کار .bazelrc
و پرونده .bazelrc
دستورالعمل های ساخت iOS را دنبال کنید.
هنگامی که فضای کار را با پشتیبانی iOS پیکربندی کردید ، می توانید از دستور زیر برای ساخت TF ops addon frame استفاده کنید ، که می تواند در بالای TensorFlowLiteC.framework
معمولی اضافه شود. توجه داشته باشید که چارچوب TF ops را نمی توان برای معماری i386
ساخت ، بنابراین شما باید صریحاً لیست معماری هدف را به استثنای i386
.
bazel build -c opt --config=ios --ios_multi_cpus=armv7,arm64,x86_64 \
//tensorflow/lite/ios:TensorFlowLiteSelectTfOps_framework
این چارچوب را در فهرست bazel-bin/tensorflow/lite/ios/
. با دنبال کردن مراحل مشابه شرح داده شده در بخش تنظیمات پروژه Xcode در راهنمای ساخت iOS ، می توانید این چارچوب جدید را به پروژه Xcode خود اضافه کنید.
پس از افزودن چارچوب به پروژه برنامه شما ، باید یک پرچم لینک دهنده اضافی در پروژه برنامه شما مشخص شود تا چارچوب انتخاب TF ops را بارگیری کند. در پروژه Xcode خود ، به قسمت Build Settings
-> Other Linker Flags
و موارد زیر را اضافه کنید:
-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>
++ C
هنگام ساخت کتابخانه های TensorFlow Lite با استفاده از خط لوله بازل ، می توان کتابخانه اضافی TensorFlow را به شرح زیر گنجانده و فعال کرد:
- در صورت لزوم ساخت های یکپارچه را با اضافه کردن پرچم ساخت
--config=monolithic
. - وابستگی کتابخانه نمایندگی
tensorflow/lite/delegates/flex:delegate
به وابستگی های ساخت اضافه کنید:tensorflow/lite/delegates/flex:delegate
.
توجه داشته باشید که TfLiteDelegate
لازم هنگام ایجاد مفسر در زمان اجرا به طور خودکار نصب می شود به TfLiteDelegate
که نماینده به کتابخانه مشتری متصل شود. لازم نیست به صراحت نمونه نماینده را نصب کنید ، همانطور که به طور معمول در سایر انواع نماینده مورد نیاز است.
پایتون
TensorFlow Lite با گزینه های TensorFlow انتخاب شده به صورت خودکار با بسته pip TensorFlow نصب می شود. همچنین می توانید فقط بستهTensorFlow Lite Interpreter pip را نصب کنید.
معیارهای
کارایی
هنگام استفاده از مخلوطی از گزینه های داخلی و انتخابی TensorFlow ، همه بهینه سازی های مشابه TensorFlow Lite و گزینه های داخلی بهینه شده با مدل تبدیل شده در دسترس و قابل استفاده خواهند بود.
جدول زیر میانگین زمان لازم برای اجرای استنباط در MobileNet روی Pixel 2 را توصیف می کند. زمان های ذکر شده به طور متوسط 100 اجرا است. این اهداف برای Android با استفاده از پرچم ها ساخته شده اند: --config=android_arm64 -c opt
.
ساختن | زمان (میلی ثانیه) |
---|---|
فقط عملیات داخلی ( TFLITE_BUILTIN ) | 260.7 |
فقط استفاده از گزینه های TF ( SELECT_TF_OPS ) | 264.5 |
اندازه دودویی
جدول زیر اندازه باینری TensorFlow Lite را برای هر ساخت توصیف می کند. این اهداف برای Android با استفاده از --config=android_arm -c opt
.
ساختن | اندازه دودویی C ++ | اندازه APK آندروید |
---|---|---|
فقط گزینه های داخلی | 796 کیلوبایت | 561 کیلوبایت |
ops داخلی + ops TF | 23.0 مگابایت | 8.0 مگابایت |
ops داخلی + ops TF (1) | 4.1 مگابایت | 1.8 مگابایت |
(1) این کتابخانه ها به طور انتخابی برای مدل i3d-kinetics-400 با 8 اپلیکیشن داخلی TFLite و 3 اپلیکیشن Tensorflow ساخته شده اند. برای جزئیات بیشتر ، لطفا به بخش اندازه باینری Reduce TensorFlow Lite مراجعه کنید.
محدودیت های شناخته شده
- انواع پشتیبانی نشده: برخی از گزینه های TensorFlow ممکن است مجموعه کاملی از انواع ورودی / خروجی را که معمولاً در TensorFlow در دسترس هستند پشتیبانی نکنند.
- گزینه های پشتیبانی نشده: گزینه های جریان کنترل و گزینه هایی که نیاز به مقداردهی اولیه صریح از منابع دارند ، مانند
HashTableV2
هنوز پشتیبانی نمی شوند.
به روز رسانی ها
- نسخه 2.5 (هنوز به طور رسمی منتشر نشده است)
- می توانید از بهینه سازی معروف به کمیت سازی بعد از آموزش استفاده کنید
- نسخه 2.4
- سازگاری با نمایندگان تسریع شده سخت افزاری بهبود یافته است