LiteRT মডেলে মেটাডেটা যোগ করা হচ্ছে

LiteRT মেটাডেটা মডেল বর্ণনার জন্য একটি মান প্রদান করে। মডেলটি কী করে এবং এর ইনপুট/আউটপুট তথ্য সম্পর্কে জ্ঞানের একটি গুরুত্বপূর্ণ উৎস হল মেটাডেটা। মেটাডেটা উভয়ই নিয়ে গঠিত

Kaggle মডেলগুলিতে প্রকাশিত সমস্ত চিত্র মডেল মেটাডেটা দ্বারা পপুলেট করা হয়েছে৷

মেটাডেটা বিন্যাস সহ মডেল

মডেল_সাথে_মেটাডেটা
চিত্র 1. মেটাডেটা এবং সংশ্লিষ্ট ফাইল সহ TFLite মডেল।

মডেল মেটাডেটা metadata_schema.fbs , একটি FlatBuffer ফাইলে সংজ্ঞায়িত করা হয়েছে। চিত্র 1-এ দেখানো হয়েছে, এটি TFLite মডেল স্কিমার মেটাডেটা ক্ষেত্রে, "TFLITE_METADATA" নামে সংরক্ষিত আছে। কিছু মডেল সংশ্লিষ্ট ফাইলের সাথে আসতে পারে, যেমন শ্রেণীবিভাগ লেবেল ফাইল । এই ফাইলগুলি জিপফাইল "অ্যাপেন্ড" মোড ( 'a' মোড) ব্যবহার করে একটি জিপ হিসাবে আসল মডেল ফাইলের শেষে সংযুক্ত করা হয়। TFLite ইন্টারপ্রেটার আগের মতই নতুন ফাইল ফরম্যাট ব্যবহার করতে পারে। আরও তথ্যের জন্য সংশ্লিষ্ট ফাইল প্যাক দেখুন।

মেটাডেটা কিভাবে পপুলেট, ভিজ্যুয়ালাইজ এবং রিড করা যায় সে সম্পর্কে নিচের নির্দেশনা দেখুন।

মেটাডেটা টুল সেটআপ করুন

আপনার মডেলে মেটাডেটা যোগ করার আগে, আপনাকে টেনসরফ্লো চালানোর জন্য একটি পাইথন প্রোগ্রামিং পরিবেশ সেটআপ করতে হবে। এখানে এটি কিভাবে সেট আপ করবেন তার একটি বিস্তারিত নির্দেশিকা রয়েছে।

পাইথন প্রোগ্রামিং পরিবেশ সেটআপ করার পরে, আপনাকে অতিরিক্ত টুলিং ইনস্টল করতে হবে:

pip install tflite-support

LiteRT মেটাডেটা টুলিং Python 3 সমর্থন করে।

Flatbuffers Python API ব্যবহার করে মেটাডেটা যোগ করা হচ্ছে

স্কিমাতে মডেল মেটাডেটার তিনটি অংশ রয়েছে:

  1. মডেলের তথ্য - মডেলের সামগ্রিক বিবরণের পাশাপাশি আইটেম যেমন লাইসেন্সের শর্তাবলী। মডেল মেটাডেটা দেখুন।
    1. ইনপুট তথ্য - ইনপুটগুলির বিবরণ এবং স্বাভাবিককরণের মতো প্রয়োজনীয় প্রাক-প্রক্রিয়াকরণ। SubGraphMetadata.input_tensor_metadata দেখুন।
      1. আউটপুট তথ্য - আউটপুট এবং পোস্ট-প্রসেসিংয়ের বর্ণনা যেমন লেবেলে ম্যাপিং। SubGraphMetadata.output_tensor_metadata দেখুন।

যেহেতু LiteRT এই মুহুর্তে শুধুমাত্র একক সাবগ্রাফকে সমর্থন করে, তাই LiteRT কোড জেনারেটর এবং Android Studio ML বাইন্ডিং বৈশিষ্ট্য SubGraphMetadata.name এবং SubGraphMetadata.description এর পরিবর্তে ModelMetadata.name এবং ModelMetadata.description ব্যবহার করবে, মেটাডেটা এবং কোড তৈরি করার সময়।

