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

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

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

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 برای 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 پیکربندی کردید، می‌توانید از دستور زیر برای ساخت چارچوب افزونه انتخابی TF ops استفاده کنید که می‌تواند در بالای 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 در راهنمای ساخت iOS توضیح داده شده است، می توانید این چارچوب جدید را به پروژه Xcode خود اضافه کنید.

پس از افزودن فریم ورک به پروژه برنامه خود، یک پرچم پیوند دهنده اضافی باید در پروژه برنامه شما مشخص شود تا چارچوب انتخابی 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 فعال کنید. می توانید آن را با Bazel به عنوان دستور زیر بسازید.

bazel build -c opt --config=monolithic tensorflow/lite/delegates/flex:tensorflowlite_flex

این دستور کتابخانه مشترک زیر را در bazel-bin/tensorflow/lite/delegates/flex ایجاد می‌کند.

سکو نام کتابخانه
لینوکس libtensorflowlite_flex.so
سیستم عامل مک libtensorflowlite_flex.dylib
پنجره ها tensorflowlite_flex.dll

توجه داشته باشید که TfLiteDelegate ضروری هنگام ایجاد مفسر در زمان اجرا تا زمانی که کتابخانه مشترک پیوند داده شده باشد به طور خودکار نصب می شود. نیازی به نصب صریح نمونه نماینده نیست، همانطور که معمولاً در مورد سایر انواع نماینده مورد نیاز است.

پایتون

TensorFlow Lite با گزینه های TensorFlow به طور خودکار با بسته Pip TensorFlow نصب می شود. همچنین می‌توانید فقط بسته پیپ مترجم TensorFlow Lite را نصب کنید.

معیارهای

کارایی

هنگام استفاده از ترکیبی از هر دو عملیات داخلی و منتخب TensorFlow، همه همان بهینه‌سازی‌های TensorFlow Lite و عملیات داخلی بهینه‌شده در دسترس و قابل استفاده با مدل تبدیل شده خواهند بود.

جدول زیر میانگین زمان اجرای استنباط در MobileNet را در Pixel 2 توضیح می‌دهد. زمان‌های ذکر شده به طور متوسط ​​100 اجرا هستند. این اهداف برای اندروید با استفاده از پرچم‌ها ساخته شده‌اند: --config=android_arm64 -c opt .

ساختن زمان (میلی ثانیه)
فقط عملیات داخلی ( TFLITE_BUILTIN ) 260.7
فقط استفاده از عملیات TF ( SELECT_TF_OPS ) 264.5

اندازه باینری

جدول زیر اندازه باینری TensorFlow Lite را برای هر ساخت توضیح می دهد. این اهداف با استفاده از --config=android_arm -c opt برای اندروید ساخته شده اند.

ساختن اندازه باینری C++ اندازه APK اندروید
فقط عملیات داخلی 796 کیلوبایت 561 کیلوبایت
عملیات داخلی + عملیات TF 23.0 مگابایت 8.0 مگابایت
عملیات داخلی + عملیات TF (1) 4.1 مگابایت 1.8 مگابایت

(1) این کتابخانه ها به طور انتخابی برای مدل i3d-kinetics-400 با 8 عملیات داخلی TFLite و 3 عملیات تنسورفلو ساخته شده اند. برای جزئیات بیشتر، لطفاً به بخش کاهش اندازه باینری TensorFlow Lite مراجعه کنید.

محدودیت های شناخته شده

  • انواع پشتیبانی‌نشده: برخی از عملیات‌های TensorFlow ممکن است از مجموعه کامل انواع ورودی/خروجی که معمولاً در TensorFlow موجود هستند، پشتیبانی نکنند.

به روز رسانی ها

  • نسخه 2.6
    • پشتیبانی از عملگرهای مبتنی بر ویژگی GraphDef و مقداردهی اولیه منابع HashTable بهبود یافته است.
  • نسخه 2.5
  • نسخه 2.4
    • سازگاری با نمایندگان تسریع شده سخت افزاری بهبود یافته است