Convolutional Neural Networks (CNNs) ডিপ লার্নিংয়ে বিশেষভাবে ইমেজ ক্লাসিফিকেশন সমস্যা সমাধানের জন্য ব্যবহৃত হয়। CNN এর মাধ্যমে, আপনি একটি মডেল ট্রেইন করতে পারেন যা ইমেজের নির্দিষ্ট ক্যাটেগরি যেমন চিত্রের মধ্যে থাকা অবজেক্ট, রঙ অথবা লেবেল নির্ধারণ করতে পারে।
এখানে একটি CNN (Convolutional Neural Network) ভিত্তিক ইমেজ ক্লাসিফিকেশন প্রজেক্ট তৈরি করার জন্য প্রয়োজনীয় ধাপগুলো আলোচনা করা হয়েছে।
ধাপ ১: লাইব্রেরি ইনস্টলেশন
প্রথমে Python এবং কিছু প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে। এখানে TensorFlow এবং Keras ব্যবহার করা হবে, কারণ এগুলি খুবই জনপ্রিয় এবং সহজে ব্যবহারযোগ্য।
pip install tensorflow numpy matplotlib
ধাপ ২: ডেটাসেট নির্বাচন
ইমেজ ক্লাসিফিকেশন প্রজেক্টের জন্য ডেটাসেট প্রয়োজন। আপনি Kaggle থেকে বিভিন্ন ইমেজ ক্লাসিফিকেশন ডেটাসেট পেতে পারেন। আমরা এখানে CIFAR-10 ডেটাসেট ব্যবহার করব, যা ১০টি ক্যাটেগরির ইমেজ ধারণ করে (যেমন, বিমান, গাড়ি, কুকুর, বিড়াল ইত্যাদি)।
CIFAR-10 ডেটাসেট সহজেই Keras লাইব্রেরি থেকে লোড করা যায়:
import tensorflow as tf
from tensorflow.keras.datasets import cifar10
# CIFAR-10 ডেটাসেট লোড করা
(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()
# ডেটা প্রিপ্রসেসিং: 0 থেকে 1 এর মধ্যে স্কেল করা
train_images, test_images = train_images / 255.0, test_images / 255.0
ধাপ ৩: CNN মডেল তৈরি করা
এখন আমাদের CNN মডেল তৈরি করতে হবে। এটি ইনপুট ইমেজ থেকে বৈশিষ্ট্য বের করার জন্য কনভোলিউশনাল লেয়ার ব্যবহার করবে এবং ফাইনাল লেয়ারটি softmax activation function ব্যবহার করবে, যা ক্লাস প্রেডিকশন করবে।
from tensorflow.keras import layers, models
# CNN মডেল তৈরি
model = models.Sequential()
# প্রথম কনভোলিউশনাল লেয়ার
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
# দ্বিতীয় কনভোলিউশনাল লেয়ার
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
# তৃতীয় কনভোলিউশনাল লেয়ার
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
# ফ্ল্যাটেন লেয়ার
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
# আউটপুট লেয়ার
model.add(layers.Dense(10))
# মডেল কম্পাইল করা
model.compile(optimizer='adam',
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
ধাপ ৪: মডেল ট্রেইন করা
এখন আমাদের মডেলকে ট্রেইন করতে হবে। আমরা fit() ফাংশন ব্যবহার করে মডেলকে প্রশিক্ষণ দেব এবং এটি ইনপুট ডেটা এবং লেবেল দিয়ে ট্রেন হবে।
history = model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels))
ধাপ ৫: মডেল মূল্যায়ন
মডেল প্রশিক্ষণের পর, এটি test set এর উপর পরীক্ষা করা হবে, যাতে মডেলের পারফরম্যান্স জানা যায়।
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f"Test accuracy: {test_acc}")
ধাপ ৬: প্রেডিকশন করা
এখন, আমরা নতুন ইমেজের উপর মডেলটি কীভাবে প্রেডিকশন করতে পারে তা দেখতে পারি। আমরা একটি ইমেজ সিলেক্ট করে তার ক্লাস প্রেডিক্ট করব।
import numpy as np
import matplotlib.pyplot as plt
# একটি ছবি সিলেক্ট করুন
img = test_images[0]
img = np.expand_dims(img, axis=0) # ডাইমেনশন বাড়ানো
# প্রেডিকশন করা
predictions = model.predict(img)
predicted_label = np.argmax(predictions)
# প্রেডিকশন দেখানো
print(f"Predicted label: {predicted_label}")
# সিলেক্ট করা ইমেজ দেখানো
plt.imshow(test_images[0])
plt.show()
ধাপ ৭: মডেল সংরক্ষণ এবং পুনরায় লোড করা
আপনি মডেলটি সংরক্ষণ করতে পারেন এবং পরবর্তীতে পুনরায় লোড করে পুনরায় ট্রেন বা প্রেডিকশন করতে পারেন।
# মডেল সংরক্ষণ করা
model.save('cnn_model.h5')
# মডেল পুনরায় লোড করা
new_model = models.load_model('cnn_model.h5')
সারাংশ:
এই প্রজেক্টে আপনি CIFAR-10 ডেটাসেট ব্যবহার করে একটি Convolutional Neural Network (CNN) তৈরি করেছেন যা ইমেজ ক্লাসিফিকেশন করতে সক্ষম। মডেলটি প্রথমে কনভোলিউশনাল লেয়ার দিয়ে বৈশিষ্ট্য বের করে এবং শেষের ডেন্স লেয়ারে ক্লাস প্রেডিকশন করে।
- ডেটাসেট: CIFAR-10 (10 ক্যাটেগরি)
- মডেল: CNN (3 কনভোলিউশনাল লেয়ার + 1 ডেন্স লেয়ার)
- টুলস: TensorFlow, Keras
এটি একটি সহজ এবং কার্যকরী ইমেজ ক্লাসিফিকেশন প্রজেক্ট, যা নতুন এবং অভিজ্ঞ ডিপ লার্নিং ব্যবহারকারীদের জন্য উপকারী হতে পারে।