আপনার ইমেজ ক্লাসিফায়ার জন্য একটি কাস্টম মডেল তৈরি করুন

1. আপনি শুরু করার আগে

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

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

পূর্বশর্ত

  • এই শেখার পথে আগের কোডল্যাব।

আপনি কি তৈরি করবেন এবং শিখবেন

  • TensorFlow Lite Model Maker ব্যবহার করে কিভাবে একটি ইমেজ ক্লাসিফায়ার কাস্টম মডেলকে প্রশিক্ষণ দেওয়া যায়।

আপনি কি প্রয়োজন হবে

  • কোনো বিশেষ হার্ডওয়্যারের প্রয়োজন নেই - ব্রাউজারে Google Colab ব্যবহার করে সবকিছু সম্পন্ন করা যায়।

2. শুরু করুন

অনুসরণ করার জন্য সমস্ত কোড আপনার জন্য প্রস্তুত করা হয়েছে এবং এখানে Google Colab ব্যবহার করে চালানোর জন্য উপলব্ধ। আপনার যদি Google Colab-এ অ্যাক্সেস না থাকে, তাহলে আপনি রেপো ক্লোন করতে পারেন এবং CustomImageClassifierModel.ipynb নামের নোটবুকটি ব্যবহার করতে পারেন যা ImageClassificationMobile->colab ডিরেক্টরিতে পাওয়া যাবে।

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

এটি করার সবচেয়ে সহজ উপায় হল একটি .zip বা .tgz ফাইল তৈরি করা যাতে ছবিগুলিকে ডিরেক্টরিতে সাজানো হয়। উদাহরণস্বরূপ, আপনি যদি ডেইজি, ড্যান্ডেলিয়ন, গোলাপ, সূর্যমুখী এবং টিউলিপের ছবি ব্যবহার করেন তবে আপনি সেগুলিকে এইরকম ডিরেক্টরিতে সংগঠিত করতে পারেন:

4ee12554e75b103f.png

এটিকে জিপ করুন এবং এটি একটি সার্ভারে হোস্ট করুন এবং আপনি এটির সাথে মডেলদের প্রশিক্ষণ দিতে সক্ষম হবেন৷ আপনি এই ল্যাবের বাকি অংশে আপনার জন্য প্রস্তুত করা একটি ব্যবহার করবেন।

এই ল্যাবটি ধরে নেবে যে আপনি মডেলটি প্রশিক্ষণের জন্য Google Colab ব্যবহার করছেন। আপনি colab.research.google.com-এ কোলাব খুঁজে পেতে পারেন। আপনি যদি অন্য পরিবেশ ব্যবহার করেন তবে আপনাকে অনেক নির্ভরতা ইনস্টল করতে হতে পারে, অন্তত টেনসরফ্লো নয়।

3. ইনস্টল এবং আমদানি নির্ভরতা

  1. টেনসরফ্লো লাইট মডেল মেকার ইনস্টল করুন। আপনি একটি পিপ ইনস্টল দিয়ে এটি করতে পারেন। শেষে &> /dev/null শুধুমাত্র আউটপুট দমন করে। মডেল মেকার অনেকগুলি জিনিস আউটপুট করে যা অবিলম্বে প্রাসঙ্গিক নয়। এটিকে চাপা দেওয়া হয়েছে যাতে আপনি হাতে থাকা টাস্কে ফোকাস করতে পারেন।
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
  1. এরপরে আপনাকে যে লাইব্রেরিগুলি ব্যবহার করতে হবে তা আমদানি করতে হবে এবং নিশ্চিত করতে হবে যে আপনি TensorFlow 2.x ব্যবহার করছেন:
# Imports and check that we are using TF2.x
import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

এখন যে পরিবেশ প্রস্তুত, এটি আপনার মডেল তৈরি শুরু করার সময়!

4. ডাউনলোড করুন এবং আপনার ডেটা প্রস্তুত করুন

যদি আপনার ছবিগুলি ফোল্ডারগুলিতে সংগঠিত হয়, এবং সেই ফোল্ডারগুলি জিপ করা হয়, তাহলে আপনি যদি জিপটি ডাউনলোড করেন এবং এটিকে ডিকম্প্রেস করেন, আপনি স্বয়ংক্রিয়ভাবে আপনার ছবিগুলি যে ফোল্ডারে রয়েছে তার উপর ভিত্তি করে লেবেলযুক্ত পাবেন৷ এই ডিরেক্টরিটিকে data_path হিসাবে উল্লেখ করা হবে৷

data_path = tf.keras.utils.get_file(
      'flower_photos',
      'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
      untar=True)

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

মেশিন লার্নিং সহ প্রশিক্ষণের মডেলগুলির একটি গুরুত্বপূর্ণ উপাদান হল প্রশিক্ষণের জন্য আপনার সমস্ত ডেটা ব্যবহার না করা। এটি আগে দেখা যায়নি এমন ডেটা সহ মডেলটি পরীক্ষা করতে একটু পিছিয়ে থাকুন। ImageClassifierDataLoader থেকে ফিরে আসা ডেটাসেটের বিভক্ত পদ্ধতির সাথে এটি করা সহজ। এটিতে 0.9 পাস করলে, আপনি এটির 90% আপনার প্রশিক্ষণ ডেটা হিসাবে এবং 10% আপনার পরীক্ষার ডেটা হিসাবে পাবেন:

data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)

এখন আপনার ডেটা প্রস্তুত করা হয়েছে, আপনি এটি ব্যবহার করে একটি মডেল তৈরি করতে পারেন।

5. ইমেজ ক্লাসিফায়ার মডেল তৈরি করুন

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

model = image_classifier.create(train_data)