সমর্থিত ইনপুট/আউটপুট প্রকার

ইনপুট এবং আউটপুটের জন্য LiteRT মেটাডেটা নির্দিষ্ট মডেলের ধরন মাথায় রেখে ডিজাইন করা হয়নি বরং ইনপুট এবং আউটপুট প্রকারগুলিকে মাথায় রেখে তৈরি করা হয়েছে। মডেলটি কার্যকরীভাবে কী করে তা বিবেচ্য নয়, যতক্ষণ না ইনপুট এবং আউটপুট প্রকারগুলি নিম্নলিখিত বা নিম্নলিখিতগুলির সংমিশ্রণ নিয়ে গঠিত, এটি TensorFlow Lite মেটাডেটা দ্বারা সমর্থিত:

  • বৈশিষ্ট্য - সংখ্যা যা স্বাক্ষরবিহীন পূর্ণসংখ্যা বা float32।
  • চিত্র - মেটাডেটা বর্তমানে আরজিবি এবং গ্রেস্কেল ছবি সমর্থন করে।
  • বাউন্ডিং বক্স - আয়তক্ষেত্রাকার আকৃতির বাউন্ডিং বক্স। স্কিমা বিভিন্ন নম্বরিং স্কিম সমর্থন করে।

সংশ্লিষ্ট ফাইলগুলি প্যাক করুন

LiteRT মডেল বিভিন্ন সংশ্লিষ্ট ফাইলের সাথে আসতে পারে। উদাহরণস্বরূপ, প্রাকৃতিক ভাষার মডেলগুলিতে সাধারণত ভোকাব ফাইল থাকে যা শব্দের টুকরো শব্দ আইডিতে ম্যাপ করে; শ্রেণিবিন্যাস মডেলগুলিতে লেবেল ফাইল থাকতে পারে যা বস্তুর বিভাগ নির্দেশ করে। সংশ্লিষ্ট ফাইলগুলি ছাড়া (যদি থাকে), একটি মডেল ভালভাবে কাজ করবে না।

সংশ্লিষ্ট ফাইলগুলি এখন মেটাডেটা পাইথন লাইব্রেরির মাধ্যমে মডেলের সাথে বান্ডিল করা যেতে পারে। নতুন LiteRT মডেলটি একটি জিপ ফাইলে পরিণত হয় যাতে মডেল এবং সংশ্লিষ্ট ফাইল উভয়ই থাকে। এটি সাধারণ জিপ সরঞ্জাম দিয়ে আনপ্যাক করা যেতে পারে। এই নতুন মডেল ফরম্যাট একই ফাইল এক্সটেনশন ব্যবহার করে, .tflite . এটি বিদ্যমান TFLite ফ্রেমওয়ার্ক এবং দোভাষীর সাথে সামঞ্জস্যপূর্ণ। আরও বিশদ বিবরণের জন্য মডেলটিতে প্যাক মেটাডেটা এবং সংশ্লিষ্ট ফাইলগুলি দেখুন।

সংশ্লিষ্ট ফাইল তথ্য মেটাডেটা রেকর্ড করা যেতে পারে. ফাইলের প্রকারের উপর নির্ভর করে এবং যেখানে ফাইলটি সংযুক্ত করা হয়েছে (যেমন ModelMetadata , SubGraphMetadata , এবং TensorMetadata ), LiteRT অ্যান্ড্রয়েড কোড জেনারেটর স্বয়ংক্রিয়ভাবে অবজেক্টে সংশ্লিষ্ট প্রাক/পোস্ট প্রক্রিয়াকরণ প্রয়োগ করতে পারে। আরও বিশদ বিবরণের জন্য স্কিমার প্রতিটি সহযোগী ফাইল প্রকারের <কোডজেন ব্যবহার> বিভাগটি দেখুন।

