DataPipelines的设计
在torch中,Dataset的作用是决定如何读取训练数据,并且控制读取数据后进行何种操作;而DataLoader的作用是把Dataset得到的数据排列起来,并按照一定的batchsize输入给网络。
通常来说,Dataset和DataLoader肩负起了处理数据集的任务,而考虑到目标检测任务中,size不一的问题,在MMCV中创建了一个DataContainer类型。data preparation pipeline和dataset被分开处理。
Pipelines由一系列操作组成,每个操作都将一个dict输入,将一个dict输出。
上图中,蓝色块表示管道操作,绿色文字为结果dict中添加的新键,橙色文字为更新的键。
以上这些操作又分为了数据加载、预处理、格式化和测试时间增强。
以下为pipeline的一个举例说明:
img_norm_cfg = dict(
mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
train_pipeline = [
dict(type='LoadImageFromFile'),
dict(type='LoadAnnotations', with_bbox=True),
dict(type='Resize', img_scale=(1333, 800), keep_ratio=True)