KC-3D (Kinetics Change 3D) is a real-world indoor change detection dataset that pairs RGB images of the same scene captured from different viewpoints, together with depth maps, change-region masks, and ground-truth camera calibration data. It is used exclusively as a test benchmark for CYWS-3D — the loader exposes only the test split, making it straightforward to run evaluation without accidentally training on held-out data.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/ragavsachdeva/CYWS-3D/llms.txt
Use this file to discover all available pages before exploring further.
Download
Fetch the archive withwget and extract it into a local directory:
Structure
After extraction the dataset has the following layout:data_split.pkl is a pickled dictionary with "train", "val", and "test" keys. Each key maps to a list of scene descriptors. The KC3D loader indexes only into the test split, so the training scenes are never returned by __getitem__.
Depth maps are stored as floating-point .tiff files, one per view per scene. They share the spatial dimensions of the corresponding RGB images.
Camera parameter files (.npy) are named by joining the first three underscore-separated tokens of the image filename stem, e.g. scene_001_view.npy. Each file contains a dictionary with intrinsics, position, and rotation entries.
Change masks are single-channel .png files that mark the pixels belonging to changed objects. They are used to derive bounding-box annotations (target1, target2) returned by the loader.
KC-3D exposes only the test split at inference time. If you iterate over a
DataLoader built from KC3D, every sample belongs to the held-out test set, which makes the dataset suitable for rigorous, unbiased evaluation.Using the Dataset Loader
TheKC3D class lives in datasets/kc3d.py. Pass the path to the extracted directory and choose whether to load ground-truth camera registration data.
Batch Fields
The table below lists every key that may appear in a batch dictionary. Keys marked conditional are only present whenuse_ground_truth_registration=True.
| Field | Type / Shape | Description |
|---|---|---|
image1 | FloatTensor (B, C, H, W) | First RGB view, values in [0, 1] |
image2 | FloatTensor (B, C, H, W) | Second RGB view, values in [0, 1] |
depth1 | FloatTensor (B, H, W) | Depth map for image1, loaded from .tiff — conditional |
depth2 | FloatTensor (B, H, W) | Depth map for image2, loaded from .tiff — conditional |
intrinsics1 | FloatTensor (B, 3, 3) | Camera intrinsic matrix for view 1 — conditional |
intrinsics2 | FloatTensor (B, 3, 3) | Camera intrinsic matrix for view 2 — conditional |
position1 | FloatTensor (B, 3) | World-space camera position for view 1 — conditional |
position2 | FloatTensor (B, 3) | World-space camera position for view 2 — conditional |
rotation1 | FloatTensor (B, 3, 3) | Rotation matrix for view 1 — conditional |
rotation2 | FloatTensor (B, 3, 3) | Rotation matrix for view 2 — conditional |
target1 | list[list[float]] | Change bounding boxes for view 1, each as [x1, y1, x2, y2] |
target2 | list[list[float]] | Change bounding boxes for view 2, each as [x1, y1, x2, y2] |
registration_strategy | list[str] | Always "3d" for every KC-3D sample |
target1 and target2 are kept as plain Python lists (not stacked tensors) by collate_fn because the number of bounding boxes may differ between scenes. The registration_strategy list is similarly left un-stacked.