স্বাভাবিককরণ এবং পরিমাপকরণ পরামিতি

নরমালাইজেশন হল মেশিন লার্নিং এর একটি সাধারণ ডেটা প্রিপ্রসেসিং কৌশল। স্বাভাবিকীকরণের লক্ষ্য হল মানগুলিকে একটি সাধারণ স্কেলে পরিবর্তন করা, মানের পরিসরে পার্থক্য না করে।

মডেল কোয়ান্টাইজেশন এমন একটি কৌশল যা ওজনের নির্ভুল উপস্থাপনা কমাতে এবং ঐচ্ছিকভাবে, স্টোরেজ এবং গণনা উভয়ের জন্য সক্রিয়করণের অনুমতি দেয়।

প্রি-প্রসেসিং এবং পোস্ট-প্রসেসিংয়ের ক্ষেত্রে, স্বাভাবিককরণ এবং পরিমাপকরণ দুটি স্বাধীন পদক্ষেপ। এখানে বিস্তারিত আছে.

স্বাভাবিককরণ কোয়ান্টাইজেশন

যথাক্রমে ফ্লোট এবং কোয়ান্ট মডেলের জন্য MobileNet-এ ইনপুট চিত্রের প্যারামিটার মানগুলির একটি উদাহরণ।
ফ্লোট মডেল :
- গড়: 127.5
- std: 127.5
কোয়ান্ট মডেল :
- গড়: 127.5
- std: 127.5
ফ্লোট মডেল :
- জিরোপয়েন্ট: 0
- স্কেল: 1.0
কোয়ান্ট মডেল :
- জিরোপয়েন্ট: 128.0
- স্কেল: 0.0078125f




কখন ডাকতে হবে?


ইনপুট : যদি প্রশিক্ষণে ইনপুট ডেটা স্বাভাবিক করা হয়, তাহলে অনুমানের ইনপুট ডেটা সেই অনুযায়ী স্বাভাবিক করা দরকার।
আউটপুট : আউটপুট ডেটা সাধারণভাবে স্বাভাবিক করা হবে না।
ফ্লোট মডেলের কোয়ান্টাইজেশন প্রয়োজন হয় না।
কোয়ান্টাইজড মডেলের প্রি/পোস্ট প্রসেসিংয়ে কোয়ান্টাইজেশনের প্রয়োজন হতে পারে বা নাও হতে পারে। এটি ইনপুট/আউটপুট টেনসরের ডেটাটাইপের উপর নির্ভর করে।
- ফ্লোট টেনসর: প্রি/পোস্ট প্রসেসিং-এ কোন পরিমাণ নির্ধারণের প্রয়োজন নেই। কোয়ান্ট অপ এবং ডিকুয়ান্ট অপ মডেল গ্রাফে বেক করা হয়।
- int8/uint8 tensors: প্রি/পোস্ট প্রসেসিং-এ কোয়ান্টাইজেশন প্রয়োজন।


সূত্র


normalized_input = (ইনপুট - গড়) / std
ইনপুটগুলির জন্য পরিমাপ করুন :
q = f/স্কেল + জিরোপয়েন্ট
আউটপুটগুলির জন্য ডিকুয়ান্টাইজ করুন :
f = (q - zeroPoint) * স্কেল

কোথায় প্যারামিটার আছে
মডেল স্রষ্টার দ্বারা পূর্ণ এবং মডেল মেটাডেটাতে সংরক্ষিত, NormalizationOptions হিসাবে TFLite রূপান্তরকারী দ্বারা স্বয়ংক্রিয়ভাবে পূর্ণ, এবং tflite মডেল ফাইলে সংরক্ষিত।
কিভাবে পরামিতি পেতে? MetadataExtractor API এর মাধ্যমে [2] TFLite Tensor API [1] বা MetadataExtractor API [2] এর মাধ্যমে
ফ্লোট এবং কোয়ান্ট মডেল কি একই মান শেয়ার করে? হ্যাঁ, ফ্লোট এবং কোয়ান্ট মডেলের একই সাধারণীকরণ পরামিতি রয়েছে না, ফ্লোট মডেলের কোয়ান্টাইজেশনের প্রয়োজন নেই।
TFLite কোড জেনারেটর বা অ্যান্ড্রয়েড স্টুডিও এমএল বাইন্ডিং কি স্বয়ংক্রিয়ভাবে ডেটা প্রক্রিয়াকরণে এটি তৈরি করে?
হ্যাঁ

