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.2.3.tar.gz (9.6 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.2.3-py3-none-any.whl (11.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mirc_dataset_handler-0.2.3.tar.gz
  • Upload date:
  • Size: 9.6 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.2.3.tar.gz
Algorithm Hash digest
SHA256 0678f715012e16146c1a6c974073cfcd3313e2bfa07e27e2267eaed90de9821c
MD5 d777fcd7ec73372f15dd7ee059ea7396
BLAKE2b-256 db2b1717338ad52cf34fccc941d45a4c3340862e2b80a32015e62c9ac445e22c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mirc_dataset_handler-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 feafb31fb5703f40e0cb5186b4daa0ace7da4e5d6cefe0a3c9e1f43f8c3a87ec
MD5 7987b7aefa9e715536c73753aa99b181
BLAKE2b-256 6e02aa84e034cc2dfb010914843a18f37917f7068544971fba0505adffefd977

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