Source code for mmaction.datasets.base
# Copyright (c) OpenMMLab. All rights reserved.
from abc import ABCMeta
from typing import Callable, List, Optional, Union
import torch
from mmengine.dataset import BaseDataset
from mmaction.utils import ConfigType
[docs]class BaseActionDataset(BaseDataset, metaclass=ABCMeta):
"""Base class for datasets.
Args:
ann_file (str): Path to the annotation file.
pipeline (List[Union[dict, ConfigDict, Callable]]): A sequence of
data transforms.
data_prefix (dict or ConfigDict, optional): Path to a directory where
videos are held. Defaults to None.
test_mode (bool): Store True when building test or validation dataset.
Defaults to False.
multi_class (bool): Determines whether the dataset is a multi-class
dataset. Defaults to False.
num_classes (int, optional): Number of classes of the dataset, used in
multi-class datasets. Defaults to None.
start_index (int): Specify a start index for frames in consideration of
different filename format. However, when taking videos as input,
it should be set to 0, since frames loaded from videos count
from 0. Defaults to 0.
modality (str): Modality of data. Support ``RGB``, ``Flow``, ``Pose``,
``Audio``. Defaults to ``RGB``.
"""
def __init__(self,
ann_file: str,
pipeline: List[Union[ConfigType, Callable]],
data_prefix: Optional[ConfigType] = dict(prefix=''),
test_mode: bool = False,
multi_class: bool = False,
num_classes: Optional[int] = None,
start_index: int = 0,
modality: str = 'RGB',
**kwargs) -> None:
self.multi_class = multi_class
self.num_classes = num_classes
self.start_index = start_index
self.modality = modality
super().__init__(
ann_file,
pipeline=pipeline,
data_prefix=data_prefix,
test_mode=test_mode,
**kwargs)
[docs] def get_data_info(self, idx: int) -> dict:
"""Get annotation by index."""
data_info = super().get_data_info(idx)
data_info['modality'] = self.modality
data_info['start_index'] = self.start_index
if self.multi_class:
onehot = torch.zeros(self.num_classes)
onehot[data_info['label']] = 1.
data_info['label'] = onehot
return data_info