হ্যাঁ

[1] LiteRT Java API এবং LiteRT C++ API
[২] মেটাডেটা এক্সট্র্যাক্টর লাইব্রেরি

uint8 মডেলের জন্য চিত্র ডেটা প্রক্রিয়া করার সময়, স্বাভাবিককরণ এবং পরিমাপকরণ কখনও কখনও এড়িয়ে যায়। যখন পিক্সেলের মানগুলি [0, 255] এর মধ্যে থাকে তখন এটি করা ভাল। কিন্তু সাধারণভাবে, প্রযোজ্য হলে আপনার সর্বদা স্বাভাবিককরণ এবং কোয়ান্টাইজেশন প্যারামিটার অনুযায়ী ডেটা প্রক্রিয়া করা উচিত।

উদাহরণ

আপনি এখানে বিভিন্ন ধরনের মডেলের জন্য মেটাডেটা কিভাবে পপুলেট করা উচিত তার উদাহরণ খুঁজে পেতে পারেন:

চিত্র শ্রেণীবিভাগ

স্ক্রিপ্টটি এখানে ডাউনলোড করুন, যা mobilenet_v1_0.75_160_quantized.tflite- এ মেটাডেটা পূরণ করে। এই মত স্ক্রিপ্ট চালান:

python ./metadata_writer_for_image_classifier.py \
    --model_file=./model_without_metadata/mobilenet_v1_0.75_160_quantized.tflite \
    --label_file=./model_without_metadata/labels.txt \
    --export_directory=model_with_metadata

অন্যান্য ইমেজ ক্লাসিফিকেশন মডেলের জন্য মেটাডেটা পপুলেট করতে, স্ক্রিপ্টে এই ধরনের মডেল স্পেক্স যোগ করুন। এই গাইডের বাকি অংশগুলি মূল উপাদানগুলিকে চিত্রিত করার জন্য চিত্র শ্রেণিবিন্যাসের উদাহরণে কিছু মূল বিভাগ হাইলাইট করবে।

ছবির শ্রেণীবিভাগের উদাহরণে গভীরভাবে ডুব দিন

মডেল তথ্য

একটি নতুন মডেল তথ্য তৈরি করে মেটাডেটা শুরু হয়:

from tflite_support import flatbuffers
from tflite_support import metadata as _metadata
from tflite_support import metadata_schema_py_generated as _metadata_fb

""" ... """
"""Creates the metadata for an image classifier."""

# Creates model info.
model_meta = _metadata_fb.ModelMetadataT()
model_meta.name = "MobileNetV1 image classifier"
model_meta.description = ("Identify the most prominent object in the "
                          "image from a set of 1,001 categories such as "
                          "trees, animals, food, vehicles, person etc.")
model_meta.version = "v1"
model_meta.author = "TensorFlow"
model_meta.license = ("Apache License. Version 2.0 "
                      "http://www.apache.org/licenses/LICENSE-2.0.")

ইনপুট/আউটপুট তথ্য

এই বিভাগটি আপনাকে দেখায় কিভাবে আপনার মডেলের ইনপুট এবং আউটপুট স্বাক্ষর বর্ণনা করতে হয়। এই মেটাডেটা স্বয়ংক্রিয় কোড জেনারেটর দ্বারা প্রি- এবং পোস্ট-প্রসেসিং কোড তৈরি করতে ব্যবহার করা যেতে পারে। একটি টেনসর সম্পর্কে ইনপুট বা আউটপুট তথ্য তৈরি করতে:

# Creates input info.
input_meta = _metadata_fb.TensorMetadataT()

# Creates output info.
output_meta = _metadata_fb.TensorMetadataT()

ইমেজ ইনপুট

ইমেজ মেশিন লার্নিং এর জন্য একটি সাধারণ ইনপুট টাইপ। LiteRT মেটাডেটা তথ্যকে সমর্থন করে যেমন রঙের স্থান এবং প্রাক-প্রসেসিং তথ্য যেমন স্বাভাবিককরণ। ইমেজের মাত্রার জন্য ম্যানুয়াল স্পেসিফিকেশনের প্রয়োজন নেই কারণ এটি ইতিমধ্যেই ইনপুট টেনসরের আকার দ্বারা সরবরাহ করা হয়েছে এবং স্বয়ংক্রিয়ভাবে অনুমান করা যেতে পারে।

input_meta.name = "image"
input_meta.description = (
    "Input image to be classified. The expected image is {0} x {1}, with "
    "three channels (red, blue, and green) per pixel. Each value in the "
    "tensor is a single byte between 0 and 255.".format(160, 160))
input_meta.content = _metadata_fb.ContentT()
input_meta.content.contentProperties = _metadata_fb.ImagePropertiesT()
input_meta.content.contentProperties.colorSpace = (
    _metadata_fb.ColorSpaceType.RGB)
input_meta.content.contentPropertiesType = (
    _metadata_fb.ContentProperties.ImageProperties)
input_normalization = _metadata_fb.ProcessUnitT()
input_normalization.optionsType = (
    _metadata_fb.ProcessUnitOptions.NormalizationOptions)
input_normalization.options = _metadata_fb.NormalizationOptionsT()
input_normalization.options.mean = [127.5]
input_normalization.options.std = [127.5]
input_meta.processUnits = [input_normalization]
input_stats = _metadata_fb.StatsT()
input_stats.max = [255]
input_stats.min = [0]
input_meta.stats = input_stats

লেবেল আউটপুট

TENSOR_AXIS_LABELS ব্যবহার করে সংশ্লিষ্ট ফাইলের মাধ্যমে একটি আউটপুট টেনসরে লেবেল ম্যাপ করা যেতে পারে।

# Creates output info.
output_meta = _metadata_fb.TensorMetadataT()
output_meta.name = "probability"
output_meta.description = "Probabilities of the 1001 labels respectively."
output_meta.content = _metadata_fb.ContentT()
output_meta.content.content_properties = _metadata_fb.FeaturePropertiesT()
output_meta.content.contentPropertiesType = (
    _metadata_fb.ContentProperties.FeatureProperties)
output_stats = _metadata_fb.StatsT()
output_stats.max = [1.0]
output_stats.min = [0.0]
output_meta.stats = output_stats
label_file = _metadata_fb.AssociatedFileT()
label_file.name = os.path.basename("your_path_to_label_file")
label_file.description = "Labels for objects that the model can recognize."
label_file.type = _metadata_fb.AssociatedFileType.TENSOR_AXIS_LABELS
output_meta.associatedFiles = [label_file]

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

নিম্নলিখিত কোড ইনপুট এবং আউটপুট তথ্যের সাথে মডেল তথ্য একত্রিত করে:

# Creates subgraph info.
subgraph = _metadata_fb.SubGraphMetadataT()
subgraph.inputTensorMetadata = [input_meta]
subgraph.outputTensorMetadata = [output_meta]
model_meta.subgraphMetadata = [subgraph]

b = flatbuffers.Builder(0)
b.Finish(
    model_meta.Pack(b),
    _metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER)
metadata_buf = b.Output()

মডেলে মেটাডেটা এবং সংশ্লিষ্ট ফাইল প্যাক করুন

একবার মেটাডেটা ফ্ল্যাটবাফার তৈরি হয়ে গেলে, মেটাডেটা এবং লেবেল ফাইলটি populate পদ্ধতির মাধ্যমে TFLite ফাইলে লেখা হয়:

