TensorFlow ऑपरेटरों का चयन करें

चूँकि TensorFlow Lite बिल्ट-इन ऑपरेटर लाइब्रेरी केवल सीमित संख्या में TensorFlow ऑपरेटरों का समर्थन करती है, इसलिए प्रत्येक मॉडल परिवर्तनीय नहीं है। विवरण के लिए, ऑपरेटर अनुकूलता देखें।

रूपांतरण की अनुमति देने के लिए, उपयोगकर्ता अपने TensorFlow Lite मॉडल में कुछ TensorFlow ऑप्स के उपयोग को सक्षम कर सकते हैं। हालाँकि, TensorFlow लाइट मॉडल को TensorFlow ऑप्स के साथ चलाने के लिए कोर TensorFlow रनटाइम को खींचने की आवश्यकता होती है, जिससे TensorFlow Lite दुभाषिया बाइनरी आकार बढ़ जाता है। Android के लिए, आप केवल आवश्यक Tensorflow ऑप्स का चयन करके इससे बच सकते हैं। विवरण के लिए, बाइनरी आकार कम करें देखें।

यह दस्तावेज़ बताता है कि अपनी पसंद के प्लेटफ़ॉर्म पर TensorFlow ऑप्स वाले TensorFlow Lite मॉडल को कैसे परिवर्तित और चलाया जाए । यह प्रदर्शन और आकार मेट्रिक्स और ज्ञात सीमाओं पर भी चर्चा करता है।

एक मॉडल परिवर्तित करें

निम्नलिखित उदाहरण दिखाता है कि चुनिंदा TensorFlow ऑप्स के साथ TensorFlow Lite मॉडल कैसे तैयार किया जाए।

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 ऑप्स की आवश्यक लाइब्रेरी शामिल है।

एंड्रॉइड एएआर

बाइनरी आकार को कम करने के लिए, कृपया अगले भाग में बताए अनुसार अपनी स्वयं की कस्टम एएआर फ़ाइलें बनाएं। यदि बाइनरी आकार कोई बड़ी चिंता का विषय नहीं है, तो हम MavenCentral पर होस्ट किए गए TensorFlow ऑप्स के साथ पूर्वनिर्मित AAR का उपयोग करने की सलाह देते हैं।

आप इसे मानक 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'
}

रात्रिकालीन स्नैपशॉट का उपयोग करने के लिए, सुनिश्चित करें कि आपने सोनाटाइप स्नैपशॉट रिपॉजिटरी जोड़ा है।

एक बार जब आप निर्भरता जोड़ लेते हैं, तो ग्राफ़ के TensorFlow ऑप्स को संभालने के लिए आवश्यक प्रतिनिधि स्वचालित रूप से उन ग्राफ़ के लिए स्थापित किया जाना चाहिए जिनकी उन्हें आवश्यकता होती है।

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
        }
    }
}

एंड्रॉइड एएआर का निर्माण

बाइनरी आकार या अन्य उन्नत मामलों को कम करने के लिए, आप मैन्युअल रूप से लाइब्रेरी भी बना सकते हैं। एक कार्यशील TensorFlow Lite बिल्ड वातावरण मानते हुए, चुनिंदा TensorFlow ऑप्स के साथ Android AAR का निर्माण निम्नानुसार करें:

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

यह TensorFlow Lite बिल्ट-इन और कस्टम ऑप्स के लिए AAR फ़ाइल bazel-bin/tmp/tensorflow-lite.aar उत्पन्न करेगा; और TensorFlow ऑप्स के लिए AAR फ़ाइल bazel-bin/tmp/tensorflow-lite-select-tf-ops.aar जनरेट करें। यदि आपके पास कार्यशील निर्माण वातावरण नहीं है, तो आप docker के साथ उपरोक्त फ़ाइलें भी बना सकते हैं।

