मेटाडेटा का उपयोग करके मॉडल इंटरफेस उत्पन्न करें

TensorFlow Lite मेटाडेटा का उपयोग करके, डेवलपर्स एंड्रॉइड पर एकीकरण को सक्षम करने के लिए रैपर कोड उत्पन्न कर सकते हैं। अधिकांश डेवलपर्स के लिए, एंड्रॉइड स्टूडियो एमएल मॉडल बाइंडिंग का ग्राफिकल इंटरफ़ेस उपयोग करना सबसे आसान है। यदि आपको अधिक अनुकूलन की आवश्यकता है या आप कमांड लाइन टूलिंग का उपयोग कर रहे हैं, तो TensorFlow Lite Codegen भी उपलब्ध है।

एंड्रॉइड स्टूडियो एमएल मॉडल बाइंडिंग का उपयोग करें

मेटाडेटा के साथ संवर्धित TensorFlow Lite मॉडल के लिए, डेवलपर्स प्रोजेक्ट के लिए सेटिंग्स को स्वचालित रूप से कॉन्फ़िगर करने और मॉडल मेटाडेटा के आधार पर रैपर कक्षाएं उत्पन्न करने के लिए एंड्रॉइड स्टूडियो एमएल मॉडल बाइंडिंग का उपयोग कर सकते हैं। रैपर कोड ByteBuffer के साथ सीधे इंटरैक्ट करने की आवश्यकता को हटा देता है। इसके बजाय, डेवलपर्स Bitmap और Rect जैसे टाइप किए गए ऑब्जेक्ट के साथ TensorFlow Lite मॉडल के साथ इंटरैक्ट कर सकते हैं।

एंड्रॉइड स्टूडियो में TensorFlow Lite मॉडल आयात करें

  1. उस मॉड्यूल पर राइट-क्लिक करें जिसे आप TFLite मॉडल का उपयोग करना चाहते हैं या File पर क्लिक करें, फिर New > Other > TensorFlow Lite Model क्लिक करें।

  2. अपनी TFLite फ़ाइल का स्थान चुनें। ध्यान दें कि टूलिंग आपकी ओर से एमएल मॉडल बाइंडिंग के साथ मॉड्यूल की निर्भरता को कॉन्फ़िगर करेगी और सभी निर्भरताएं स्वचालित रूप से आपके एंड्रॉइड मॉड्यूल की build.gradle फ़ाइल में डाली जाएंगी।

    वैकल्पिक: यदि आप GPU त्वरण का उपयोग करना चाहते हैं तो TensorFlow GPU आयात करने के लिए दूसरा चेकबॉक्स चुनें।

  3. Finish क्लिक करें.

  4. आयात सफल होने के बाद निम्न स्क्रीन दिखाई देगी। मॉडल का उपयोग शुरू करने के लिए, कोटलिन या जावा का चयन करें, Sample Code अनुभाग के तहत कोड को कॉपी और पेस्ट करें। आप एंड्रॉइड स्टूडियो में ml निर्देशिका के अंतर्गत टीएफलाइट मॉडल पर डबल क्लिक करके इस स्क्रीन पर वापस आ सकते हैं।

त्वरित मॉडल अनुमान

एमएल मॉडल बाइंडिंग डेवलपर्स को प्रतिनिधियों और थ्रेड्स की संख्या के उपयोग के माध्यम से अपने कोड को तेज करने का एक तरीका प्रदान करता है।

चरण 1. मॉड्यूल build.gradle फ़ाइल की जाँच करें कि इसमें निम्नलिखित निर्भरता है:

    dependencies {
        ...
        // TFLite GPU delegate 2.3.0 or above is required.
        implementation 'org.tensorflow:tensorflow-lite-gpu:2.3.0'
    }

चरण 2. पता लगाएं कि डिवाइस पर चल रहा जीपीयू टेन्सरफ्लो जीपीयू प्रतिनिधि के साथ संगत है या नहीं, यदि एकाधिक सीपीयू थ्रेड का उपयोग करके मॉडल नहीं चलाया जाता है:

Kotlin

    import org.tensorflow.lite.gpu.CompatibilityList
    import org.tensorflow.lite.gpu.GpuDelegate

    val compatList = CompatibilityList()

    val options = if(compatList.isDelegateSupportedOnThisDevice) {
        // if the device has a supported GPU, add the GPU delegate
        Model.Options.Builder().setDevice(Model.Device.GPU).build()
    } else {
        // if the GPU is not supported, run on 4 threads
        Model.Options.Builder().setNumThreads(4).build()
    }

    // Initialize the model as usual feeding in the options object
    val myModel = MyModel.newInstance(context, options)

    // Run inference per sample code
      

जावा

    import org.tensorflow.lite.support.model.Model
    import org.tensorflow.lite.gpu.CompatibilityList;
    import org.tensorflow.lite.gpu.GpuDelegate;

    // Initialize interpreter with GPU delegate
    Model.Options options;
    CompatibilityList compatList = CompatibilityList();

    if(compatList.isDelegateSupportedOnThisDevice()){
        // if the device has a supported GPU, add the GPU delegate
        options = Model.Options.Builder().setDevice(Model.Device.GPU).build();
    } else {
        // if the GPU is not supported, run on 4 threads
        options = Model.Options.Builder().setNumThreads(4).build();
    }

    MyModel myModel = new MyModel.newInstance(context, options);

    // Run inference per sample code
      

TensorFlow Lite कोड जनरेटर के साथ मॉडल इंटरफेस तैयार करें