populator = _metadata.MetadataPopulator.with_model_file(model_file)
populator.load_metadata_buffer(metadata_buf)
populator.load_associated_files(["your_path_to_label_file"])
populator.populate()

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

মেটাডেটা কল্পনা করুন

আপনি আপনার মেটাডেটা কল্পনা করতে Netron ব্যবহার করতে পারেন, অথবা আপনি MetadataDisplayer ব্যবহার করে একটি LiteRT মডেল থেকে json ফরম্যাটে মেটাডেটা পড়তে পারেন:

displayer = _metadata.MetadataDisplayer.with_model_file(export_model_path)
export_json_file = os.path.join(FLAGS.export_directory,
                                os.path.splitext(model_basename)[0] + ".json")
json_file = displayer.get_metadata_json()
# Optional: write out the metadata as a json file
with open(export_json_file, "w") as f:
  f.write(json_file)

অ্যান্ড্রয়েড স্টুডিও অ্যান্ড্রয়েড স্টুডিও এমএল বাইন্ডিং বৈশিষ্ট্যের মাধ্যমে মেটাডেটা প্রদর্শন সমর্থন করে।

মেটাডেটা সংস্করণ

মেটাডেটা স্কিমা শব্দার্থিক সংস্করণ সংখ্যা দ্বারা সংস্করণ করা হয়, যা স্কিমা ফাইলের পরিবর্তনগুলি ট্র্যাক করে এবং ফ্ল্যাটবাফার ফাইল সনাক্তকরণ দ্বারা, যা সত্য সংস্করণ সামঞ্জস্য নির্দেশ করে।

শব্দার্থিক সংস্করণ সংখ্যা

মেটাডেটা স্কিমা শব্দার্থিক সংস্করণ সংখ্যা দ্বারা সংস্করণ করা হয়, যেমন MAJOR.MINOR.PATCH। এটি এখানে নিয়ম অনুযায়ী স্কিমা পরিবর্তনগুলি ট্র্যাক করে। সংস্করণ 1.0.0 এর পরে যোগ করা ক্ষেত্রগুলির ইতিহাস দেখুন।

ফ্ল্যাটবাফার ফাইল সনাক্তকরণ

শব্দার্থিক সংস্করণ নিয়মগুলি অনুসরণ করলে সামঞ্জস্যের গ্যারান্টি দেয়, তবে এটি প্রকৃত অসঙ্গতি বোঝায় না। MAJOR নম্বরটি বাম্পিং করার সময়, এর অর্থ এই নয় যে পিছনের সামঞ্জস্য নষ্ট হয়ে গেছে। অতএব, আমরা মেটাডেটা স্কিমার প্রকৃত সামঞ্জস্যতা বোঝাতে Flatbuffers ফাইল সনাক্তকরণ , file_identifier ব্যবহার করি। ফাইল শনাক্তকারী ঠিক 4 অক্ষর দীর্ঘ. এটি একটি নির্দিষ্ট মেটাডেটা স্কিমাতে স্থির করা হয়েছে এবং ব্যবহারকারীদের দ্বারা পরিবর্তন সাপেক্ষে নয়। যদি কোনো কারণে মেটাডেটা স্কিমার পিছনের সামঞ্জস্যতা ভাঙতে হয়, তাহলে ফাইল_আইডেন্টিফায়ারটি বাম্প আপ হবে, উদাহরণস্বরূপ, "M001" থেকে "M002" পর্যন্ত। ফাইল_আইডেন্টিফায়ার মেটাডেটা_সংস্করণের তুলনায় অনেক কম ঘন ঘন পরিবর্তিত হবে বলে আশা করা হচ্ছে।

ন্যূনতম প্রয়োজনীয় মেটাডেটা পার্সার সংস্করণ

