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

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

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

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

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

निम्न उदाहरण दिखाता है कि चुनिंदा TensorFlow ops के साथ 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 ops के लिए समर्थन के साथ परिवर्तित किया गया है, क्लाइंट को TensorFlow Lite रनटाइम का भी उपयोग करना चाहिए जिसमें TensorFlow ops की आवश्यक लाइब्रेरी शामिल है।

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

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

आप इसे अपनी 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 ops को संभालने के लिए आवश्यक प्रतिनिधि स्वचालित रूप से उन ग्राफ़ के लिए स्थापित हो जाना चाहिए जिनकी उन्हें आवश्यकता होती है।

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

Android AAR का निर्माण

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

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

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 ops के लिए समर्थन है:

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 ops CocoaPods प्रदान करता है, जिस पर आप TensorFlowLiteSwift या TensorFlowLiteObjC CocoaPods के साथ निर्भर रह सकते हैं।

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

pod install चलाने के बाद, आपको अपने प्रोजेक्ट में चुनिंदा TF ऑप्स फ्रेमवर्क को लोड करने के लिए एक अतिरिक्त लिंकर फ्लैग प्रदान करने की आवश्यकता है। अपने 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 से परिवर्तित किसी भी मॉडल को चलाने में सक्षम होना चाहिए। उदाहरण के लिए, आप चुनिंदा TF ऑप्स सुविधा का परीक्षण करने के लिए छवि वर्गीकरण iOS ऐप को संशोधित कर सकते हैं।

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

Bazel + Xcode का उपयोग करना

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

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

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

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

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

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

सी/सी ++

यदि आप TensorFlow Lite दुभाषिया बनाने के लिए Bazel या CMake का उपयोग कर रहे हैं, तो आप TensorFlow Lite Flex प्रतिनिधि साझा लाइब्रेरी को लिंक करके 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 ops के साथ TensorFlow Lite , TensorFlow पाइप पैकेज के साथ अपने आप इंस्टॉल हो जाएगा। आप केवल TensorFlow Lite इंटरप्रेटर पाइप पैकेज को स्थापित करना भी चुन सकते हैं।

मेट्रिक्स

प्रदर्शन

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

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

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

बाइनरी आकार

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

निर्माण सी ++ बाइनरी आकार एंड्रॉइड एपीके आकार
केवल अंतर्निहित ऑप्स 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
    • ग्राफडिफ-एट्रिब्यूट आधारित ऑपरेटरों के लिए समर्थन और हैशटेबल संसाधन आरंभीकरण में सुधार हुआ है।
  • संस्करण 2.5
  • संस्करण 2.4
    • हार्डवेयर त्वरित प्रतिनिधियों के साथ संगतता में सुधार हुआ है