মেটাডেটা ব্যবহার করে মডেল ইন্টারফেস তৈরি করুন

Litert মেটাডেটা ব্যবহার করে, ডেভেলপাররা অ্যান্ড্রয়েডে ইন্টিগ্রেশন সক্ষম করার জন্য র‍্যাপার কোড তৈরি করতে পারে। বেশিরভাগ ডেভেলপারদের জন্য, অ্যান্ড্রয়েড স্টুডিও এমএল মডেল বাইন্ডিংয়ের গ্রাফিক্যাল ইন্টারফেসটি ব্যবহার করা সবচেয়ে সহজ। আপনার যদি আরও কাস্টমাইজেশনের প্রয়োজন হয় বা কমান্ড লাইন টুলিং ব্যবহার করেন, তাহলে Litert কোডজেনও উপলব্ধ।

অ্যান্ড্রয়েড স্টুডিও এমএল মডেল বাইন্ডিং ব্যবহার করুন

মেটাডেটা দিয়ে উন্নত LiterRT মডেলের জন্য, ডেভেলপাররা Android Studio ML মডেল বাইন্ডিং ব্যবহার করে প্রকল্পের জন্য স্বয়ংক্রিয়ভাবে সেটিংস কনফিগার করতে পারে এবং মডেল মেটাডেটার উপর ভিত্তি করে র‍্যাপার ক্লাস তৈরি করতে পারে। র‍্যাপার কোডটি ByteBuffer সাথে সরাসরি ইন্টারঅ্যাক্ট করার প্রয়োজনীয়তা দূর করে। পরিবর্তে, ডেভেলপাররা Bitmap এবং Rect এর মতো টাইপ করা বস্তুর সাথে LiterT মডেলের সাথে ইন্টারঅ্যাক্ট করতে পারে।

অ্যান্ড্রয়েড স্টুডিওতে একটি LiteRT মডেল আমদানি করুন

  1. আপনি যে মডিউলটি TFLite মডেলটি ব্যবহার করতে চান তার উপর ডান-ক্লিক করুন অথবা File এ ক্লিক করুন, তারপর New > Other > LiteRT Model ক্লিক করুন।

  2. আপনার TFLite ফাইলের অবস্থান নির্বাচন করুন। মনে রাখবেন যে টুলিংটি আপনার পক্ষে ML মডেল বাইন্ডিং এর মাধ্যমে মডিউলের নির্ভরতা কনফিগার করবে এবং সমস্ত নির্ভরতা স্বয়ংক্রিয়ভাবে আপনার Android মডিউলের build.gradle ফাইলে সন্নিবেশিত হবে।

    ঐচ্ছিক: যদি আপনি GPU ত্বরণ ব্যবহার করতে চান, তাহলে TensorFlow GPU আমদানির জন্য দ্বিতীয় চেকবক্সটি নির্বাচন করুন।

  3. Finish এ ক্লিক করুন।

  4. আমদানি সফল হওয়ার পর নিম্নলিখিত স্ক্রিনটি প্রদর্শিত হবে। মডেলটি ব্যবহার শুরু করতে, কোটলিন বা জাভা নির্বাচন করুন, Sample Code বিভাগের অধীনে কোডটি কপি করে পেস্ট করুন। আপনি অ্যান্ড্রয়েড স্টুডিওতে ml ডিরেক্টরির অধীনে TFLite মডেলটিতে ডাবল ক্লিক করে এই স্ক্রিনে ফিরে আসতে পারেন।

মডেল অনুমান ত্বরান্বিত করা

এমএল মডেল বাইন্ডিং ডেভেলপারদের ডেলিগেট এবং থ্রেডের সংখ্যা ব্যবহারের মাধ্যমে তাদের কোড ত্বরান্বিত করার একটি উপায় প্রদান করে।

ধাপ ১. মডিউল build.gradle ফাইলটি পরীক্ষা করে দেখুন যে এতে নিম্নলিখিত নির্ভরতা রয়েছে:

    dependencies {
        ...
        // For the LiteRT GPU delegate, we need
        // 'com.google.ai.edge.litert:litert-gpu' version 1.*.
        implementation 'com.google.ai.edge.litert:litert-gpu:1.4.1'
    }