ন্যূনতম প্রয়োজনীয় মেটাডেটা পার্সার সংস্করণ হল মেটাডেটা পার্সারের ন্যূনতম সংস্করণ (ফ্ল্যাটবাফারের তৈরি কোড) যা মেটাডেটা ফ্ল্যাটবাফারগুলিকে সম্পূর্ণরূপে পড়তে পারে। ভার্সনটি কার্যকরভাবে সমস্ত ফিল্ডের ভার্সনগুলির মধ্যে সবচেয়ে বড় সংস্করণ সংখ্যা এবং ফাইল আইডেন্টিফায়ার দ্বারা নির্দেশিত সবচেয়ে ছোট সামঞ্জস্যপূর্ণ সংস্করণ। ন্যূনতম প্রয়োজনীয় মেটাডেটা পার্সার সংস্করণটি MetadataPopulator দ্বারা স্বয়ংক্রিয়ভাবে পূরণ করা হয় যখন মেটাডেটা একটি TFLite মডেলে পপুলেট করা হয়। ন্যূনতম প্রয়োজনীয় মেটাডেটা পার্সার সংস্করণ কীভাবে ব্যবহার করা হয় সে সম্পর্কে আরও তথ্যের জন্য মেটাডেটা এক্সট্র্যাক্টর দেখুন।

মডেল থেকে মেটাডেটা পড়ুন

মেটাডেটা এক্সট্র্যাক্টর লাইব্রেরি বিভিন্ন প্ল্যাটফর্ম জুড়ে একটি মডেল থেকে মেটাডেটা এবং সংশ্লিষ্ট ফাইলগুলি পড়ার জন্য সুবিধাজনক টুল ( জাভা সংস্করণ এবং C++ সংস্করণ দেখুন)। আপনি Flatbuffers লাইব্রেরি ব্যবহার করে অন্যান্য ভাষায় আপনার নিজস্ব মেটাডেটা এক্সট্র্যাক্টর টুল তৈরি করতে পারেন।

জাভাতে মেটাডেটা পড়ুন

আপনার Android অ্যাপে মেটাডেটা এক্সট্র্যাক্টর লাইব্রেরি ব্যবহার করার জন্য, আমরা MavenCentral-এ হোস্ট করা LiteRT মেটাডেটা AAR ব্যবহার করার পরামর্শ দিই। এতে MetadataExtractor ক্লাস, সেইসাথে মেটাডেটা স্কিমা এবং মডেল স্কিমার জন্য FlatBuffers জাভা বাইন্ডিং রয়েছে।

আপনি নিম্নলিখিতভাবে আপনার build.gradle নির্ভরতাগুলিতে এটি নির্দিষ্ট করতে পারেন:

dependencies {
    implementation 'org.tensorflow:tensorflow-lite-metadata:0.1.0'
}

রাতের স্ন্যাপশট ব্যবহার করতে, নিশ্চিত করুন যে আপনি Sonatype স্ন্যাপশট সংগ্রহস্থল যোগ করেছেন।

আপনি একটি ByteBuffer সাথে একটি MetadataExtractor অবজেক্ট শুরু করতে পারেন যা মডেলটিকে নির্দেশ করে:

public MetadataExtractor(ByteBuffer buffer);

MetadataExtractor অবজেক্টের সমগ্র জীবনকালের জন্য ByteBuffer অবশ্যই অপরিবর্তিত থাকবে। মডেল মেটাডেটার ফ্ল্যাটবাফার ফাইল আইডেন্টিফায়ার মেটাডেটা পার্সারের সাথে না মিললে আরম্ভ করা ব্যর্থ হতে পারে। আরও তথ্যের জন্য মেটাডেটা সংস্করণ দেখুন।

