عملگرهای 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 که در MavenCentral میزبانی شده استفاده کنید .

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

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 نمودار باید به طور خودکار برای نمودارهایی که به آنها نیاز دارند نصب شود.

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 {
        mavenCentral()
        maven {  // Only for snapshot artifacts
            name 'ossrh-snapshot'
            url 'http://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

ما با ارائه شبانه ارائه میشود را انتخاب کنید عملیات 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
    • سازگاری با نمایندگان تسریع شده سخت افزاری بهبود یافته است