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

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

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

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

পূর্বশর্ত

  • এই শেখার পথে পূর্ববর্তী কোডল্যাব।

তুমি কী তৈরি করবে এবং শিখবে

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

তোমার যা লাগবে

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

2. শুরু করুন

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

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

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

4ee12554e75b103f.png সম্পর্কে

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

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

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

  1. TensorFlow Lite Model Maker ইনস্টল করুন। আপনি একটি pip ইনস্টল দিয়ে এটি করতে পারেন। শেষে &> /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)

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

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

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

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

hub_keras_layer_v1v2_2 (HubK (None, 1280)              3413024

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

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

আগে আপনি ডেটাকে প্রশিক্ষণ এবং পরীক্ষার ডেটাতে ভাগ করে নিন, যাতে আপনি এমন ডেটার উপর নেটওয়ার্ক কীভাবে কাজ করে তার একটি পরিমাপ পেতে পারেন যা আগে দেখা যায়নি - পরীক্ষার ডেটার উপর 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 সম্পর্কে

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

aee14ad10c4a8a1a.png

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

৭. অভিনন্দন

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