मेटाडेटा के साथ उन्नत TensorFlow Lite मॉडल के लिए, डेवलपर्स प्लेटफ़ॉर्म विशिष्ट रैपर कोड बनाने के लिए TensorFlow Lite एंड्रॉइड रैपर कोड जनरेटर का उपयोग कर सकते हैं। रैपर कोड ByteBuffer के साथ सीधे इंटरैक्ट करने की आवश्यकता को हटा देता है। इसके बजाय, डेवलपर्स Bitmap और Rect जैसे टाइप किए गए ऑब्जेक्ट के साथ TensorFlow Lite मॉडल के साथ इंटरैक्ट कर सकते हैं।

कोड जनरेटर की उपयोगिता TensorFlow Lite मॉडल की मेटाडेटा प्रविष्टि की पूर्णता पर निर्भर करती है। यह देखने के लिए कि कोडजेन टूल प्रत्येक फ़ील्ड को कैसे पार्स करता है, मेटाडेटा_schema.fbs में प्रासंगिक फ़ील्ड के अंतर्गत <Codegen usage> अनुभाग देखें।

रैपर कोड जनरेट करें

आपको अपने टर्मिनल में निम्नलिखित टूलिंग स्थापित करने की आवश्यकता होगी:

pip install tflite-support

एक बार पूरा होने पर, कोड जनरेटर का उपयोग निम्नलिखित सिंटैक्स का उपयोग करके किया जा सकता है:

tflite_codegen --model=./model_with_metadata/mobilenet_v1_0.75_160_quantized.tflite \
    --package_name=org.tensorflow.lite.classify \
    --model_class_name=MyClassifierModel \
    --destination=./classify_wrapper

परिणामी कोड गंतव्य निर्देशिका में स्थित होगा। यदि आप Google Colab या अन्य दूरस्थ वातावरण का उपयोग कर रहे हैं, तो परिणाम को ज़िप संग्रह में ज़िप करना और इसे अपने एंड्रॉइड स्टूडियो प्रोजेक्ट में डाउनलोड करना आसान हो सकता है:

# Zip up the generated code
!zip -r classify_wrapper.zip classify_wrapper/

# Download the archive
from google.colab import files
files.download('classify_wrapper.zip')

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

चरण 1: उत्पन्न कोड आयात करें

यदि आवश्यक हो तो उत्पन्न कोड को निर्देशिका संरचना में अनज़िप करें। जेनरेट किए गए कोड का मूल SRC_ROOT माना गया है।

एंड्रॉइड स्टूडियो प्रोजेक्ट खोलें जहां आप TensorFlow लाइट मॉडल का उपयोग करना चाहते हैं और जेनरेट किए गए मॉड्यूल को आयात करें: और फ़ाइल -> नया -> मॉड्यूल आयात करें -> SRC_ROOT चुनें

उपरोक्त उदाहरण का उपयोग करते हुए, निर्देशिका और आयातित मॉड्यूल को classify_wrapper कहा जाएगा।

चरण 2: ऐप की build.gradle फ़ाइल को अपडेट करें

ऐप मॉड्यूल में जो जेनरेट किए गए लाइब्रेरी मॉड्यूल का उपभोग करेगा:

Android अनुभाग के अंतर्गत, निम्नलिखित जोड़ें:

aaptOptions {
   noCompress "tflite"
}

निर्भरता अनुभाग के अंतर्गत, निम्नलिखित जोड़ें:

implementation project(":classify_wrapper")

चरण 3: मॉडल का उपयोग करना

// 1. Initialize the model
MyClassifierModel myImageClassifier = null;

try {
    myImageClassifier = new MyClassifierModel(this);
} catch (IOException io){
    // Error reading the model
}

if(null != myImageClassifier) {

    // 2. Set the input with a Bitmap called inputBitmap
    MyClassifierModel.Inputs inputs = myImageClassifier.createInputs();
    inputs.loadImage(inputBitmap));

    // 3. Run the model
    MyClassifierModel.Outputs outputs = myImageClassifier.run(inputs);

    // 4. Retrieve the result
    Map<String, Float> labeledProbability = outputs.getProbability();
}

त्वरित मॉडल अनुमान

जेनरेट किया गया कोड डेवलपर्स को प्रतिनिधियों और थ्रेड्स की संख्या के उपयोग के माध्यम से अपने कोड को तेज करने का एक तरीका प्रदान करता है। मॉडल ऑब्जेक्ट को आरंभ करते समय इन्हें सेट किया जा सकता है क्योंकि इसमें तीन पैरामीटर लगते हैं:

  • Context : एंड्रॉइड गतिविधि या सेवा से संदर्भ
  • (वैकल्पिक) Device : TFLite त्वरण प्रतिनिधि, उदाहरण के लिए GPUDelegate या NNAPIDelegate
  • (वैकल्पिक) numThreads : मॉडल को चलाने के लिए उपयोग किए जाने वाले थ्रेड्स की संख्या - डिफ़ॉल्ट एक है।

उदाहरण के लिए, एक एनएनएपीआई प्रतिनिधि और अधिकतम तीन थ्रेड का उपयोग करने के लिए, आप मॉडल को इस तरह आरंभ कर सकते हैं:

try {
    myImageClassifier = new MyClassifierModel(this, Model.Device.NNAPI, 3);
} catch (IOException io){
    // Error reading the model
}

समस्या निवारण

यदि आपको 'java.io.FileNotFoundException मिलता है: यह फ़ाइल फ़ाइल डिस्क्रिप्टर के रूप में नहीं खोली जा सकती; यह संभवतः संपीड़ित है' त्रुटि, ऐप मॉड्यूल के एंड्रॉइड अनुभाग के अंतर्गत निम्नलिखित पंक्तियां डालें जो लाइब्रेरी मॉड्यूल का उपयोग करेगा:

aaptOptions {
   noCompress "tflite"
}