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)

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.1.0.tar.gz (6.8 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.1.0-py3-none-any.whl (7.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mirc_dataset_handler-0.1.0.tar.gz
  • Upload date:
  • Size: 6.8 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.1.0.tar.gz
Algorithm Hash digest
SHA256 b6f1444b93531734fc8ff8ed35c2807aa892f48869f142c40105c39cbac2300c
MD5 bbc13d3d1248d629656587b33343f0e7
BLAKE2b-256 edf491bf2ddf8aecad1cbbe3e6ef561af5d58ef9bcdd1be6c037bc579800cfb2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mirc_dataset_handler-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c460ec802d44b4b54327144002dcac6b95385becea8ac9134d655a111ddcf26b
MD5 24de6a2ca59b51c52ee4c094d0217d2b
BLAKE2b-256 daffeeb3ed349d29daeda388852b3ba6d559d572ec9ba4dc58e58f7e588f86da

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