Skip to main content

Utilities for loading MIRC annotations, creating subject-aware cross-validation splits, and building PyTorch DataLoaders for semantic segmentation workflows.

Project description

mirc-dataset-handler

Utilities for loading, organizing, splitting, and creating PyTorch DataLoaders for the MIRC dataset.

Features

  • Recursive loading of polygon annotations from JSON files
  • Compact in-memory annotation structure
  • Subject-aware cross-validation split
  • Fold-based PyTorch DataLoader creation
  • Support for semantic masks with classes:
    • 0: background
    • 1: person
    • 2: robot

Repository Structure

mirc-dataset-handler/
├── mircdataset/
│   ├── __init__.py
│   ├── data_utils.py
│   └── mirc_torch_dataset.py
├── README.md
├── pyproject.toml
└── LICENSE

Installation

Environment setup

For better environment setup, before installing the mirc-dataset-handler, please consider to create an environment in this way:

  • conda create -n test python=3.9
  • conda activate test
  • conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia

Local development

pip install -e .

From PyPI

pip install mirc-dataset-handler

Package Import

from mircdataset import data_utils

Expected Annotation Folder Layout

annotations/
└── multi-person/
    └── subject6/
        └── activity1/
            └── routine01_cam1/
                ├── frame_crop_cam1_000000.json
                ├── frame_crop_cam1_000015.json
                └── ...

Generated Key Format

Each loaded JSON is stored in a dictionary using the key format:

subjectid_activityid_routineid_camid_frameid

Example:

6_1_1_1_000000
6_1_1_1_000015

Stored Annotation Structure

Each key maps to a compact dictionary like:

{
    "objects": [
        {
            "label": "person",
            "points": [[x1, y1], [x2, y2], ...]
        },
        {
            "label": "robot",
            "points": [[x1, y1], [x2, y2], ...]
        }
    ],
    "image_height": 720,
    "image_width": 1280,
    "image_path": "/absolute/path/to/frame_crop_cam1_000000.jpg"
}

Basic Usage

from mircdataset import data_utils

root_folder = "/media/mirc-dataset/annotations/multi-person/"

dataset_masks = data_utils.load_dataset_masks(root_folder)

cv_dataset_masks = data_utils.split_dataset_by_subject_cross_validation(dataset_masks, k=5)

dataloaders = data_utils.create_dataloaders(cv_dataset_masks, batch_size=4)
from mircdataset import data_utils

or simply:

root_folder = "/media/mirc-dataset/annotations/multi-person/"

dataloaders = data_utils.create_dataloaders_pipeline(root_folder, k=5, batch_size=4)

Cross-Validation Behavior

The split is subject-aware, so subjects are never mixed between training and validation folds.

Example with subjects 1..9 and k=5:

fold 0: [1, 2]
fold 1: [3, 4]
fold 2: [5, 6]
fold 3: [7, 8]
fold 4: [9]

Example with subjects 1..6 and k=5:

fold 0: [1, 2]
fold 1: [3]
fold 2: [4]
fold 3: [5]
fold 4: [6]

DataLoader Output

Each sample returned by the dataset has the format:

{
    "image": torch.FloatTensor,
    "mask": torch.LongTensor
}

Expected shapes:

image -> [3, 256, 256]
mask  -> [256, 256]

Mask classes:

0 -> background
1 -> person
2 -> robot

Accessing a Fold

train_loader, val_loader = dataloaders[0]

If k=5, then:

  • dataloaders[0] uses fold 0 as validation
  • dataloaders[1] uses fold 1 as validation
  • dataloaders[2] uses fold 2 as validation
  • dataloaders[3] uses fold 3 as validation
  • dataloaders[4] uses fold 4 as validation

Inspecting a Batch

import matplotlib.pyplot as plt

train_loader, val_loader = dataloaders[0]

batch = next(iter(train_loader))

images = batch["image"]
masks = batch["mask"]

image = images[0].cpu().numpy().transpose(1, 2, 0)
mask = masks[0].cpu().numpy()

plt.figure(figsize=(10, 4))

plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title("Image")
plt.axis("off")

plt.subplot(1, 2, 2)
plt.imshow(mask, vmin=0, vmax=2)
plt.title("Mask")
plt.axis("off")

plt.tight_layout()
plt.show()

Main Public Functions

load_dataset_masks(root_folder)

Recursively loads all JSON annotation files and returns a compact dictionary indexed by:

subjectid_activityid_routineid_camid_frameid

split_dataset_by_subject_cross_validation(dataset_dict, k)

Splits the dataset into k subject-aware folds.

create_dataloaders(dataset_folds, batch_size=32, transform=None, mask_mode=None, num_workers=0, pin_memory=False)

Creates a list of (train_loader, val_loader) tuples for cross-validation.

Notes

  • Images are resized to 256x256
  • Masks are generated from polygons and rasterized at 256x256
  • Training DataLoaders use shuffle=True
  • Validation DataLoaders use shuffle=False
  • Subjects are never mixed across folds

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mirc_dataset_handler-0.3.0.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mirc_dataset_handler-0.3.0-py3-none-any.whl (22.5 kB view details)

Uploaded Python 3

File details

Details for the file mirc_dataset_handler-0.3.0.tar.gz.

File metadata

  • Download URL: mirc_dataset_handler-0.3.0.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for mirc_dataset_handler-0.3.0.tar.gz
Algorithm Hash digest
SHA256 03302686d2de2c63d4ca60974964b7e2a2198fa1bea4925361414b3112e95f95
MD5 23d5a9005722a8fe28fc9c102d375249
BLAKE2b-256 a96f8641ee98a6cb3e5e785f514dd93a2de4427de6fb3f6acebf12b7e5c21a85

See more details on using hashes here.

File details

Details for the file mirc_dataset_handler-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mirc_dataset_handler-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8c05c9611f61409fe09b015534598ed4e6d87248fc97ddac1877f5f8b26cdf64
MD5 da994cde4427ed67aa08004c885e45d7
BLAKE2b-256 7e86fbc37a5a5379f1ee3a52827aa78eabadbc7aa581dd200c16f5be22b612c0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page