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

১. শুরু করার আগে

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

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

পূর্বশর্ত

  • এই লার্নিং পাথের পূর্ববর্তী কোডল্যাব।

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

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

আপনার যা যা লাগবে

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

২. শুরু করুন

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

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

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

4ee12554e75b103f.png

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

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

৩. নির্ভরতাগুলি ইনস্টল এবং আমদানি করুন

  1. TensorFlow Lite Model Maker ইনস্টল করুন। আপনি এটি pip install কমান্ডের মাধ্যমে করতে পারেন। শেষে থাকা &> /dev/null অংশটি শুধু আউটপুটটি দমন করে। Model Maker এমন অনেক কিছু আউটপুট করে যা তাৎক্ষণিকভাবে প্রাসঙ্গিক নয়। সেগুলোকে দমন করা হয়েছে যাতে আপনি আপনার মূল কাজে মনোযোগ দিতে পারেন।
# 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')

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

৪. আপনার ডেটা ডাউনলোড ও প্রস্তুত করুন

যদি আপনার ছবিগুলো ফোল্ডারে সাজানো থাকে এবং সেই ফোল্ডারগুলো জিপ করা থাকে, তাহলে আপনি জিপ ফাইলটি ডাউনলোড করে ডিকম্প্রেস করলে, ছবিগুলো যে ফোল্ডারে আছে সেই অনুযায়ী স্বয়ংক্রিয়ভাবে লেবেলযুক্ত হয়ে যাবে। এই ডিরেক্টরিটি 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)

এরপর এই ডেটা পাথটি TensorFlow Lite Model Maker-এর ImageClassifierDataLoader ক্লাস ব্যবহার করে প্রশিক্ষণের জন্য একটি নিউরাল নেটওয়ার্ক মডেলে লোড করা যেতে পারে। শুধু ফোল্ডারটি নির্দেশ করে দিলেই কাজ হয়ে যাবে।

মেশিন লার্নিং ব্যবহার করে মডেল প্রশিক্ষণের একটি গুরুত্বপূর্ণ বিষয় হলো, প্রশিক্ষণের জন্য আপনার সমস্ত ডেটা ব্যবহার না করা। মডেলটিকে এমন ডেটা দিয়ে পরীক্ষা করার জন্য কিছুটা ডেটা রেখে দিন যা এটি আগে দেখেনি। ImageClassifierDataLoader থেকে পাওয়া ডেটাসেটের স্প্লিট মেথড ব্যবহার করে এটি সহজেই করা যায়। এতে 0.9 পাস করলে, আপনি এর ৯০% আপনার ট্রেনিং ডেটা হিসেবে এবং ১০% আপনার টেস্ট ডেটা হিসেবে পাবেন।

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

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

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

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

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

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

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

মূল বিষয়টি হলো 'হাব' শব্দটি, যা আমাদের বলে দেয় যে এই মডেলটি টেনসরফ্লো হাব থেকে এসেছে। ডিফল্টরূপে, টেনসরফ্লো লাইট মডেল মেকার 'মোবাইলনেট' নামক একটি মডেল ব্যবহার করে, যা ১০০০ ধরনের ছবি শনাক্ত করার জন্য ডিজাইন করা হয়েছে। এর পেছনের যুক্তিটি হলো, ১০০০টি শ্রেণীর মধ্যে পার্থক্য করার জন্য 'ফিচার' শেখার যে পদ্ধতি এটি ব্যবহার করে, তা পুনরায় ব্যবহার করা যায়। একই 'ফিচার' আমাদের ফুলের ৫টি শ্রেণীতে প্রয়োগ করা যেতে পারে, তাই সেগুলোকে একেবারে গোড়া থেকে শেখার প্রয়োজন হয় না।

মডেলটি ৫টি ইপোক সম্পন্ন করেছে – যেখানে একটি ইপোক হলো প্রশিক্ষণের একটি সম্পূর্ণ চক্র, যেখানে নিউরাল নেটওয়ার্ক ছবিগুলোকে তাদের লেবেলের সাথে মেলানোর চেষ্টা করে। প্রায় ১ মিনিটে ৫টি ইপোক সম্পন্ন করার পর, এটি প্রশিক্ষণ ডেটার উপর ৯৩.৮৫% নির্ভুল ছিল। যেহেতু ৫টি ক্লাস রয়েছে, একটি এলোমেলো অনুমান ২০% নির্ভুল হবে, সুতরাং এটি একটি অগ্রগতি! (এটি একটি 'লস' সংখ্যাও দেখায়, কিন্তু আপাতত আপনি নিরাপদে তা উপেক্ষা করতে পারেন।)

আগেই আপনি ডেটাগুলোকে ট্রেনিং এবং টেস্ট ডেটাতে ভাগ করে নিয়েছেন, যাতে নেটওয়ার্কটি আগে দেখেনি এমন ডেটার উপর কেমন পারফর্ম করে তার একটি ধারণা পেতে পারেন – টেস্ট ডেটার উপর model.evaluate ব্যবহার করে বাস্তব জগতে এটি কেমন পারফর্ম করতে পারে তার একটি আরও ভালো সূচক পাওয়া যায়:

loss, accuracy = model.evaluate(test_data)

এর আউটপুটটি দেখতে এইরকম হবে:

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

এখানে নির্ভুলতার হারটি লক্ষ্য করুন। এটি ৮৮.০১%, তাই বাস্তব জগতে ডিফল্ট মডেলটি ব্যবহার করলে এই স্তরের নির্ভুলতা আশা করাই যায়। প্রায় এক মিনিটে আপনার প্রশিক্ষণ দেওয়া ডিফল্ট মডেলটির জন্য এটি খারাপ নয়। অবশ্যই, মডেলটিকে আরও উন্নত করার জন্য আপনি সম্ভবত অনেক পরিবর্তন করতে পারেন, এবং সেটি নিজেই একটি স্বতন্ত্র বিজ্ঞান!

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

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

এই হলো কোডটি:

model.export(export_dir='/mm_flowers')

আপনি যদি এটি গুগল কোলাবে চালান, তাহলে স্ক্রিনের বাম দিকে থাকা ফোল্ডার আইকনে ক্লিক করে মডেলটি দেখতে পারবেন:

cc5b9988775633b4.png

এখান থেকে আপনি বর্তমান ডিরেক্টরির একটি তালিকা পাবেন। এক ডিরেক্টরি 'উপরে' যাওয়ার জন্য নির্দেশিত বাটনটি ব্যবহার করুন:

51e6ac47c992142a.png

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

57bad87f294fd189.png

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

aee14ad10c4a8a1a.png

কিছুক্ষণ পরেই আপনার মডেলটি আপনার ডাউনলোড ফোল্ডারে ডাউনলোড হয়ে যাবে।

৭. অভিনন্দন

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