LiteRT মেটাডেটা ব্যবহার করে, বিকাশকারীরা Android এ ইন্টিগ্রেশন সক্ষম করতে র্যাপার কোড তৈরি করতে পারে। বেশিরভাগ ডেভেলপারদের জন্য, অ্যান্ড্রয়েড স্টুডিও এমএল মডেল বাইন্ডিংয়ের গ্রাফিকাল ইন্টারফেসটি ব্যবহার করা সবচেয়ে সহজ। আপনার যদি আরও কাস্টমাইজেশনের প্রয়োজন হয় বা কমান্ড লাইন টুলিং ব্যবহার করেন, তাহলে LiteRT কোডজেনও উপলব্ধ।
অ্যান্ড্রয়েড স্টুডিও এমএল মডেল বাইন্ডিং ব্যবহার করুন
মেটাডেটা দিয়ে উন্নত করা LiteRT মডেলগুলির জন্য, বিকাশকারীরা Android Studio ML মডেল বাইন্ডিং ব্যবহার করতে পারেন যাতে প্রকল্পের সেটিংস স্বয়ংক্রিয়ভাবে কনফিগার করা যায় এবং মডেল মেটাডেটার উপর ভিত্তি করে র্যাপার ক্লাস তৈরি করা যায়। র্যাপার কোডটি ByteBuffer
সাথে সরাসরি যোগাযোগ করার প্রয়োজনীয়তাকে সরিয়ে দেয়। পরিবর্তে, বিকাশকারীরা Bitmap
এবং Rect
মতো টাইপ করা বস্তুর সাথে LiteRT মডেলের সাথে যোগাযোগ করতে পারে।
অ্যান্ড্রয়েড স্টুডিওতে একটি LiteRT মডেল আমদানি করুন
আপনি TFLite মডেলটি ব্যবহার করতে চান এমন মডিউলটিতে ডান-ক্লিক করুন বা
File
এ ক্লিক করুন, তারপরNew
>Other
>LiteRT Model
আপনার TFLite ফাইলের অবস্থান নির্বাচন করুন। মনে রাখবেন যে টুলিং আপনার পক্ষে মডিউলের নির্ভরতা কনফিগার করবে ML মডেল বাইন্ডিং এবং সমস্ত নির্ভরতা স্বয়ংক্রিয়ভাবে আপনার Android মডিউলের
build.gradle
ফাইলে ঢোকানো হবে।ঐচ্ছিক: আপনি যদি GPU ত্বরণ ব্যবহার করতে চান তাহলে TensorFlow GPU আমদানি করার জন্য দ্বিতীয় চেকবক্সটি নির্বাচন করুন।
Finish
ক্লিক করুন.আমদানি সফল হওয়ার পরে নিম্নলিখিত স্ক্রীনটি উপস্থিত হবে। মডেল ব্যবহার শুরু করতে, Kotlin বা Java নির্বাচন করুন,
Sample Code
বিভাগের অধীনে কোডটি অনুলিপি করুন এবং পেস্ট করুন। আপনি অ্যান্ড্রয়েড স্টুডিওতেml
ডিরেক্টরির অধীনে TFLite মডেলটিতে ডাবল ক্লিক করে এই স্ক্রিনে ফিরে যেতে পারেন।
ত্বরান্বিত মডেল অনুমান
এমএল মডেল বাইন্ডিং ডেভেলপারদের ডেলিগেট এবং থ্রেডের সংখ্যা ব্যবহারের মাধ্যমে তাদের কোড ত্বরান্বিত করার একটি উপায় প্রদান করে।
ধাপ 1. মডিউল build.gradle
ফাইলটি পরীক্ষা করুন যে এতে নিম্নলিখিত নির্ভরতা রয়েছে:
dependencies {
...
// TFLite GPU delegate 2.3.0 or above is required.
implementation 'com.google.ai.edge.litert:litert-gpu:2.3.0'
}
ধাপ 2. একাধিক CPU থ্রেড ব্যবহার করে মডেলটি না চালালে ডিভাইসে চলমান GPU TensorFlow GPU প্রতিনিধির সাথে সামঞ্জস্যপূর্ণ কিনা তা সনাক্ত করুন:
কোটলিন
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
LiteRT কোড জেনারেটরের সাথে মডেল ইন্টারফেস তৈরি করুন
মেটাডেটা সহ উন্নত LiteRT মডেলের জন্য, বিকাশকারীরা প্ল্যাটফর্ম নির্দিষ্ট র্যাপার কোড তৈরি করতে LiteRT অ্যান্ড্রয়েড র্যাপার কোড জেনারেটর ব্যবহার করতে পারে। র্যাপার কোডটি ByteBuffer
সাথে সরাসরি যোগাযোগ করার প্রয়োজনীয়তাকে সরিয়ে দেয়। পরিবর্তে, বিকাশকারীরা টেনসরফ্লো লাইট মডেলের সাথে Bitmap
এবং Rect
মতো টাইপ করা বস্তুর সাথে যোগাযোগ করতে পারে।
কোড জেনারেটরের উপযোগিতা নির্ভর করে LiteRT মডেলের মেটাডেটা এন্ট্রির সম্পূর্ণতার উপর। 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
ফলাফলের কোডটি গন্তব্য ডিরেক্টরিতে অবস্থিত হবে। আপনি যদি Google Colab বা অন্য দূরবর্তী পরিবেশ ব্যবহার করেন, তাহলে একটি জিপ সংরক্ষণাগারে ফলাফল জিপ করা এবং আপনার Android স্টুডিও প্রকল্পে ডাউনলোড করা সহজ হতে পারে:
# 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
বলে ধরে নেওয়া হয়।
অ্যান্ড্রয়েড স্টুডিও প্রজেক্টটি খুলুন যেখানে আপনি LiteRT মডেলটি ব্যবহার করতে চান এবং এর দ্বারা তৈরি মডিউল আমদানি করতে চান: এবং ফাইল -> নতুন -> আমদানি মডিউল -> SRC_ROOT
নির্বাচন করুন
উপরের উদাহরণটি ব্যবহার করে, ডিরেক্টরি এবং আমদানি করা মডিউলটিকে বলা হবে classify_wrapper
।
ধাপ 2: অ্যাপটির build.gradle
ফাইল আপডেট করুন
অ্যাপ মডিউলে যা তৈরি করা লাইব্রেরি মডিউল ব্যবহার করবে:
অ্যান্ড্রয়েড বিভাগের অধীনে, নিম্নলিখিত যোগ করুন:
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
: Android কার্যকলাপ বা পরিষেবা থেকে প্রসঙ্গ - (ঐচ্ছিক)
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"
}