Source code for mmaction.datasets.activitynet_dataset
# Copyright (c) OpenMMLab. All rights reserved.
from typing import Callable, List, Optional, Union
import mmengine
from mmengine.fileio import exists
from mmaction.registry import DATASETS
from mmaction.utils import ConfigType
from .base import BaseActionDataset
[docs]@DATASETS.register_module()
class ActivityNetDataset(BaseActionDataset):
"""ActivityNet dataset for temporal action localization. The dataset loads
raw features and apply specified transforms to return a dict containing the
frame tensors and other information. The ann_file is a json file with
multiple objects, and each object has a key of the name of a video, and
value of total frames of the video, total seconds of the video, annotations
of a video, feature frames (frames covered by features) of the video, fps
and rfps. Example of a annotation file:
.. code-block:: JSON
{
"v_--1DO2V4K74": {
"duration_second": 211.53,
"duration_frame": 6337,
"annotations": [
{
"segment": [
30.025882995319815,
205.2318595943838
],
"label": "Rock climbing"
}
],
"feature_frame": 6336,
"fps": 30.0,
"rfps": 29.9579255898
},
"v_--6bJUbfpnQ": {
"duration_second": 26.75,
"duration_frame": 647,
"annotations": [
{
"segment": [
2.578755070202808,
24.914101404056165
],
"label": "Drinking beer"
}
],
"feature_frame": 624,
"fps": 24.0,
"rfps": 24.1869158879
},
...
}
Args:
ann_file (str): Path to the annotation file.
pipeline (list[dict | callable]): A sequence of data transforms.
data_prefix (dict or ConfigDict): Path to a directory where videos are
held. Defaults to ``dict(video='')``.
test_mode (bool): Store True when building test or validation dataset.
Default: False.
"""
def __init__(self,
ann_file: str,
pipeline: List[Union[dict, Callable]],
data_prefix: Optional[ConfigType] = dict(video=''),
test_mode: bool = False,
**kwargs):
super().__init__(
ann_file,
pipeline=pipeline,
data_prefix=data_prefix,
test_mode=test_mode,
**kwargs)
[docs] def load_data_list(self) -> List[dict]:
"""Load annotation file to get video information."""
exists(self.ann_file)
data_list = []
anno_database = mmengine.load(self.ann_file)
for video_name in anno_database:
video_info = anno_database[video_name]
feature_path = video_name + '.csv'
feature_path = '%s/%s' % (self.data_prefix['video'], feature_path)
video_info['feature_path'] = feature_path
video_info['video_name'] = video_name
data_list.append(video_info)
return data_list