সাহায্য Kaggle উপর TensorFlow সঙ্গে গ্রেট বেরিয়ার রিফ রক্ষা চ্যালেঞ্জ যোগদান

টেনসরফ্লো লাইট মডেলগুলিতে মেটাডেটা যোগ করা

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

প্রকাশিত সকল ইমেজ মডেলের TensorFlow লাইট মডেল হোস্ট এবং TensorFlow হাব মেটাডেটা সঙ্গে জনবহুল করা হয়েছে।

মেটাডেটা ফর্ম্যাট সহ মডেল

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

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

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

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

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

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

pip install tflite-support

TensorFlow Lite মেটাডেটা টুলিং পাইথন 3 সমর্থন করে।

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

সেখানে মডেল মেটাডেটা থেকে তিনটি অংশ আছে স্কিমা :

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

যেহেতু TensorFlow Lite এই সময়ে একক subgraph সমর্থন করে, TensorFlow লাইট কোড জেনারেটরের এবং অ্যান্ড্রয়েড স্টুডিও এমএল বাঁধাই বৈশিষ্ট্য ব্যবহার করবে ModelMetadata.name এবং ModelMetadata.description পরিবর্তে SubGraphMetadata.name এবং SubGraphMetadata.description যখন মেটাডাটা প্রদর্শন এবং উৎপাদিত কোড।

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

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

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

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

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

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

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

স্বাভাবিককরণ এবং কোয়ান্টাইজেশন পরামিতি

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

মডেল quantization একটি পন্থা যা ওজন এবং উভয় স্টোরেজ ও গণনার জন্য বিকল্প হিসাবে সক্রিয়করণব্যবস্থা কমে স্পষ্টতা উপস্থাপনা জন্য অনুমতি দেয়।

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

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

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




কখন আহ্বান করবেন?


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


সূত্র


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

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

হ্যাঁ

[1] দ্য TensorFlow লাইট জাভা এপিআই এবং TensorFlow লাইট সি ++ এপিআই
[2] মেটাডেটা নিষ্কর্ষক গ্রন্থাগার

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

TensorFlow লাইট টাস্ক লাইব্রেরী আপনার জন্য নিয়মমাফিককরণ সব ব্যবস্থা করতে সক্ষম যদি আপনি সেট আপ NormalizationOptions মেটাডেটা হবে। কোয়ান্টাইজেশন এবং ডিকুয়ান্টাইজেশন প্রসেসিং সবসময়ই থাকে।

উদাহরণ

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

ছবির শ্রেণীবিভাগ

স্ক্রিপ্ট ডাউনলোড এখানে , যা মান মেটাডেটা থেকে 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()

ইমেজ ইনপুট

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

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()

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

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

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 আপনার মেটাডেটা ঠাহর করা, অথবা আপনি ব্যবহার করে একটি JSON ফর্ম্যাটে মধ্যে একটি TensorFlow লাইট মডেল থেকে মেটাডাটা পড়তে পারেন MetadataDisplayer :

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)

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

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

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

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

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

Flatbuffers ফাইল সনাক্তকরণ

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

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

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

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

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

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

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

তুমি তোমার এই নির্দিষ্ট করতে পারেন build.gradle নিম্নরূপ নির্ভরতা:

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

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

আপনি একটি আরম্ভ করতে পারেন MetadataExtractor একটি সঙ্গে বস্তুর ByteBuffer যে মডেলের পয়েন্ট:

public MetadataExtractor(ByteBuffer buffer);

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

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

public final boolean isMinimumParserVersionSatisfied();

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

public boolean hasMetadata();

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

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);

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

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

মেটাডেটা এবং সংশ্লিষ্ট ফাইলগুলির সাথে TensorFlow Lite মডেলটি মূলত একটি জিপ ফাইল যা সংশ্লিষ্ট ফাইলগুলি পেতে সাধারণ জিপ টুল দিয়ে আনপ্যাক করা যায়। উদাহরণস্বরূপ, যদি আপনি আনজিপ করতে 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);

Similarily, সি ++ এই পদ্ধতি সঙ্গে কাজ করা যেতে পারে ModelMetadataExtractor::GetAssociatedFile :

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