Datasets¶
Every dataset takes the dataset root and a split and discovers its
scenarios internally. Datasets built from the same root/split (and
clip_len/stride) align index-for-index: dataset_a[i] and
dataset_b[i] refer to the same scenario and timestep window. Every
dataset returns a time dimension T even when clip_len=1.
Camera¶
- class carlanomaly.datasets.RGBDataset(root=None, split='train', direction='front', *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
AtomicDatasetPer-timestep RGB images from a single camera.
Returns a
FloatTensor (T, 3, H, W)in[0, 1].With
download=Truethe required archive parts are fetched intoroot(frontlives inbase; other directions addcamera-extended). Remaining keyword arguments (clip_len,stride,parts, …) are forwarded toScenarioIndex.- Parameters:
root (Optional[PathLike])
split (str)
direction (str)
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
- class carlanomaly.datasets.SegmentationDataset(root=None, split='train', direction='front', *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
AtomicDatasetPer-timestep instance segmentation masks from a single camera.
- Returns a dict with:
'semantic':LongTensor (T, H, W)of CARLA class ids (1-28,non-contiguous).
'instance':LongTensor (T, H, W)of instance ids(green * 256 + blue channel of the RGBA mask).
With
download=Truethe required archive parts are fetched intoroot(frontlives inbase; other directions addcamera-extended). Remaining keyword arguments (clip_len,stride,parts, …) are forwarded toScenarioIndex.- Parameters:
root (Optional[PathLike])
split (str)
direction (str)
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
- class carlanomaly.datasets.DepthDataset(root=None, split='train', direction='front', *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
AtomicDatasetPer-timestep log-encoded depth maps from a single camera.
Returns a
FloatTensor (T, 1, H, W)in[0, 1](uint8 / 255).Depth maps live in the
depthpart; withdownload=Trueit (plus thebasepart) is fetched intoroot. Remaining keyword arguments (clip_len,stride,parts, …) are forwarded toScenarioIndex.- Parameters:
root (Optional[PathLike])
split (str)
direction (str)
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
LiDAR¶
- class carlanomaly.datasets.PointCloudDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep LiDAR point clouds.
Returns a
List[pd.DataFrame]of length T. Each DataFrame has columns: x, y, z, cos_inc_angle, object_id, object_tag.With
download=Truethelidarpart (plusbase) is fetched intoroot.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
Anomaly labels¶
Ground-truth labels for every evaluation level: per-pixel masks and per-point labels (sample level), per-sensor-reading labels (sensor level), per-timestep labels (timestep level), and per-scenario labels (scenario level). The evaluators load these labels themselves; these datasets exist for inspection, visualisation, and custom evaluation.
- class carlanomaly.datasets.AnomalySegmentationDataset(root=None, split='train', direction='front', *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
AtomicDatasetPer-timestep pixel-level anomaly masks from a single camera.
Returns a
BoolTensor (T, H, W). For the train split (where no anomaly masks exist), returns all-False tensors.With
download=Truethe required archive parts are fetched intoroot(frontlives inbase; other directions addcamera-extended). Remaining keyword arguments (clip_len,stride,parts, …) are forwarded toScenarioIndex.- Parameters:
root (Optional[PathLike])
split (str)
direction (str)
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
- class carlanomaly.datasets.AnomalyLiDARDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep, per-point LiDAR anomaly labels.
Returns a
List[BoolTensor]of length T. Each tensor has shape(N_points,)matching the corresponding point cloud. For the train split, returns all-False tensors sized to match the actual point cloud.With
download=Truethelidarpart (plusbase) is fetched intoroot.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
- class carlanomaly.datasets.AnomalySensorDataset(*args, sensor='front', **kwargs)[source]¶
Bases:
AtomicDatasetSensor-level anomaly labels for one sensor (one label per timestep).
Returns a
BoolTensor (T,)marking whether the anomaly is visible in this specific sensor at each timestep. Labels are stored on disk asanomaly-{sensor}/sensor.feather. For the train split (where no label file exists), returns all-False.- Parameters:
sensor – Any sensor name (
"front","left","right","rear","lidar").- Parameters:
args (Any)
sensor (str)
kwargs (Any)
- class carlanomaly.datasets.AnomalyTimestepDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetTimestep-level anomaly labels (one label per timestep).
Returns a
BoolTensor (T,). Labels are stored on disk asanomaly-observation.feather. For the train split (where no label file exists), returns all-False.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
- class carlanomaly.datasets.AnomalyScenarioDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetScenario-level anomaly labels (one label per scenario).
Returns a scalar
BoolTensor:Trueiff the item’s scenario is an anomaly scenario. The label is derived from the scenario’s location in the dataset layout (test/anomaly/vstest/normal/); no label file is read. Unlike the per-timestep datasets, the returned tensor has no time dimension: the label applies to the scenario as a whole.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
Tabular¶
- class carlanomaly.datasets.WeatherDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep weather parameters.
Returns a
FloatTensor (T, 14)with columns: cloudiness, precipitation, sun_altitude_angle, sun_azimuth_angle, fog_density, fog_distance, fog_falloff, precipitation_deposits, wind_intensity, wetness, scattering_intensity, mie_scattering_scale, rayleigh_scattering_scale, dust_storm.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
- class carlanomaly.datasets.GNSSDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep GNSS position.
Returns a
FloatTensor (T, 3)with columns: altitude, latitude, longitude.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
- class carlanomaly.datasets.IMUDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep inertial measurement unit readings.
Returns a
FloatTensor (T, 7)with columns: acceleration_x, acceleration_y, acceleration_z (m/s²), compass (heading in radians, clockwise from north), longitude_x, longitude_y, longitude_z.Despite their name, the
longitude_*columns hold the gyroscope’s angular velocity around the x, y and z axes in rad/s: the generator wrote CARLA’sIMUMeasurement.gyroscopeunder that name. They are kept as stored inimu.feather.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
- class carlanomaly.datasets.ActionsDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep ego-vehicle control actions.
Returns a
FloatTensor (T, 7)with columns: throttle, steer, brake, hand_brake, reverse, manual_gear_shift, gear. Boolean columns are cast to float.- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
- class carlanomaly.datasets.CollisionsDataset(root=None, split='train', *, clip_len=1, stride=None, anomaly_types=None, towns=None, download=False, parts=None, download_verify=True, direction=None, transform=None, index=None)[source]¶
Bases:
AtomicDatasetPer-timestep collision events (sparse).
Returns a
List[pd.DataFrame]of length T. Each DataFrame contains zero or more rows with columns: ego_id, ego_type, other_id, other_type, normal_impulse_x, normal_impulse_y, normal_impulse_z, normal_impulse_norm. Most timesteps have no collisions (empty DataFrame).- Parameters:
root (Optional[PathLike])
split (str)
clip_len (int)
stride (Optional[int])
anomaly_types (Optional[Sequence[str]])
towns (Optional[Sequence[str]])
download (bool)
parts (Optional[Sequence[str]])
download_verify (bool)
direction (Optional[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
Composite¶
Composite datasets return dicts that already include the evaluator
identifiers scenario_id and timesteps.
- class carlanomaly.datasets.CameraDataset(root=None, split='train', direction='front', *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
DatasetComposite dataset for a single camera direction.
Wraps
RGBDataset,DepthDataset,SegmentationDataset, andAnomalySegmentationDataset.Returns a dict with keys
'rgb','depth','segmentation'(sub-dict with'semantic'and'instance'), and'anomaly_mask', plus the evaluator identifiers'scenario_id'and'timesteps'.- Parameters:
root – Path to the CarlAnomaly dataset directory.
split –
'train','test_normal','test_anomaly', or'test'.direction – Camera direction (
'front','left','right','rear').transform – Optional transform applied to the merged output dict.
download – If
True, fetch the archive parts this composite needs (base+depth, pluscamera-extendedfor non-front directions) intorootbefore loading. By default (False) the parts must already be there; a missing part raisesFileNotFoundErrorwith download instructions.Additional keyword arguments (``clip_len``, ``stride``, ``parts``, …)
are forwarded to :class:`~carlanomaly.index.ScenarioIndex`.
- Parameters:
root (Optional[PathLike])
split (str)
direction (str)
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
- property index: ScenarioIndex¶
The
ScenarioIndexthis dataset is built on (shareable).
- class carlanomaly.datasets.LiDARDataset(root=None, split='train', *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
DatasetComposite dataset for LiDAR point clouds with anomaly labels.
Wraps
PointCloudDatasetandAnomalyLiDARDataset.Returns a dict with keys
'points'(List[DataFrame]) and'anomaly_lidar'(List[BoolTensor]), plus the evaluator identifiers'scenario_id'and'timesteps'.- Parameters:
root – Path to the CarlAnomaly dataset directory.
split –
'train','test_normal','test_anomaly', or'test'.transform – Optional transform applied to the merged output dict.
download – If
True, fetch the archive parts this composite needs (base+lidar) intorootbefore loading. By default (False) the parts must already be there; a missing part raisesFileNotFoundErrorwith download instructions.Additional keyword arguments (``clip_len``, ``stride``, ``parts``, …)
are forwarded to :class:`~carlanomaly.index.ScenarioIndex`.
- Parameters:
root (Optional[PathLike])
split (str)
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
- property index: ScenarioIndex¶
The
ScenarioIndexthis dataset is built on (shareable).
- class carlanomaly.datasets.CarlAnomalyDataset(root=None, split='train', cameras=('front', 'left', 'right', 'rear'), *, transform=None, index=None, download=False, **index_kwargs)[source]¶
Bases:
DatasetJoint dataset wrapping all modalities and all cameras.
Returns a dict with prefixed camera keys (
front_rgb,left_depth, etc.) plus tabular, LiDAR, and timestep-label entries.Use
carlanomaly_collate_fn()as the DataLoadercollate_fn.- Parameters:
root – Path to the CarlAnomaly dataset directory.
split –
'train','test_normal','test_anomaly', or'test'.cameras – Camera directions to include. Defaults to all four.
transform – Optional transform applied to the merged output dict.
download – If
True, fetch every archive part this joint dataset needs (base,depth,lidar, pluscamera-extendedwhen any non-front camera is included) intorootbefore loading. By default (False) the parts must already be there; a missing part raisesFileNotFoundErrorwith download instructions.Additional keyword arguments (``clip_len``, ``stride``, ``parts``, …)
are forwarded to :class:`~carlanomaly.index.ScenarioIndex`.
- Parameters:
root (Optional[PathLike])
split (str)
cameras (Sequence[str])
transform (Optional[Callable])
index (Optional[ScenarioIndex])
download (bool)
index_kwargs (Any)
- property index: ScenarioIndex¶
The
ScenarioIndexthis dataset is built on (shareable).
- carlanomaly.datasets.carlanomaly_collate_fn(batch)[source]¶
Custom collate function for
CarlAnomalyDataset.Stacks
torch.Tensorvalues along a new batch dimension.Keeps
List,str,None, andpd.DataFramevalues as plain Python lists.Recurses into dicts.
Utilities¶
- class carlanomaly.datasets.WithIdentifiers(dataset)[source]¶
Bases:
DatasetAttach evaluator identifiers to any CarlAnomaly dataset’s items.
Wraps a dataset and returns
{"data": <wrapped item>, "scenario_id": str, "timesteps": LongTensor (T,)}, so that aDataLoaderbatch carries everything the evaluators need (see the evaluation guide). Works with every atomic and composite CarlAnomaly dataset:rgb = WithIdentifiers(RGBDataset(root, split="test")) item = rgb[0] item["data"] # what RGBDataset(...)[0] would have returned item["scenario_id"] # str, e.g. ".../test/normal/Town10HD/scenario-3" item["timesteps"] # LongTensor (T,)
When the wrapped dataset returns non-tensor values (point clouds, collision DataFrames), use
carlanomaly_collate_fn()as the DataLoadercollate_fn.- Parameters:
dataset (Dataset)
- property index: ScenarioIndex¶