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: background1: person2: 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 validationdataloaders[1]uses fold 1 as validationdataloaders[2]uses fold 2 as validationdataloaders[3]uses fold 3 as validationdataloaders[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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0678f715012e16146c1a6c974073cfcd3313e2bfa07e27e2267eaed90de9821c
|
|
| MD5 |
d777fcd7ec73372f15dd7ee059ea7396
|
|
| BLAKE2b-256 |
db2b1717338ad52cf34fccc941d45a4c3340862e2b80a32015e62c9ac445e22c
|
File details
Details for the file mirc_dataset_handler-0.2.3-py3-none-any.whl.
File metadata
- Download URL: mirc_dataset_handler-0.2.3-py3-none-any.whl
- Upload date:
- Size: 11.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
feafb31fb5703f40e0cb5186b4daa0ace7da4e5d6cefe0a3c9e1f43f8c3a87ec
|
|
| MD5 |
7987b7aefa9e715536c73753aa99b181
|
|
| BLAKE2b-256 |
6e02aa84e034cc2dfb010914843a18f37917f7068544971fba0505adffefd977
|