वहां से, आप या तो एएआर फाइलों को सीधे अपने प्रोजेक्ट में आयात कर सकते हैं, या कस्टम एएआर फाइलों को अपने स्थानीय मावेन रिपॉजिटरी में प्रकाशित कर सकते हैं:

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'
}

आईओएस

कोकोपोड्स का उपयोग करना

TensorFlow Lite, arm64 के लिए रात्रिकालीन प्रीबिल्ट चुनिंदा TF ऑप्स CocoaPods प्रदान करता है, जिस पर आप TensorFlowLiteSwift या TensorFlowLiteObjC CocoaPods के साथ भरोसा कर सकते हैं।

# In your Podfile target:
  pod 'TensorFlowLiteSwift'   # or 'TensorFlowLiteObjC'
  pod 'TensorFlowLiteSelectTfOps', '~> 0.0.1-nightly'

pod install चलाने के बाद, आपको अपने प्रोजेक्ट में चुनिंदा टीएफ ऑप्स फ्रेमवर्क को जबरदस्ती लोड करने के लिए एक अतिरिक्त लिंकर फ़्लैग प्रदान करना होगा। अपने 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

फिर आपको अपने iOS ऐप में SELECT_TF_OPS के साथ परिवर्तित किसी भी मॉडल को चलाने में सक्षम होना चाहिए। उदाहरण के लिए, आप चुनिंदा TF ऑप्स सुविधा का परीक्षण करने के लिए इमेज क्लासिफिकेशन iOS ऐप को संशोधित कर सकते हैं।

  • मॉडल फ़ाइल को SELECT_TF_OPS सक्षम के साथ कनवर्ट की गई फ़ाइल से बदलें।
  • निर्देशानुसार Podfile में TensorFlowLiteSelectTfOps निर्भरता जोड़ें।
  • ऊपर बताए अनुसार अतिरिक्त लिंकर ध्वज जोड़ें।
  • उदाहरण ऐप चलाएँ और देखें कि मॉडल सही ढंग से काम करता है या नहीं।

बेज़ेल + एक्सकोड का उपयोग करना

iOS के लिए चुनिंदा TensorFlow ऑप्स के साथ TensorFlow Lite को Bazel का उपयोग करके बनाया जा सकता है। सबसे पहले, अपने बेज़ल कार्यक्षेत्र और .bazelrc फ़ाइल को सही ढंग से कॉन्फ़िगर करने के लिए iOS बिल्ड निर्देशों का पालन करें।

एक बार जब आप आईओएस समर्थन सक्षम होने के साथ कार्यक्षेत्र को कॉन्फ़िगर कर लेते हैं, तो आप चुनिंदा टीएफ ऑप्स ऐडऑन फ्रेमवर्क बनाने के लिए निम्न कमांड का उपयोग कर सकते हैं, जिसे नियमित TensorFlowLiteC.framework के शीर्ष पर जोड़ा जा सकता है। ध्यान दें कि चयनित TF ऑप्स फ्रेमवर्क i386 आर्किटेक्चर के लिए नहीं बनाया जा सकता है, इसलिए आपको i386 छोड़कर लक्ष्य आर्किटेक्चर की सूची स्पष्ट रूप से प्रदान करने की आवश्यकता है।

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

यह bazel-bin/tensorflow/lite/ios/ निर्देशिका के अंतर्गत फ़्रेमवर्क तैयार करेगा। आप iOS बिल्ड गाइड में Xcode प्रोजेक्ट सेटिंग्स अनुभाग के तहत वर्णित समान चरणों का पालन करके इस नए फ्रेमवर्क को अपने Xcode प्रोजेक्ट में जोड़ सकते हैं।

आपके ऐप प्रोजेक्ट में फ्रेमवर्क जोड़ने के बाद, चयनित टीएफ ऑप्स फ्रेमवर्क को जबरदस्ती लोड करने के लिए आपके ऐप प्रोजेक्ट में एक अतिरिक्त लिंकर ध्वज निर्दिष्ट किया जाना चाहिए। अपने Xcode प्रोजेक्ट में, Build Settings -> Other Linker Flags पर जाएँ, और जोड़ें:

