Image Classification এবং Object Detection হল Computer Vision এর দুটি প্রধান টাস্ক, যেগুলি ডিপ লার্নিং এবং মেশিন লার্নিং ব্যবহার করে নির্দিষ্ট সমস্যার সমাধান করতে সাহায্য করে। নীচে এই দুটি টাস্কের বিস্তারিত ব্যাখ্যা এবং তাদের জন্য কীভাবে প্রজেক্ট তৈরি করা যেতে পারে তা নিয়ে আলোচনা করা হয়েছে।
১. Image Classification
Image Classification হল এমন একটি টাস্ক যেখানে একটি মডেল চিত্রের মধ্যে থাকা বিষয়টি চিহ্নিত করে। উদাহরণস্বরূপ, একটি মডেল একটি ছবি দেখে এটি নির্ধারণ করতে পারে যে এটি একটি কুকুর, বিড়াল, বা পাখি।
Image Classification এর জন্য PyTorch প্রজেক্ট উদাহরণ:
এখানে আমরা একটি CIFAR-10 ডেটাসেট ব্যবহার করে একটি Image Classification মডেল তৈরি করব। CIFAR-10 ডেটাসেটে 10টি বিভিন্ন ক্লাসের ছবি রয়েছে (যেমন, টিঙ্কার, কুকুর, বিড়াল ইত্যাদি)।
Step 1: ডেটাসেট লোড এবং প্রিপ্রসেসিং:
import torch
import torchvision
import torchvision.transforms as transforms
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
# ডেটা ট্রান্সফর্মেশন
transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
# CIFAR-10 ডেটাসেট লোড করা
trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)
# ডেটা লোডার তৈরি
trainloader = DataLoader(trainset, batch_size=32, shuffle=True)
testloader = DataLoader(testset, batch_size=32, shuffle=False)
Step 2: মডেল তৈরি (CNN):
class CNN_Model(nn.Module):
def __init__(self):
super(CNN_Model, self).__init__()
self.conv1 = nn.Conv2d(3, 32, kernel_size=3, padding=1)
self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
self.fc1 = nn.Linear(64 * 8 * 8, 512)
self.fc2 = nn.Linear(512, 10) # 10 ক্লাস
def forward(self, x):
x = torch.relu(self.conv1(x))
x = torch.max_pool2d(x, 2)
x = torch.relu(self.conv2(x))
x = torch.max_pool2d(x, 2)
x = x.view(-1, 64 * 8 * 8) # ফ্ল্যাট করা
x = torch.relu(self.fc1(x))
x = self.fc2(x)
return x
# মডেল তৈরি
model = CNN_Model()
Step 3: ট্রেনিং এবং অপটিমাইজেশন:
criterion = nn.CrossEntropyLoss() # লস ফাংশন
optimizer = optim.Adam(model.parameters(), lr=0.001) # অপটিমাইজার
# মডেল প্রশিক্ষণ
for epoch in range(10): # 10টি epoch
running_loss = 0.0
for inputs, labels in trainloader:
optimizer.zero_grad() # গ্র্যাডিয়েন্ট শূন্য করা
outputs = model(inputs) # আউটপুট তৈরি করা
loss = criterion(outputs, labels) # লস ক্যালকুলেশন
loss.backward() # ব্যাকপ্রোপাগেশন
optimizer.step() # ওজন আপডেট
running_loss += loss.item()
print(f"Epoch {epoch+1}, Loss: {running_loss/len(trainloader)}")
Step 4: টেস্টিং এবং মূল্যায়ন:
correct = 0
total = 0
with torch.no_grad(): # গ্র্যাডিয়েন্টের প্রয়োজন নেই
for inputs, labels in testloader:
outputs = model(inputs)
_, predicted = torch.max(outputs, 1) # সর্বোচ্চ মানটি পেতে
total += labels.size(0)
correct += (predicted == labels).sum().item()
accuracy = 100 * correct / total
print(f"Accuracy of the model on the 10000 test images: {accuracy}%")
২. Object Detection
Object Detection হল এমন একটি টাস্ক যেখানে একটি মডেল শুধুমাত্র চিত্রের মধ্যে অবজেক্ট চিহ্নিত করে না, বরং এর অবস্থানও (bounding box) নির্ধারণ করে। এটি classification এর চেয়ে আরও জটিল কারণ এটি প্রতিটি অবজেক্টের সঠিক অবস্থান এবং শ্রেণী চিহ্নিত করে।
Object Detection এর জন্য PyTorch প্রজেক্ট উদাহরণ:
এখানে আমরা Faster R-CNN ব্যবহার করব, যা একটি জনপ্রিয় ডিপ লার্নিং মডেল এবং PyTorch-এ পাওয়া যায়।
Step 1: ডেটাসেট লোড এবং প্রিপ্রসেসিং:
PyTorch এ torchvision লাইব্রেরি ব্যবহার করে COCO বা VOC ডেটাসেট লোড করা যায়, তবে আমরা এখানে Faster R-CNN এর জন্য একটি প্রাথমিক উদাহরণ দেখাবো:
import torch
import torchvision
from torchvision import transforms
from torch.utils.data import DataLoader
# ডেটা ট্রান্সফর্মেশন
transform = transforms.Compose([
transforms.ToTensor(),
])
# COCO ডেটাসেট লোড করা
dataset = torchvision.datasets.CocoDetection(root='path/to/images', annFile='path/to/annotations', transform=transform)
# ডেটা লোডার তৈরি
dataloader = DataLoader(dataset, batch_size=4, shuffle=True)
Step 2: Faster R-CNN মডেল লোড করা:
import torchvision.models.detection as detection
# Faster R-CNN মডেল লোড করা
model = detection.fasterrcnn_resnet50_fpn(pretrained=True)
# মডেলকে evaluation মোডে নেওয়া
model.eval()
Step 3: Object Detection:
import matplotlib.pyplot as plt
import numpy as np
# চিত্র লোড করা
images, targets = next(iter(dataloader))
# অবজেক্ট ডিটেকশন
with torch.no_grad():
prediction = model(images)
# Prediction দেখানো
for image, prediction in zip(images, prediction):
plt.imshow(image.permute(1, 2, 0).numpy())
plt.show()
print(prediction['boxes'], prediction['labels'], prediction['scores'])
৩. Image Classification এবং Object Detection এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Image Classification | Object Detection |
|---|---|---|
| কাজ | একটি চিত্রের শ্রেণী নির্ধারণ করা | চিত্রে অবজেক্ট সনাক্ত করা এবং তার অবস্থান (bounding box) চিহ্নিত করা |
| ইনপুট এবং আউটপুট | একক আউটপুট শ্রেণী (label) | একাধিক অবজেক্টের অবস্থান এবং শ্রেণী |
| চ্যালেঞ্জ | একটি একক শ্রেণী চিহ্নিত করা | বিভিন্ন অবজেক্ট চিহ্নিত করা এবং তাদের অবস্থান সঠিকভাবে নির্ধারণ করা |
| মডেল উদাহরণ | CNN, ResNet, VGG | Faster R-CNN, YOLO, SSD |
| অ্যাপ্লিকেশন | চিত্র শ্রেণীবদ্ধকরণ (যেমন, কুকুর, বিড়াল) | অবজেক্ট ট্র্যাকিং, সেলফ ড্রাইভিং কার, নিরাপত্তা ক্যামেরা |
সারাংশ
- Image Classification হল একটি টাস্ক যেখানে একটি চিত্রের মধ্যে একটি অবজেক্টের শ্রেণী নির্ধারণ করা হয়, যেমন কুকুর, বিড়াল, বা অন্য কোন শ্রেণী।
- Object Detection হল এমন একটি টাস্ক যেখানে চিত্রের মধ্যে অবজেক্ট চিহ্নিত করা হয় এবং তার অবস্থান (bounding box) নির্ধারণ করা হয়।
- PyTorch ব্যবহার করে এই প্রজেক্টগুলো খুবই সহজে তৈরি করা যায়। Image Classification এর জন্য সাধারণত CNN ব্যবহৃত হয়, এবং Object Detection এর জন্য Faster R-CNN, YOLO, SSD ইত্যাদি মডেল ব্যবহৃত হয়।
এটি একটি সাধারণ ধারণা ছিল, তবে প্রকৃত বাস্তব জীবনে আরও জটিল ডেটাসেট, মডেল এবং প্রিপ্রসেসিং প্রক্রিয়া ব্যবহৃত হতে পারে।
Read more