Avenue Datamodule

Avenue Datamodule#

CUHK Avenue Data Module.

This module provides a PyTorch Lightning DataModule for the CUHK Avenue dataset. If the dataset is not already present on the file system, the DataModule class will download and extract the dataset, converting the .mat mask files to .png format.

Example

Create an Avenue datamodule:

>>> from anomalib.data import Avenue
>>> datamodule = Avenue(
...     root="./datasets/avenue",
...     clip_length_in_frames=2,
...     frames_between_clips=1,
... )
>>> datamodule.setup()
>>> i, data = next(enumerate(datamodule.train_dataloader()))
>>> data.keys()
dict_keys(['image', 'video_path', 'frames', 'last_frame', 'original_image'])

Notes

The directory structure after preparation will be:

root/
├── ground_truth_demo/
│   ├── ground_truth_show.m
│   ├── Readme.txt
│   ├── testing_label_mask/
│   └── testing_videos/
├── testing_videos/
│   ├── ...
│   └── 21.avi
├── testing_vol/
│   ├── ...
│   └── vol21.mat
├── training_videos/
│   ├── ...
│   └── 16.avi
└── training_vol/
    ├── ...
    └── vol16.mat
License:

The CUHK Avenue dataset is released for academic research only. For licensing details, see the original dataset website.

Reference:

Lu, Cewu, Jianping Shi, and Jiaya Jia. “Abnormal event detection at 150 fps in Matlab.” In Proceedings of the IEEE International Conference on Computer Vision, 2013.

class anomalib.data.datamodules.video.avenue.Avenue(root='./datasets/avenue', gt_dir='./datasets/avenue/ground_truth_demo', clip_length_in_frames=2, frames_between_clips=1, target_frame=VideoTargetFrame.LAST, train_batch_size=32, eval_batch_size=32, num_workers=8, train_augmentations=None, val_augmentations=None, test_augmentations=None, augmentations=None, val_split_mode=ValSplitMode.SAME_AS_TEST, val_split_ratio=0.5, seed=None)#

Bases: AnomalibVideoDataModule

Avenue DataModule class.

Parameters:
  • root (Path | str) – Path to the root of the dataset. Defaults to "./datasets/avenue".

  • gt_dir (Path | str) – Path to the ground truth files. Defaults to "./datasets/avenue/ground_truth_demo".

  • clip_length_in_frames (int) – Number of video frames in each clip. Defaults to 2.

  • frames_between_clips (int) – Number of frames between consecutive clips. Defaults to 1.

  • target_frame (VideoTargetFrame | str) – Target frame in clip for ground truth. Defaults to VideoTargetFrame.LAST.

  • train_batch_size (int) – Training batch size. Defaults to 32.

  • eval_batch_size (int) – Test batch size. Defaults to 32.

  • num_workers (int) – Number of workers. Defaults to 8.

  • train_augmentations (Transform | None) – Augmentations to apply dto the training images Defaults to None.

  • val_augmentations (Transform | None) – Augmentations to apply to the validation images. Defaults to None.

  • test_augmentations (Transform | None) – Augmentations to apply to the test images. Defaults to None.

  • augmentations (Transform | None) – General augmentations to apply if stage-specific augmentations are not provided.

  • val_split_mode (ValSplitMode | str) – How validation subset is obtained. Defaults to ValSplitMode.SAME_AS_TEST.

  • val_split_ratio (float) – Fraction of data reserved for validation. Defaults to 0.5.

  • seed (int | None) – Seed for reproducibility. Defaults to None.

Example

Create a dataloader for classification:

>>> datamodule = Avenue(
...     clip_length_in_frames=2,
...     frames_between_clips=1,
...     target_frame=VideoTargetFrame.LAST
... )
>>> datamodule.setup()
>>> i, data = next(enumerate(datamodule.train_dataloader()))
>>> data["image"].shape
torch.Size([32, 2, 3, 256, 256])

Notes

The dataloader returns batches of clips, where each clip contains clip_length_in_frames consecutive frames. frames_between_clips determines frame spacing between clips. target_frame specifies which frame provides ground truth.

prepare_data()#

Download the dataset if not available.

This method checks if the specified dataset is available in the file system. If not, it downloads and extracts the dataset into the appropriate directory.

Return type:

None

Example

Assume the dataset is not available on the file system:

>>> datamodule = Avenue()
>>> datamodule.prepare_data()

The directory structure after preparation will be:

datasets/
└── avenue/
    ├── ground_truth_demo/
    │   ├── ground_truth_show.m
    │   ├── Readme.txt
    │   ├── testing_label_mask/
    │   └── testing_videos/
    ├── testing_videos/
    │   ├── ...
    │   └── 21.avi
    ├── testing_vol/
    │   ├── ...
    │   └── vol21.mat
    ├── training_videos/
    │   ├── ...
    │   └── 16.avi
    └── training_vol/
        ├── ...
        └── vol16.mat