-force_load <path/to/your/TensorFlowLiteSelectTfOps.framework/TensorFlowLiteSelectTfOps>

सी/सी++

यदि आप TensorFlow Lite दुभाषिया बनाने के लिए बेज़ेल या CMake का उपयोग कर रहे हैं, तो आप TensorFlow Lite Flex प्रतिनिधि साझा लाइब्रेरी को लिंक करके फ्लेक्स प्रतिनिधि को सक्षम कर सकते हैं। आप इसे निम्नलिखित कमांड के रूप में बेज़ेल के साथ बना सकते हैं।

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 ऑप्स के साथ TensorFlow Lite , TensorFlow पाइप पैकेज के साथ स्वचालित रूप से इंस्टॉल हो जाएगा। आप केवल TensorFlow Lite इंटरप्रेटर पाइप पैकेज इंस्टॉल करना भी चुन सकते हैं।

मेट्रिक्स

प्रदर्शन

बिल्टिन और चुनिंदा TensorFlow ऑप्स दोनों के मिश्रण का उपयोग करते समय, सभी समान TensorFlow Lite अनुकूलन और अनुकूलित बिल्टिन ऑप्स उपलब्ध होंगे और परिवर्तित मॉडल के साथ प्रयोग करने योग्य होंगे।

निम्न तालिका Pixel 2 पर MobileNet पर इंट्रेंस चलाने में लगने वाले औसत समय का वर्णन करती है। सूचीबद्ध समय औसतन 100 रन हैं। ये लक्ष्य एंड्रॉइड के लिए झंडे का उपयोग करके बनाए गए थे: --config=android_arm64 -c opt

निर्माण समय (मिलीसेकंड)
केवल अंतर्निर्मित ऑप्स ( TFLITE_BUILTIN ) 260.7
केवल TF ऑप्स का उपयोग करना ( SELECT_TF_OPS ) 264.5

बाइनरी आकार

निम्न तालिका प्रत्येक बिल्ड के लिए TensorFlow Lite के बाइनरी आकार का वर्णन करती है। ये लक्ष्य एंड्रॉइड के लिए --config=android_arm -c opt का उपयोग करके बनाए गए थे।

निर्माण C++ बाइनरी आकार एंड्रॉइड एपीके आकार
केवल अंतर्निर्मित ऑप्स 796 केबी 561 केबी
बिल्ट-इन ऑप्स + टीएफ ऑप्स 23.0 एमबी 8.0 एमबी
अंतर्निर्मित ऑप्स + टीएफ ऑप्स (1) 4.1 एमबी 1.8 एमबी

(1) ये लाइब्रेरीज़ चुनिंदा रूप से i3d-काइनेटिक्स-400 मॉडल के लिए 8 टीएफलाइट बिल्टिन ऑप्स और 3 टेन्सरफ़्लो ऑप्स के साथ बनाई गई हैं। अधिक जानकारी के लिए, कृपया TensorFlow Lite बाइनरी आकार को कम करें अनुभाग देखें।

ज्ञात सीमाएँ

  • असमर्थित प्रकार: कुछ TensorFlow ऑप्स इनपुट/आउटपुट प्रकारों के पूर्ण सेट का समर्थन नहीं कर सकते हैं जो आमतौर पर TensorFlow में उपलब्ध हैं।

अपडेट

  • संस्करण 2.6
    • ग्राफ़डेफ़-विशेषता आधारित ऑपरेटरों और हैशटेबल संसाधन आरंभीकरण के लिए समर्थन में सुधार हुआ है।
  • संस्करण 2.5
  • संस्करण 2.4
    • हार्डवेयर त्वरित प्रतिनिधियों के साथ संगतता में सुधार हुआ है