Image Classification হল এমন একটি প্রক্রিয়া যেখানে একটি মডেল একটি ছবির শ্রেণী নির্ধারণ করে। Deep Learning এবং Convolutional Neural Networks (CNNs) ব্যবহার করে এটি খুবই কার্যকরভাবে করা যায়। এখানে আমরা Gluon API (MXNet) ব্যবহার করে একটি সাধারণ Image Classification প্রজেক্ট তৈরি করব, যেখানে একটি CNN মডেল ব্যবহার করা হবে।
প্রজেক্টের ধাপ:
- প্রজেক্ট সেটআপ
- ডেটাসেট প্রস্তুতি (প্রযুক্তিগত এবং কনভোলিউশনাল ডেটাসেট)
- CNN মডেল তৈরি
- মডেল প্রশিক্ষণ
- মডেল মূল্যায়ন এবং টেস্টিং
- ফাইনাল আউটপুট দেখানো
ধাপ 1: প্রজেক্ট সেটআপ
প্রথমে আমাদের MXNet এবং প্রয়োজনীয় লাইব্রেরি ইনস্টল করতে হবে।
pip install mxnet gluoncv
এছাড়া, যদি আপনি GPU ব্যবহার করতে চান:
pip install mxnet-cu112
ধাপ 2: ডেটাসেট প্রস্তুতি
এখানে আমরা Fashion-MNIST ডেটাসেট ব্যবহার করব, যা ছোট ইমেজ ক্লাসিফিকেশন টাস্কে ব্যবহৃত হয় (এটি 10টি বিভিন্ন ধরনের পোশাক শ্রেণীভুক্ত ইমেজ ধারণ করে)।
GluonCV লাইব্রেরি ব্যবহার করে Fashion-MNIST ডেটাসেট লোড করা যাবে।
import gluoncv as gcv
from gluoncv.data import transforms
from mxnet import gluon
# Fashion-MNIST ডেটাসেট লোড করা
train_dataset = gcv.data.vision.FashionMNIST(train=True)
test_dataset = gcv.data.vision.FashionMNIST(train=False)
# ট্রেনিং এবং টেস্ট ডেটা ট্রান্সফর্ম করা (Normalization)
transform = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean=[0.13, 0.13, 0.13], std=[0.31, 0.31, 0.31]),
])
train_data = gluon.data.DataLoader(train_dataset.transform_first(transform), batch_size=64, shuffle=True)
test_data = gluon.data.DataLoader(test_dataset.transform_first(transform), batch_size=64, shuffle=False)
এখানে:
ToTensor()ইমেজগুলোকে টেনসরে রূপান্তরিত করে।Normalize()পিক্সেল ভ্যালুগুলোর মান নরমালাইজ করে (mean এবং std দিয়ে)।
ধাপ 3: CNN মডেল তৈরি
এখন আমরা একটি সাধারণ Convolutional Neural Network (CNN) তৈরি করব।
from mxnet.gluon import nn
# CNN মডেল তৈরি
class CNNModel(nn.Block):
def __init__(self, **kwargs):
super(CNNModel, self).__init__(**kwargs)
self.conv1 = nn.Conv2D(32, kernel_size=3, padding=1)
self.pool1 = nn.MaxPool2D(pool_size=2)
self.conv2 = nn.Conv2D(64, kernel_size=3, padding=1)
self.pool2 = nn.MaxPool2D(pool_size=2)
self.flatten = nn.Flatten()
self.fc = nn.Dense(10) # 10টি ক্লাসের জন্য আউটপুট
def forward(self, x):
x = self.pool1(nn.Activation(self.conv1(x), act_type='relu'))
x = self.pool2(nn.Activation(self.conv2(x), act_type='relu'))
x = self.flatten(x)
x = self.fc(x)
return x
# মডেল ইনিশিয়ালাইজ করা
model = CNNModel()
model.initialize(ctx=mx.cpu()) # আপনি GPU ব্যবহার করলে ctx=mx.gpu(0) করবেন
এখানে:
- Conv2D: কনভোলিউশনাল লেয়ার, যা ইমেজ থেকে ফিচার extract করে।
- MaxPool2D: পুলিং লেয়ার, যা ফিচার ম্যাপ কম্প্রেস করে এবং গাণিতিক পারফরম্যান্স বৃদ্ধি করে।
- Dense: পুরো যুক্ত লেয়ার যা আউটপুট প্রদান করে।
ধাপ 4: মডেল প্রশিক্ষণ
এখন আমরা মডেলটি প্রশিক্ষণ করব। এর জন্য softmax cross-entropy loss এবং adam optimizer ব্যবহার করব।
from mxnet.gluon import loss as gloss, Trainer
from mxnet import autograd, nd
# লস ফাংশন এবং অপটিমাইজার
loss_fn = gloss.SoftmaxCrossEntropyLoss()
trainer = Trainer(model.collect_params(), 'adam', {'learning_rate': 0.001})
# প্রশিক্ষণ লুপ
epochs = 10
for epoch in range(epochs):
total_loss = 0
for data, label in train_data:
data = data.as_in_context(mx.cpu())
label = label.as_in_context(mx.cpu())
with autograd.record():
output = model(data)
loss = loss_fn(output, label)
loss.backward()
trainer.step(data.shape[0])
total_loss += loss.mean().asscalar()
print(f"Epoch {epoch+1}, Loss: {total_loss / len(train_data)}")
এখানে:
- SoftmaxCrossEntropyLoss ব্যবহার করা হয়েছে ক্লাসিফিকেশন সমস্যার জন্য।
- Trainer দিয়ে Adam optimizer ব্যবহার করা হয়েছে।
ধাপ 5: মডেল মূল্যায়ন
এখন আমরা মডেলটি টেস্ট ডেটা দিয়ে মূল্যায়ন করব এবং accuracy বের করব।
correct, total = 0, 0
for data, label in test_data:
data = data.as_in_context(mx.cpu())
label = label.as_in_context(mx.cpu())
output = model(data)
prediction = nd.argmax(output, axis=1)
correct += (prediction == label).sum().asscalar()
total += label.size
accuracy = correct / total
print(f"Accuracy: {accuracy * 100:.2f}%")
এখানে:
- Accuracy হিসাব করার জন্য সঠিক পূর্বাভাস এবং মোট টেস্ট স্যাম্পল সংখ্যা ব্যবহার করা হয়েছে।
ধাপ 6: ফাইনাল আউটপুট দেখানো
আপনি মডেলটি পরবর্তী পরীক্ষার জন্য এবং উন্নত ভবিষ্যদ্বাণী করতে ব্যবহার করতে পারবেন। যেমন:
# নিউ ইমেজের জন্য পূর্বাভাস (এখানে dummy ডেটা ব্যবহার করা হয়েছে)
test_image = nd.random.uniform(0, 1, shape=(1, 28, 28)) # dummy test image
test_image = test_image.expand_dims(axis=0) # (1, 1, 28, 28)
output = model(test_image)
predicted_class = nd.argmax(output, axis=1)
print(f"Predicted Class: {predicted_class.asscalar()}")
সারাংশ
- Image Classification প্রজেক্টে Gluon API ব্যবহার করে আপনি সহজেই CNN মডেল তৈরি করতে পারেন।
- Fashion-MNIST ডেটাসেট ব্যবহার করে আমরা প্রশিক্ষণ এবং মূল্যায়ন করেছি।
- Convolutional Layers, Pooling Layers, এবং Fully Connected Layers ব্যবহার করে আমরা মডেল তৈরি করেছি।
- Adam optimizer এবং SoftmaxCrossEntropyLoss এর মাধ্যমে মডেল প্রশিক্ষণ করা হয়েছে এবং মডেলের পারফরম্যান্স accuracy দিয়ে মূল্যায়ন করা হয়েছে।
এটি একটি সাধারণ Image Classification প্রজেক্ট তৈরি করার উদাহরণ, যা আপনার প্রকল্পের জন্য ব্যবহার করা যেতে পারে।
Read more