این صفحه به‌وسیله ‏Cloud Translation API‏ ترجمه شده است.
Switch to English

عملگرهای TensorFlow را انتخاب کنید

از آنجا که کتابخانه اپراتور داخلی 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 میزبانی می شود استفاده کنید .

با افزودن آن در کنار استاندارد TensorFlow Lite AAR می توانید این مورد را در وابستگی های build.gradle خود مشخص کنید:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
    // This dependency adds the necessary TF op support.
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly'
}

پس از افزودن وابستگی ، نماینده لازم برای مدیریت نمودارهای 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، که شما می توانید در کنار بستگی 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 خود اجرا کنید. برای مثال ، می توانید برنامه Image Classification iOS را برای آزمایش ویژگی انتخاب شده TF ops اصلاح کنید.

  • فایل مدل را با پرونده فعال شده با SELECT_TF_OPS جایگزین کنید.
  • اضافه کردن TensorFlowLiteSelectTfOps وابستگی به Podfile به عنوان دستور.
  • پرچم پیوند دهنده اضافی را مانند بالا اضافه کنید.
  • برنامه مثال را اجرا کنید و ببینید آیا مدل به درستی کار می کند یا خیر.

با استفاده از Bazel + Xcode

TensorFlow Lite با گزینه های TensorFlow برای iOS با استفاده از Bazel قابل ساخت است. ابتدا ، برای پیکربندی صحیح فضای کار .bazelrc و پرونده .bazelrc دستورالعمل های ساخت iOS را دنبال کنید.

هنگامی که فضای کار را با پشتیبانی iOS پیکربندی کردید ، می توانید از دستور زیر برای ایجاد چارچوب TF ops addon انتخاب کنید ، که می تواند در بالای TensorFlowLiteC.framework معمولی اضافه شود. توجه داشته باشید که چارچوب انتخاب TF ops را نمی توان برای معماری i386 ساخت ، بنابراین شما باید صریحاً لیست معماری هدف را به استثنای i386 .

bazel build -c opt --config=ios --ios_multi_cpus=armv7,arm64,x86_64 \
  //tensorflow/lite/experimental/ios:TensorFlowLiteSelectTfOps_framework

این چارچوب را در فهرست bazel-bin/tensorflow/lite/experimental/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 هنوز پشتیبانی نمی شوند.
  • بهینه سازی های پشتیبانی نشده: اگر از بهینه سازی معروف به کمیت سازی بعد از آموزش استفاده کنید ، فقط گزینه های TensorFlow Lite کوانتیزه می شوند (یا بهینه می شوند) ، اما گزینه های TensorFlow به صورت شناور (یا بهینه سازی نشده) باقی می مانند.

برنامه های آینده

در زیر لیستی از بهبودهای این خط لوله در حال انجام است:

  • عملکرد بهتر - کار برای اطمینان از همکاری TensorFlow Lite با TensorFlow با نمایندگان تسریع شده سخت افزاری ، به عنوان مثال نمایندگان NNAPI و GPU در حال انجام است.