ধাপ ২. ডিভাইসে চলমান GPU TensorFlow GPU ডেলিগেটের সাথে সামঞ্জস্যপূর্ণ কিনা তা সনাক্ত করুন, যদি না একাধিক CPU থ্রেড ব্যবহার করে মডেলটি চালান:

কোটলিন

    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
      

LiterRT কোড জেনারেটরের সাহায্যে মডেল ইন্টারফেস তৈরি করুন

মেটাডেটা সহ উন্নত LiterRT মডেলের জন্য, ডেভেলপাররা প্ল্যাটফর্ম-নির্দিষ্ট র‍্যাপার কোড তৈরি করতে LiterT অ্যান্ড্রয়েড র‍্যাপার কোড জেনারেটর ব্যবহার করতে পারেন। র‍্যাপার কোডটি ByteBuffer সাথে সরাসরি ইন্টারঅ্যাক্ট করার প্রয়োজন দূর করে। পরিবর্তে, ডেভেলপাররা Bitmap এবং Rect এর মতো টাইপ করা বস্তুর সাথে TensorFlow Lite মডেলের সাথে ইন্টারঅ্যাক্ট করতে পারেন।

কোড জেনারেটরের কার্যকারিতা LiterRT মডেলের মেটাডেটা এন্ট্রির সম্পূর্ণতার উপর নির্ভর করে। কোডজেন টুলটি প্রতিটি ক্ষেত্র কীভাবে পার্স করে তা দেখতে metadata_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

ফলাফল কোডটি গন্তব্য ডিরেক্টরিতে অবস্থিত হবে। আপনি যদি গুগল কোল্যাব বা অন্য কোনও দূরবর্তী পরিবেশ ব্যবহার করেন, তাহলে ফলাফলটি একটি জিপ আর্কাইভে জিপ করা এবং আপনার অ্যান্ড্রয়েড স্টুডিও প্রকল্পে ডাউনলোড করা আরও সহজ হতে পারে:

# 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')

জেনারেট করা কোড ব্যবহার করে

ধাপ ১: জেনারেট করা কোডটি আমদানি করুন

প্রয়োজনে জেনারেট করা কোডটি একটি ডিরেক্টরি স্ট্রাকচারে আনজিপ করুন। জেনারেট করা কোডের মূলটি SRC_ROOT বলে ধরে নেওয়া হয়।

আপনি যেখানে LiterRT মডেল ব্যবহার করতে চান সেখানে Android Studio প্রকল্পটি খুলুন এবং জেনারেট করা মডিউলটি এইভাবে আমদানি করুন: এবং File -> New -> Import Module -> SRC_ROOT নির্বাচন করুন।

উপরের উদাহরণটি ব্যবহার করে, আমদানি করা ডিরেক্টরি এবং মডিউলটিকে classify_wrapper বলা হবে।

ধাপ ২: অ্যাপের build.gradle ফাইল আপডেট করুন

যে অ্যাপ মডিউলটি জেনারেটেড লাইব্রেরি মডিউলটি গ্রাস করবে তাতে:

অ্যান্ড্রয়েড বিভাগের অধীনে, নিম্নলিখিতগুলি যোগ করুন:

aaptOptions {
   noCompress "tflite"
}

নির্ভরতা বিভাগের অধীনে, নিম্নলিখিতগুলি যোগ করুন:

implementation project(":classify_wrapper")

ধাপ ৩: মডেল ব্যবহার করা

// 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
  • (ঐচ্ছিক) numThreads : মডেলটি চালানোর জন্য ব্যবহৃত থ্রেডের সংখ্যা - ডিফল্ট হল একটি।

উদাহরণস্বরূপ, একটি GPU ডেলিগেট এবং সর্বাধিক তিনটি থ্রেড ব্যবহার করতে, আপনি মডেলটি এভাবে শুরু করতে পারেন:

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

সমস্যা সমাধান

যদি আপনি 'java.io.FileNotFoundException: এই ফাইলটি ফাইল বর্ণনাকারী হিসেবে খোলা যাচ্ছে না; এটি সম্ভবত সংকুচিত' ত্রুটি পান, তাহলে অ্যাপ মডিউলের অ্যান্ড্রয়েড বিভাগের অধীনে নিম্নলিখিত লাইনগুলি সন্নিবেশ করান যা লাইব্রেরি মডিউল ব্যবহার করবে:

aaptOptions {
   noCompress "tflite"
}