在本节中,我们将介绍训练检测器的主要单元:数据管道,模型和迭代管道。
数据管道
按照规定, 我们使用Dataset
和DataLoader
用于多个处理的数据加载。Dataset
返回对应于模型的forward方法的参数的数据项字典。由于对象检测中的数据大小可能不同(图像大小,gt bbox大小等),因此我们在MMCV中引入了一种新类型DataContainer
,以帮助收集和分配不同大小的数据。有关更多详细信息,请参见此处(https://github.com/open-mmlab/mmcv/blob/master/mmcv/parallel/data_container.py) 。
对数据准备管道和数据集进行分解。通常,数据集定义了如何处理注释,数据管道定义所有准备数据字典的步骤。流水线由一系列操作组成。每个操作都将一个dict作为输入,并为下一个转换输出一个dict。
在下图中,我们展示了经典管道。蓝色块是管道操作。随着管道的进行,每个操作员可以向结果字典添加新键(标记为绿色)或更新现有键(标记为橙色)。
这些操作分为数据加载, 预处理, 格式化和测试时间扩充。
这是Faster R-CNN的管道示例。
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), dict(type='RandomFlip', flip_ratio=0.5), dict(type='Normalize', **img_norm_cfg), dict(type='Pad