Image Classification হল একটি কম্পিউটার ভিশন টাস্ক যেখানে একটি মডেল একটি চিত্রের মধ্যে উপস্থিত অবজেক্ট বা শ্রেণী সনাক্ত করার চেষ্টা করে। ডিপ লার্নিং মডেল, বিশেষত Convolutional Neural Networks (CNN), চিত্র শ্রেণীভিত্তিক বিশ্লেষণে ব্যাপকভাবে ব্যবহৃত হয়।
এই প্রজেক্টে, আমরা Keras এবং TensorFlow ব্যবহার করে একটি Image Classification মডেল তৈরি করবো, যা একটি প্রাথমিক চিত্র ডেটাসেট (যেমন CIFAR-10) ব্যবহার করে চিত্র শ্রেণীভিত্তিক ক্লাসিফিকেশন করবে।
১. ডেটাসেট নির্বাচন
এই প্রজেক্টে আমরা CIFAR-10 ডেটাসেট ব্যবহার করব, যা ১০টি শ্রেণী সহ ৬০,০০০ ৩২x৩২ পিক্সেল আকারের রঙিন চিত্র ধারণ করে।
শ্রেণীগুলি হল:
- airplane
- automobile
- bird
- cat
- deer
- dog
- frog
- horse
- ship
- truck
২. ডিপ লার্নিং মডেল তৈরি
আমরা CNN (Convolutional Neural Network) ব্যবহার করে একটি মডেল তৈরি করব, যা চিত্রের বৈশিষ্ট্যগুলি শিখবে এবং সেগুলিকে শ্রেণীভিত্তিক সঠিকভাবে শ্রেণীভুক্ত করবে।
৩. প্রক্রিয়া
লাইব্রেরি ইনস্টলেশন: প্রথমে প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে:
pip install tensorflow keras numpy matplotlib- ডেটা লোড করা এবং প্রিপ্রসেসিং:
CIFAR-10ডেটাসেট কেরাস লাইব্রেরির মাধ্যমে সরাসরি লোড করা যেতে পারে। - মডেল তৈরি করা: একটি কনভলিউশনাল নিউরাল নেটওয়ার্ক তৈরি করা হবে।
- মডেল প্রশিক্ষণ: মডেলটি
fit()ফাংশন ব্যবহার করে প্রশিক্ষণ দেওয়া হবে। - মডেল মূল্যায়ন এবং পূর্বাভাস: প্রশিক্ষণের পর, মডেলটির কার্যকারিতা যাচাই করা হবে এবং নতুন চিত্রের পূর্বাভাস দেওয়া হবে।
কোড উদাহরণ
import tensorflow as tf
from tensorflow.keras import layers, models
from tensorflow.keras.datasets import cifar10
import matplotlib.pyplot as plt
# CIFAR-10 ডেটাসেট লোড করা
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# ডেটা নরমালাইজেশন (0-255 এর মানকে 0-1 এর মধ্যে নিয়ে আসা)
x_train, x_test = x_train / 255.0, x_test / 255.0
# মডেল তৈরি করা
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10)
])
# মডেল কম্পাইল করা
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
# মডেল প্রশিক্ষণ
model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test))
# মডেল মূল্যায়ন
test_loss, test_acc = model.evaluate(x_test, y_test, verbose=2)
print(f"Test accuracy: {test_acc}")
# পূর্বাভাস প্রদান
predictions = model.predict(x_test)
# প্রথম ৫টি চিত্র দেখানো এবং পূর্বাভাস দেখানো
for i in range(5):
plt.imshow(x_test[i])
plt.title(f"Predicted: {predictions[i].argmax()} - True: {y_test[i][0]}")
plt.show()
কোডের ব্যাখ্যা:
- ডেটা লোড করা:
cifar10.load_data()ফাংশন দিয়ে CIFAR-10 ডেটাসেট লোড করা হচ্ছে। এটি স্বয়ংক্রিয়ভাবে ট্রেনিং এবং টেস্ট ডেটাসেট প্রদান করে।
- ডেটা প্রিপ্রসেসিং:
- ডেটা লোড হওয়ার পর, ইনপুট চিত্রগুলিকে
[0, 1]রেঞ্জে নরমালাইজ করা হয় যাতে মডেল দ্রুত এবং কার্যকরভাবে প্রশিক্ষিত হয়।
- ডেটা লোড হওয়ার পর, ইনপুট চিত্রগুলিকে
- মডেল তৈরি:
- প্রথম কনভলিউশনাল স্তরটি ইনপুট চিত্রের বৈশিষ্ট্য বের করে, এরপর MaxPooling লেয়ারটি ডেটার আকার কমিয়ে দেয়। এই ধাপগুলো আরও গভীর লেয়ারের জন্য কার্যকরী বৈশিষ্ট্য তৈরি করে।
- শেষে একটি Dense লেয়ার যোগ করা হয়েছে যা আউটপুট শ্রেণী নির্ধারণ করবে (এখানে ১০টি শ্রেণী রয়েছে)।
- মডেল কম্পাইল করা:
Adamঅপটিমাইজার এবং SparseCategoricalCrossentropy লস ফাংশন ব্যবহার করা হয়েছে, কারণ এটি মাল্টিক্লাস শ্রেণীভিত্তিক ক্লাসিফিকেশন কাজের জন্য উপযুক্ত।
- মডেল প্রশিক্ষণ:
- মডেলটি ১০টি Epoch পর্যন্ত ট্রেনিং হবে এবং
validation_dataপ্যারামিটার ব্যবহার করে validation accuracy যাচাই করা হবে।
- মডেলটি ১০টি Epoch পর্যন্ত ট্রেনিং হবে এবং
- মূল্যায়ন:
evaluate()ফাংশন ব্যবহার করে টেস্ট ডেটাসেটে মডেলের পারফরম্যান্স মূল্যায়ন করা হয়।
- পূর্বাভাস:
- মডেলটি
predict()ফাংশন ব্যবহার করে নতুন চিত্রের পূর্বাভাস প্রদান করে এবং সেগুলি matplotlib দিয়ে প্রদর্শন করা হয়।
- মডেলটি
ফলাফল এবং সম্ভাব্য উন্নতি:
- ফলাফল:
- এই কোডটি মডেলকে CIFAR-10 ডেটাসেটে প্রশিক্ষণ দেয় এবং এটি চিত্র সঠিকভাবে শ্রেণীভুক্ত করার চেষ্টা করবে। মডেলটি ১০টি শ্রেণী (airplane, automobile, bird, cat, etc.) মধ্যে চিত্রগুলোকে শ্রেণীভুক্ত করবে।
- উন্নতি:
- Data Augmentation: যদি মডেল আরও উন্নত করতে চান, তবে data augmentation ব্যবহার করে ডেটাসেট বৃদ্ধি করা যেতে পারে। এর মাধ্যমে মডেল আরও বিভিন্ন ধরনের চিত্র শিখতে পারবে।
- Model Architecture Improvement: মডেলটির আর্কিটেকচার আরও উন্নত করা যেতে পারে, যেমন আরও গভীর কনভলিউশনাল স্তর যোগ করা, বা আরও উন্নত ফিচার এক্সট্র্যাকশন টেকনিক ব্যবহার করা।
- Regularization: Dropout বা L2 regularization ব্যবহার করা যেতে পারে যাতে ওভারফিটিং রোধ করা যায়।
সারাংশ
এই প্রজেক্টে, Deep Learning ব্যবহার করে একটি Convolutional Neural Network (CNN) তৈরি করা হয়েছে, যা CIFAR-10 ডেটাসেট ব্যবহার করে চিত্র শ্রেণীভিত্তিক ক্লাসিফিকেশন করবে। এটি একটি বাস্তব-জগতের সমস্যা সমাধানে সাহায্য করতে পারে, যেখানে চিত্র বিশ্লেষণের মাধ্যমে বিভিন্ন ক্যাটেগরিতে চিহ্নিত করা প্রয়োজন।
Read more