in utils/eval_utils.py [0:0]
def build_dataloader(db_cfg, split_cfg, fold, num_workers, distributed):
import torch.utils.data as data
from datasets import preprocessing
if db_cfg['transform'] == 'msc+color':
video_transform = preprocessing.VideoPrep_MSC_CJ(
crop=(db_cfg['crop_size'], db_cfg['crop_size']),
num_frames=int(db_cfg['video_fps'] * db_cfg['clip_duration']),
pad_missing=True,
augment=split_cfg['use_augmentation'],
min_area=db_cfg['min_area'],
color=db_cfg['color'],
)
elif db_cfg['transform'] == 'crop+color':
video_transform = preprocessing.VideoPrep_Crop_CJ(
crop=(db_cfg['crop_size'], db_cfg['crop_size']),
num_frames=int(db_cfg['video_fps'] * db_cfg['clip_duration']),
pad_missing=True,
augment=split_cfg['use_augmentation'],
)
else:
raise ValueError
import datasets
if db_cfg['name'] == 'ucf101':
dataset = datasets.UCF
elif db_cfg['name'] == 'hmdb51':
dataset = datasets.HMDB
elif db_cfg['name'] == 'kinetics':
dataset = datasets.Kinetics
else:
raise ValueError('Unknown dataset')
db = dataset(
subset=split_cfg['split'].format(fold=fold),
return_video=True,
video_clip_duration=db_cfg['clip_duration'],
video_fps=db_cfg['video_fps'],
video_transform=video_transform,
return_audio=False,
return_labels=True,
mode=split_cfg['mode'],
clips_per_video=split_cfg['clips_per_video'],
)
if distributed:
sampler = torch.utils.data.distributed.DistributedSampler(db)
else:
sampler = None
drop_last = split_cfg['drop_last'] if 'drop_last' in split_cfg else True
loader = data.DataLoader(
db,
batch_size=db_cfg['batch_size'] if split_cfg['mode'] == 'clip' else max(1, db_cfg['batch_size']//split_cfg['clips_per_video']),
num_workers=num_workers,
pin_memory=True,
shuffle=(sampler is None) and split_cfg['use_shuffle'],
sampler=sampler,
drop_last=drop_last
)
return loader