আপনি যখন এটি চালাবেন, তখন আপনি আউটপুট দেখতে পাবেন যা কিছুটা নিচের মত দেখাচ্ছে:

Model: "sequential_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024
_________________________________________________________________
dropout_2 (Dropout)          (None, 1280)              0
_________________________________________________________________
dense_2 (Dense)              (None, 5)                 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181

Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911

Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133

Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287

Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385

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

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

মূলটি হল 'হাব' শব্দটি, আমাদের বলছে যে এই মডেলটি টেনসরফ্লো হাব থেকে এসেছে। ডিফল্টরূপে, TensorFlow Lite Model Maker 'MobileNet' নামক একটি মডেল ব্যবহার করে যেটি 1000 ধরনের ছবি চিনতে ডিজাইন করা হয়েছে। এখানে যুক্তি হল যে এটি যে পদ্ধতিটি ব্যবহার করে, 1000টি ক্লাসের মধ্যে পার্থক্য করার জন্য 'বৈশিষ্ট্য' শেখার মাধ্যমে, তা পুনরায় ব্যবহার করা যেতে পারে। একই 'বৈশিষ্ট্যগুলি' আমাদের 5 শ্রেণীর ফুলের সাথে ম্যাপ করা যেতে পারে, তাই তাদের স্ক্র্যাচ থেকে শিখতে হবে না।

মডেলটি 5টি যুগের মধ্য দিয়ে গেছে - যেখানে একটি যুগ হল প্রশিক্ষণের একটি সম্পূর্ণ চক্র যেখানে নিউরাল নেটওয়ার্ক তাদের লেবেলের সাথে চিত্রগুলিকে মেলানোর চেষ্টা করে৷ এটি 5টি যুগের মধ্য দিয়ে যাওয়ার সময়, প্রায় 1 মিনিটের মধ্যে, এটি প্রশিক্ষণের ডেটাতে 93.85% নির্ভুল ছিল। প্রদত্ত যে 5টি ক্লাস আছে, একটি এলোমেলো অনুমান 20% সঠিক হবে, তাই এটি অগ্রগতি! (এটি একটি 'ক্ষতি' নম্বরও রিপোর্ট করে, কিন্তু আপনি নিরাপদে এটিকে আপাতত উপেক্ষা করেন।)

এর আগে আপনি প্রশিক্ষণ এবং পরীক্ষার ডেটাতে ডেটা বিভক্ত করেছেন, যাতে নেটওয়ার্কটি পূর্বে দেখা যায়নি এমন ডেটাতে কীভাবে পারফর্ম করে তা আপনি একটি পরিমাপ পেতে পারেন - model.evaluate ব্যবহার করে এটি কীভাবে বাস্তব বিশ্বে পারফর্ম করতে পারে তার একটি ভাল সূচক। পরীক্ষার তথ্য:

loss, accuracy = model.evaluate(test_data)

এটি এরকম কিছু আউটপুট করবে:

12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801

এখানে নির্ভুলতা নোট করুন. এটি 88.01%, তাই বাস্তব জগতে ডিফল্ট মডেল ব্যবহার করে সেই স্তরের নির্ভুলতা আশা করা উচিত। আপনি প্রায় এক মিনিটের মধ্যে প্রশিক্ষিত ডিফল্ট মডেলের জন্য এটি খারাপ নয়। অবশ্যই আপনি মডেলটিকে উন্নত করার জন্য অনেকগুলি টুইকিং করতে পারেন এবং এটি নিজেই একটি বিজ্ঞান!

6. মডেল রপ্তানি করুন

এখন যেহেতু মডেলটি প্রশিক্ষিত, পরবর্তী ধাপ হল এটিকে .tflite ফর্ম্যাটে রপ্তানি করা যা একটি মোবাইল অ্যাপ্লিকেশন ব্যবহার করতে পারে৷ মডেল মেকার একটি সহজ রপ্তানি পদ্ধতি প্রদান করে যা আপনি ব্যবহার করতে পারেন — আউটপুট করার জন্য শুধুমাত্র ডিরেক্টরি নির্দিষ্ট করুন।

এখানে কোড আছে:

model.export(export_dir='/mm_flowers')

আপনি যদি এটি Google Colab-এ চালান, তাহলে আপনি পর্দার বাম দিকে ফোল্ডার আইকনে ক্লিক করে মডেলটি দেখতে পারেন:

cc5b9988775633b4.png

এখান থেকে, আপনি বর্তমান ডিরেক্টরির একটি তালিকা পাবেন। একটি ডিরেক্টরিকে "উপরে" সরাতে নির্দেশিত বোতামটি ব্যবহার করুন:

51e6ac47c992142a.png

আপনার কোডে আপনি mm_flowers ডিরেক্টরিতে এক্সপোর্ট করতে নির্দিষ্ট করেছেন। এটি খুলুন, এবং আপনি ' model.tflite ' নামে একটি ফাইল দেখতে পাবেন। এটি আপনার প্রশিক্ষিত মডেল।

57bad87f294fd189.png

ফাইলটি নির্বাচন করুন এবং আপনি ডানদিকে 3 টি ডট পপ আপ দেখতে পাবেন। একটি প্রসঙ্গ মেনু পেতে এইগুলিতে ক্লিক করুন এবং আপনি সেখান থেকে মডেলটি ডাউনলোড করতে পারেন।

aee14ad10c4a8a1a.png

কয়েক মুহূর্ত পরে আপনার মডেল আপনার ডাউনলোড ফোল্ডারে ডাউনলোড করা হবে.

7. অভিনন্দন

আপনি এখন এটিকে আপনার মোবাইল অ্যাপে সংহত করতে প্রস্তুত! আপনি পরবর্তী ল্যাবে এটি করবেন।