Custom Dataset দিয়ে Object Detection মডেল Training

Caffe2 তে Object Detection এবং Segmentation - ক্যাফে২ (Caffe2) - Machine Learning

320

Object detection মডেল তৈরিতে custom dataset ব্যবহার করা বেশ সাধারণ এবং প্রক্রিয়াটি বেশ কয়েকটি ধাপে বিভক্ত। এখানে আমি PyTorch ও Detectron2 লাইব্রেরি ব্যবহার করে একটি object detection মডেল ট্রেনিংয়ের ধাপগুলো দেখাবো। Detectron2 হল Facebook AI Research (FAIR) এর একটি অত্যন্ত শক্তিশালী লাইব্রেরি যা object detection, instance segmentation, এবং keypoint detection কাজগুলো করতে পারে।

1. Custom Dataset তৈরি করা

Object detection ডেটাসেট সাধারণত image এবং তার সাথে সংশ্লিষ্ট bounding box (যেখানে object রয়েছে) লেবেলগুলো থাকে। আপনি JSON ফর্ম্যাটে COCO বা Pascal VOC স্টাইলের লেবেল ব্যবহার করতে পারেন।

Custom Dataset Format (COCO Format)

COCO ফরম্যাটে ডেটাসেটের জন্য, একটি annotations.json ফাইল থাকবে যেখানে ইমেজের সাথে bounding box এবং object class লেবেল থাকবে।

Sample JSON structure:

{
  "images": [
    {
      "id": 1,
      "file_name": "image1.jpg",
      "height": 640,
      "width": 480
    },
    {
      "id": 2,
      "file_name": "image2.jpg",
      "height": 640,
      "width": 480
    }
  ],
  "annotations": [
    {
      "image_id": 1,
      "category_id": 1,
      "bbox": [x, y, width, height],
      "area": area,
      "iscrowd": 0
    },
    {
      "image_id": 2,
      "category_id": 2,
      "bbox": [x, y, width, height],
      "area": area,
      "iscrowd": 0
    }
  ],
  "categories": [
    {
      "id": 1,
      "name": "cat"
    },
    {
      "id": 2,
      "name": "dog"
    }
  ]
}

2. PyTorch এবং Detectron2 ইনস্টলেশন

আপনার সিস্টেমে Detectron2 ইনস্টল করতে হবে। প্রথমে PyTorch ইনস্টল করুন, তারপর Detectron2 ইনস্টল করুন।

# Install PyTorch
pip install torch torchvision torchaudio

# Install Detectron2
pip install detectron2

3. Dataset প্রিপ্রসেসিং (Dataset Registration)

Detectron2 এ custom dataset ব্যবহার করার জন্য, আপনাকে ডেটাসেট রেজিস্টার করতে হবে। এটা করার জন্য আপনি DatasetCatalog এবং MetadataCatalog ব্যবহার করবেন।

import os
import json
from detectron2.data import DatasetCatalog, MetadataCatalog
from detectron2.structures import BoxMode

def load_custom_json(json_file, image_root):
    with open(json_file) as f:
        dataset_dicts = []
        dataset = json.load(f)

        for image_info in dataset['images']:
            record = {}
            filename = os.path.join(image_root, image_info['file_name'])
            height, width = image_info['height'], image_info['width']

            record["file_name"] = filename
            record["height"] = height
            record["width"] = width
            record["image_id"] = image_info["id"]

            annotations = []
            for ann in dataset['annotations']:
                if ann['image_id'] == image_info['id']:
                    obj = {
                        "bbox": ann['bbox'],
                        "bbox_mode": BoxMode.XYWH_ABS,
                        "category_id": ann['category_id'],
                        "iscrowd": ann['iscrowd']
                    }
                    annotations.append(obj)

            record["annotations"] = annotations
            dataset_dicts.append(record)

        return dataset_dicts

# Register dataset
def register_custom_dataset(name, json_file, image_root):
    DatasetCatalog.register(name, lambda: load_custom_json(json_file, image_root))
    MetadataCatalog.get(name).set(thing_classes=["cat", "dog"])  # Adjust with your categories

register_custom_dataset("custom_train", "path_to_train_annotations.json", "path_to_train_images")
register_custom_dataset("custom_val", "path_to_val_annotations.json", "path_to_val_images")

4. Detectron2 Configuration সেট করা

আপনি যে pre-trained মডেলটি ব্যবহার করবেন তার কনফিগারেশন সেট করতে হবে। এখানে আমি Mask R-CNN মডেলটি ব্যবহার করছি, কিন্তু আপনি অন্যান্য মডেলও ব্যবহার করতে পারেন।

from detectron2.engine import DefaultTrainer
from detectron2.config import get_cfg
from detectron2 import model_zoo

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.DATASETS.TRAIN = ("custom_train",)
cfg.DATASETS.TEST = ("custom_val",)
cfg.DATALOADER.NUM_WORKERS = 4
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 2  # Number of classes (adjust based on your dataset)
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Detection/mask_rcnn_R_50_FPN_3x.yaml")  # Pretrained weights
cfg.SOLVER.IMS_PER_BATCH = 16
cfg.SOLVER.BASE_LR = 0.00025
cfg.SOLVER.MAX_ITER = 5000
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # Set the score threshold for detection
cfg.OUTPUT_DIR = "./output"

5. মডেল ট্রেনিং

এখন, মডেলটি ট্রেন করার জন্য DefaultTrainer ব্যবহার করতে পারবেন।

# Training the model
trainer = DefaultTrainer(cfg)
trainer.resume_or_load(resume=False)
trainer.train()

6. মডেল টেস্ট করা (Evaluation)

মডেল ট্রেনিং শেষে, এটি ভ্যালিডেশন ডেটাসেটে টেস্ট করা যায়।

from detectron2.engine import DefaultPredictor
from detectron2.utils.visualizer import Visualizer
from detectron2.data import MetadataCatalog

# Create a predictor using the best model weights
cfg.MODEL.WEIGHTS = "./output/model_final.pth"
predictor = DefaultPredictor(cfg)

# Test the model on an image
im = cv2.imread("path_to_test_image.jpg")
outputs = predictor(im)

# Visualize the result
v = Visualizer(im[:, :, ::-1], MetadataCatalog.get("custom_train"), scale=0.8)
v = v.draw_instance_predictions(outputs["instances"].to("cpu"))
cv2.imshow("Prediction", v.get_image()[:, :, ::-1])
cv2.waitKey(0)

7. ফাইনাল মডেল সেভ করা

আপনি মডেলটির শেষ আউটপুট সেভ করতে পারেন।

# Save the final model after training
torch.save(trainer.model.state_dict(), "model_final.pth")

সারাংশ:

  • Custom dataset দিয়ে object detection মডেল ট্রেন করার জন্য, আপনি প্রথমে ডেটাসেট প্রস্তুত করবেন এবং তারপরে Detectron2 এর মাধ্যমে মডেল রেজিস্টার করবেন।
  • COCO ফরম্যাট বা Pascal VOC স্টাইলের লেবেল ফাইল ব্যবহার করে আপনি ডেটা লোড করবেন এবং মডেল কনফিগারেশন সেট করবেন।
  • তারপর, আপনি Detectron2 এর DefaultTrainer ব্যবহার করে মডেলটি ট্রেন করবেন এবং শেষে টেস্ট ডেটাসেটে মডেলটির কার্যকারিতা পরীক্ষা করবেন।

এটি object detection মডেল ট্রেনিংয়ের একটি সাধারণ প্রক্রিয়া যা custom dataset ব্যবহার করে বাস্তবায়ন করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...