Image এবং Text ডেটা নিয়ে কাজ করা

PyTorch এর Dataset এবং Dataloader - পাইটর্চ (Pytorch) - Machine Learning

357

Image এবং Text ডেটা নিয়ে কাজ করা

Image এবং Text ডেটা হলো দুইটি গুরুত্বপূর্ণ ধরনের ডেটা, যেগুলি মেশিন লার্নিং এবং ডিপ লার্নিংয়ে ব্যাপকভাবে ব্যবহৃত হয়। এই দুটি ডেটা টাইপের সাথে কাজ করার জন্য বিশেষ কৌশল এবং টুলস ব্যবহৃত হয়। নিচে আমরা কীভাবে Image এবং Text ডেটার সাথে কাজ করতে পারি তা বিস্তারিতভাবে আলোচনা করব।


১. Image ডেটা নিয়ে কাজ

Image Data হল এমন ডেটা যেখানে প্রতিটি ইনপুট একটি চিত্র হিসেবে থাকে। চিত্রের প্রতিটি পিক্সেল তার নিজস্ব মান (RGB) ধারণ করে এবং একটি চিত্রের বিভিন্ন বৈশিষ্ট্য (যেমন আকৃতি, রঙ, টেক্সচার) থেকে নির্ধারণ করা যেতে পারে।

Image Data প্রিপ্রসেসিং:

  1. Resizing: অধিকাংশ মডেল নির্দিষ্ট আকারের চিত্র প্রয়োজন, তাই চিত্রগুলোকে নির্দিষ্ট আকারে রিসাইজ করা হয়।
  2. Normalization: চিত্রের পিক্সেল মানকে 0 থেকে 1 এর মধ্যে আনতে normalization করা হয়।
  3. Augmentation: ডেটাসেটে বৈচিত্র্য বাড়ানোর জন্য ডেটা অ্যাগমেন্টেশন ব্যবহার করা হয় (যেমন, রোটেশন, ফ্লিপ, স্কেল)।

PyTorch দিয়ে Image Data লোডিং এবং প্রিপ্রসেসিং:

PyTorch এ torchvision লাইব্রেরি ব্যবহার করে চিত্র ডেটা লোড এবং প্রিপ্রসেস করা যেতে পারে।

import torch
from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# ডেটা প্রিপ্রসেসিং (Resizing, Normalization)
transform = transforms.Compose([
    transforms.Resize((224, 224)),              # রিসাইজিং
    transforms.ToTensor(),                      # টেনসর ফরম্যাটে কনভার্ট করা
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])  # নরমালাইজেশন
])

# চিত্র ডেটাসেট লোড করা (উদাহরণস্বরূপ CIFAR-10)
train_dataset = datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True)

# চিত্র ডেটা লোড এবং প্রিন্ট করা
for images, labels in train_loader:
    print(images.shape, labels.shape)
    break  # প্রথম ব্যাচ দেখানোর জন্য

মডেল নির্বাচন (Image Classification):

Image classification এর জন্য আপনি পূর্ব প্রশিক্ষিত মডেল ব্যবহার করতে পারেন, যেমন ResNet, VGG16, Inception ইত্যাদি। Transfer Learning এর মাধ্যমে পূর্ব প্রশিক্ষিত মডেলগুলি দ্রুত এবং কার্যকরীভাবে নতুন টাস্কে কাজ করতে পারে।

import torchvision.models as models
import torch.optim as optim
import torch.nn as nn

# ResNet18 মডেল লোড করা (pre-trained)
model = models.resnet18(pretrained=True)

# মডেলটির শেষ লেয়ার পরিবর্তন করা (for binary classification)
model.fc = nn.Linear(model.fc.in_features, 2)

# Optimizer এবং Loss Function
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.CrossEntropyLoss()

# মডেল প্রশিক্ষণ শুরু করা

২. Text ডেটা নিয়ে কাজ

Text Data হল ডেটা যেখানে ইনপুটটি সাধারণত শব্দ বা বাক্য হিসেবে থাকে। টেক্সট ডেটার সাথে কাজ করার জন্য প্রধানত NLP (Natural Language Processing) প্রযুক্তি ব্যবহৃত হয়।

Text Data প্রিপ্রসেসিং:

  1. Tokenization: টেক্সটকে শব্দ বা সাব-ওয়ার্ড টোকেনে ভাগ করা হয়।
  2. Stopwords Removal: অনাবশ্যক শব্দ (যেমন: "the", "is", "and") সরিয়ে ফেলা হয়।
  3. Stemming / Lemmatization: শব্দের মূল রূপে রূপান্তর করা হয় (যেমন, "running" কে "run" এ রূপান্তর করা)।
  4. Vectorization: টেক্সট ডেটাকে সংখ্যায় রূপান্তর করা হয়। এটি সাধারণত Word Embedding বা Bag-of-Words পদ্ধতিতে করা হয়।

PyTorch দিয়ে Text Data লোডিং এবং প্রিপ্রসেসিং:

import torch
from torchtext.data.utils import get_tokenizer
from torchtext.datasets import IMDB
from torchtext.data import Field, BucketIterator

# Tokenizer তৈরি করা
tokenizer = get_tokenizer('basic_english')

# Text এবং Label এর জন্য Field সেটআপ
TEXT = Field(sequential=True, tokenize=tokenizer, include_lengths=True)
LABEL = Field(sequential=False, use_vocab=True)

# IMDB ডেটাসেট লোড করা
train_data, test_data = IMDB.splits(TEXT, LABEL)