মিলে যাওয়া ফাইল শনাক্তকারীর সাথে, মেটাডেটা এক্সট্র্যাক্টর সফলভাবে ফ্ল্যাটবাফারের ফরোয়ার্ড এবং ব্যাকওয়ার্ড সামঞ্জস্যতা পদ্ধতির কারণে সমস্ত অতীত এবং ভবিষ্যতের স্কিমা থেকে তৈরি করা মেটাডেটা পড়বে। যাইহোক, ভবিষ্যতের স্কিমা থেকে ক্ষেত্রগুলি পুরানো মেটাডেটা এক্সট্র্যাক্টর দ্বারা নিষ্কাশন করা যাবে না। মেটাডেটার ন্যূনতম প্রয়োজনীয় পার্সার সংস্করণটি মেটাডেটা পার্সারের ন্যূনতম সংস্করণ নির্দেশ করে যা মেটাডেটা ফ্ল্যাটবাফারগুলি সম্পূর্ণরূপে পড়তে পারে। ন্যূনতম প্রয়োজনীয় পার্সার সংস্করণ শর্ত পূরণ করা হয়েছে কিনা তা যাচাই করতে আপনি নিম্নলিখিত পদ্ধতি ব্যবহার করতে পারেন:

public final boolean isMinimumParserVersionSatisfied();

মেটাডেটা ছাড়া একটি মডেল পাস করার অনুমতি দেওয়া হয়. যাইহোক, মেটাডেটা থেকে পড়া পদ্ধতিগুলি চালানোর ফলে রানটাইম ত্রুটি হবে। hasMetadata পদ্ধতি ব্যবহার করে আপনি একটি মডেলের মেটাডেটা আছে কিনা তা পরীক্ষা করতে পারেন:

public boolean hasMetadata();

MetadataExtractor আপনার জন্য ইনপুট/আউটপুট টেনসরের মেটাডেটা পেতে সুবিধাজনক ফাংশন প্রদান করে। যেমন,

public int getInputTensorCount();
public TensorMetadata getInputTensorMetadata(int inputIndex);
public QuantizationParams getInputTensorQuantizationParams(int inputIndex);
public int[] getInputTensorShape(int inputIndex);
public int getoutputTensorCount();
public TensorMetadata getoutputTensorMetadata(int inputIndex);
public QuantizationParams getoutputTensorQuantizationParams(int inputIndex);
public int[] getoutputTensorShape(int inputIndex);

যদিও LiteRT মডেল স্কিমা একাধিক সাবগ্রাফ সমর্থন করে, TFLite ইন্টারপ্রেটার বর্তমানে শুধুমাত্র একটি সাবগ্রাফ সমর্থন করে। অতএব, MetadataExtractor তার পদ্ধতিতে একটি ইনপুট আর্গুমেন্ট হিসাবে সাবগ্রাফ সূচক বাদ দেয়।

মডেল থেকে সংশ্লিষ্ট ফাইল পড়ুন

মেটাডেটা এবং সংশ্লিষ্ট ফাইলগুলির সাথে LiteRT মডেলটি মূলত একটি জিপ ফাইল যা সংশ্লিষ্ট ফাইলগুলি পেতে সাধারণ জিপ সরঞ্জামগুলির সাথে আনপ্যাক করা যেতে পারে। উদাহরণস্বরূপ, আপনি mobilenet_v1_0.75_160_quantized আনজিপ করতে পারেন এবং মডেলের লেবেল ফাইলটি নিম্নরূপ বের করতে পারেন:

$ unzip mobilenet_v1_0.75_160_quantized_1_metadata_1.tflite
Archive:  mobilenet_v1_0.75_160_quantized_1_metadata_1.tflite
 extracting: labels.txt

আপনি মেটাডেটা এক্সট্র্যাক্টর লাইব্রেরির মাধ্যমে সংশ্লিষ্ট ফাইলগুলিও পড়তে পারেন।

জাভাতে, ফাইলের নামটি MetadataExtractor.getAssociatedFile পদ্ধতিতে পাস করুন:

public InputStream getAssociatedFile(String fileName);

একইভাবে, C++ এ, এই পদ্ধতিটি দিয়ে করা যেতে পারে, ModelMetadataExtractor::GetAssociatedFile :

tflite::support::StatusOr<absl::string_view> GetAssociatedFile(
      const std::string& filename) const;