RawframeDataset
, VideoDataset
, ActivityNetDataset
三个基本类型,前两者是行为识别数据集,最后一个是时序行为检测数据集。RawframeDataset
, VideoDataset
, ActivityNetDataset
等)的类型与参数。mmaction.datasets.builder.py
中的 build_dataset
方法。cfg.data.train/val/test
data = dict(
videos_per_gpu=8,
workers_per_gpu=4,
train=dict(
type=dataset_type,
ann_file=ann_file_train,
data_prefix=data_root,
pipeline=train_pipeline),
val=dict(
type=dataset_type,
ann_file=ann_file_val,
data_prefix=data_root_val,
pipeline=val_pipeline),
test=dict(
type=dataset_type,
ann_file=ann_file_val,
data_prefix=data_root_val,
pipeline=test_pipeline))
cfg.data.train.type
选择基本数据集类型(假设是RawframeDataset
类型),cfg.data.train
中的其他参数就是基本数据集构造函数的参数。cfg.data.train.type
选择基本数据集类型:
DATASET
的mmcv.utils.Registry
对象中,该对象中维护了一个字典,该字典 key 为基本数据集类别名称,value 为基本数据集类型。mmaction.datasets.base.BaseDataset
self.pipeline
成员变量。mmaction.datasets.pipelines.compose.Compose
中。type
用于指定pipeline类型,其他参数就是该类型的初始化参数。train_pipeline = [
dict(type='SampleFrames', clip_len=32, frame_interval=2, num_clips=1),
dict(type='FrameSelector', decoding_backend='turbojpeg'),
dict(type='Resize', scale=(-1, 256), lazy=True),
dict(
type='MultiScaleCrop',
input_size=224,
scales=(1, 0.8),
random_crop=False,
max_wh_scale_gap=0,
lazy=True),
dict(type='Resize', scale=(224, 224), keep_ratio=False, lazy=True),
dict(type='Flip', flip_ratio=0.5, lazy=True),
dict(type='Fuse'),
dict(type='Normalize', **img_norm_cfg),
dict(type='FormatShape', input_format='NCTHW'),
dict(type='Collect', keys=['imgs', 'label'], meta_keys=[]),
dict(type='ToTensor', keys=['imgs', 'label'])
]
val_pipeline = [
dict(
type='SampleFrames',
clip_len=32,
frame_interval=2,
num_clips=1,
test_mode=True),
dict(type='FrameSelector', decoding_backend='turbojpeg'),
dict(type='Resize', scale=(-1, 256), lazy=True),
dict(type='CenterCrop', crop_size=224, lazy=True),
dict(type='Flip', flip_ratio=0, lazy=True),
dict(type='Fuse'),
dict(type='Normalize', **img_norm_cfg),
dict(type='FormatShape', input_format='NCTHW'),
dict(type='Collect', keys=['imgs', 'label'], meta_keys=[]),
dict(type='ToTensor', keys=['imgs'])
]
test_pipeline = [
dict(
type='SampleFrames',
clip_len=32,
frame_interval=2,
num_clips=10,
test_mode=True),
dict(type='FrameSelector', decoding_backend='turbojpeg'),
dict(type='Resize', scale=(-1, 256)),
dict(type='ThreeCrop', crop_size=256),
dict(type='Flip', flip_ratio=0),
dict(type='Normalize', **img_norm_cfg),
dict(type='FormatShape', input_format='NCTHW'),
dict(type='Collect', keys=['imgs', 'label'], meta_keys=[]),
dict(type='ToTensor', keys=['imgs'])
]
mmaction.datasets.pipelines.compose.Compose
概述
PIPELINES
注册。type
到 PIPELINES
中选择组件类型,并通过配置文件中其他参数初始化选中的组件。Compose
类实现的功能就是将数据依次通过所有组件,得到结果。mmaction.datasets.pipelines.loading.py
中。mmaction.datasets.pipelines.augmentations.py
中torch.Tensor
。也包括了Transpose。mmaction.datasets.pipelines.formating.py
中。Compose
mmaction.datasets.pipelines.compose.py
中。mmaction.datasets.pipelines.loading.py
中。SampleFrames
与 DenseSampleFrames
两种。SampleFrames
clip_len, frame_interval, num_clips
clip_len=1, num_clips=x
,另外一个参数取值无所谓num_clips=1, clip_len=y, frames_interval=x
DenseSampleFrames
SampleFrames
。sample_range
(期望在 [0, sample_range)
中获取所有clip的起始位置) 和 num_sample_positions
(test时使用,用于获取多个 clip 的起始位置)。ThreeCrop
(resize+上中下/左中右crop)和 TenCrop
(左上、左下、右上、右下、正中,以及flip)主要就是设置了 batch size,分布式训练中使用的 Sampler,以及数据 collate(整理)方式。