# টেক্সট ভোকাবুলারি তৈরি করা
TEXT.build_vocab(train_data, max_size=10000, vectors="glove.6B.100d", unk_init=torch.Tensor.normal_)

# ডেটা লোডার
train_iterator, test_iterator = BucketIterator.splits(
    (train_data, test_data),
    batch_size=32,
    device=torch.device('cuda' if torch.cuda.is_available() else 'cpu')
)

RNN / LSTM / GRU মডেল (Text Classification):

import torch.nn as nn

class RNN_Model(nn.Module):
    def __init__(self, input_dim, embedding_dim, hidden_dim, output_dim):
        super(RNN_Model, self).__init__()
        self.embedding = nn.Embedding(input_dim, embedding_dim)
        self.rnn = nn.RNN(embedding_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)
    
    def forward(self, text, text_lengths):
        embedded = self.embedding(text)
        packed_embedded = nn.utils.rnn.pack_padded_sequence(embedded, text_lengths, batch_first=True, enforce_sorted=False)
        packed_output, hidden = self.rnn(packed_embedded)
        return self.fc(hidden.squeeze(0))

# মডেল সেটআপ
input_dim = len(TEXT.vocab)
embedding_dim = 100
hidden_dim = 256
output_dim = 1  # বাইনারি ক্লাসিফিকেশন

model = RNN_Model(input_dim, embedding_dim, hidden_dim, output_dim)

মডেল প্রশিক্ষণ এবং মূল্যায়ন:

import torch.optim as optim

# Optimizer এবং Loss Function
optimizer = optim.Adam(model.parameters(), lr=0.001)
criterion = nn.BCEWithLogitsLoss()

# প্রশিক্ষণ লুপ
model.train()
for batch in train_iterator:
    text, text_lengths = batch.text
    labels = batch.label
    optimizer.zero_grad()
    predictions = model(text, text_lengths)
    loss = criterion(predictions.squeeze(1), labels.float())
    loss.backward()
    optimizer.step()

৩. Image এবং Text ডেটার সংমিশ্রণ

ধরা যাক, আপনি এমন একটি অ্যাপ্লিকেশন তৈরি করতে চান যেখানে ছবি এবং টেক্সট উভয় ডেটা একসাথে ব্যবহার করা হবে (যেমন, ছবি বর্ণনা তৈরি করা বা ছবি সম্পর্কিত টেক্সট বিশ্লেষণ করা)। এই ধরনের কাজের জন্য সাধারণত Multimodal Learning ব্যবহৃত হয়, যেখানে ছবি এবং টেক্সট উভয়ই প্রক্রিয়া করা হয়।

Image এবং Text Data Integration উদাহরণ:

  1. Image ডেটা প্রথমে একটি CNN মডেল ব্যবহার করে ফিচার এক্সট্র্যাক্ট করা হয়।
  2. তারপর সেই ফিচারকে Text মডেলের (যেমন LSTM বা Transformer) ইনপুট হিসেবে দেওয়া হয়।
import torch
import torch.nn as nn

# Image Feature Extractor (CNN Model)
class CNN_Model(nn.Module):
    def __init__(self):
        super(CNN_Model, self).__init__()
        self.resnet = models.resnet18(pretrained=True)
        self.resnet.fc = nn.Linear(self.resnet.fc.in_features, 256)
    
    def forward(self, x):
        return self.resnet(x)

# Text Feature Extractor (LSTM Model)
class Text_Model(nn.Module):
    def __init__(self, input_dim, embedding_dim, hidden_dim, output_dim):
        super(Text_Model, self).__init__()
        self.embedding = nn.Embedding(input_dim, embedding_dim)
        self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True)
        self.fc = nn.Linear(hidden_dim, output_dim)
    
    def forward(self, text):
        embedded = self.embedding(text)
        output, (hn, cn) = self.lstm(embedded)
        return self.fc(hn[-1])

# Combined Model (Multimodal)
class MultimodalModel(nn.Module):
    def __init__(self, image_model, text_model):
        super(MultimodalModel, self).__init__()
        self.image_model = image_model
        self.text_model = text_model
        self.fc = nn.Linear(256 + 256, 1)  # Combined features
    
    def forward(self, image, text):
        image_features = self.image_model(image)
        text_features = self.text_model(text)
        combined = torch.cat((image_features, text_features), dim=1)
        return self.fc(combined)

# মডেল তৈরি
image_model = CNN_Model()
text_model = Text_Model(input_dim=10000, embedding_dim=100, hidden_dim=256, output_dim=256)
model = MultimodalModel(image_model, text_model)

সারাংশ

  • Image Data এবং Text Data দুটি গুরুত্বপূর্ণ ডেটা টাইপ এবং PyTorch বা অন্য ডিপ লার্নিং লাইব্রেরি ব্যবহার করে সহজেই তাদের সাথে কাজ করা যায়।
  • Image Data প্রিপ্রসেসিংয়ের জন্য সাধারণত torchvision লাইব্রেরি ব্যবহৃত হয় এবং Text Data প্রিপ্রসেসিংয়ের জন্য torchtext ব্যবহার করা যায়।
  • Multimodal Learning ব্যবহার করে ছবি ও টেক্সট ডেটার সংমিশ্রণ ঘটিয়ে আরও উন্নত অ্যাপ্লিকেশন তৈরি করা যেতে পারে।
Content added By
Promotion

Are you sure to start over?

Loading...