mmflow-官方教程翻译04 Custom Data Pipelines

原文链接:Tutorial 3: Custom Data Pipelines — mmflow documentation

教程3 自定义数据处理流程

 设计数据处理流程

        遵循经典的惯例,我们使用Dataset和DataLoader用于多任务数据载入。Dataset返回一个对应于模型前向传播参数的数据项的字典结构。由于进行光流估计的数据可能大小不一致,我们在MMCV中引入了一种新的DataContainer类型来便于收集和分发不同大小的数据。详情参考这里

        数据准备的处理流程和数据集不是耦合的。通常一个数据集定义了如何处理标签,而数据处理流程定义了全部的数据准备步骤的字典。处理流程由一系列操作组成,每个操作以一个字典作为输入,当然也会为下一个变换输出一个字典。

        这些操作可以分为 数据载入、预处理格式化

下面是一个PWC-Net的处理流程示例:

train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations'),
    dict(type='ColorJitter', brightness=0.5, contrast=0.5, saturation=0.5,
         hue=0.5),
    dict(type='RandomGamma', gamma_range=(0.7, 1.5)),
    dict(type='Normalize', mean=[0., 0., 0.], std=[255., 255., 255.], to_rgb=False),
    dict(type='GaussianNoise', sigma_range=(0, 0.04), clamp_range=(0., 1.)),
    dict(type='RandomFlip', prob=0.5, direction='horizontal'),
    dict(type='RandomFlip', prob=0.5, direction='vertical'),
    dict(type='RandomAffine',
         global_transform=dict(
            translates=(0.05, 0.05),
            zoom=(1.0, 1.5),
            shear=(0.86, 1.16),
            rotate=(-10., 10.)
        ),
         relative_transform=)dict(
            translates=(0.00375, 0.00375),
            zoom=(0.985, 1.015),
            shear=(1.0, 1.0),
            rotate=(-1.0, 1.0)
        ),
    dict(type='RandomCrop', crop_size=(384, 448)),
    dict(type='DefaultFormatBundle'),
    dict(
        type='Collect',
        keys=['imgs', 'flow_gt'],
        meta_keys=['img_fields', 'ann_fields', 'filename1', 'filename2',
                   'ori_filename1', 'ori_filename2', 'filename_flow',
                   'ori_filename_flow', 'ori_shape', 'img_shape',
                   'img_norm_cfg']),
]

        对于每个操作,我们列出了相关的 (可用的)增加、更新或删除 的字典字段。

数据载入

LoadImageFromFile

  • add: img1, img2, filename1, filename2, img_shape, ori_shape, pad_shape, scale_factor, img_norm_cfg

LoadAnnotations

  • add: flow_gt, filename_flow

预处理

ColorJitter

  • update: img1, img2

RandomGamma

  • update: img1, img2

Normalize

  • update: img1, img2, img_norm_cfg

GaussianNoise

  • update: img1, img2

RandomFlip

  • update: img1, img2, flow_gt

RandomAffine

  • update: img1, img2, flow_gt

RandomCrop

  • update: img1, img2, flow_gt, img_shape

格式化

DefaultFormatBundle

  • update: img1, img2, flow_gt

Collect

  • add: img_meta (the keys of img_meta is specified by meta_keys)

  • remove: all other keys except for those specified by keys

扩展和使用自定义的数据处理流程

1.在任意文件(例: myPipeline.py)中写一个新的流程,以字典格式作为输入输出

from mmflow.datasets import PIPELINES

@PIPELINES.register_module()
class MyTransform:

    def __call__(self, results):
        results['dummy'] = True
        return results

2.导入新类(MyTransform)

from .my_pipeline import MyTransform

3.在配置文件中使用它(MyTransform)

train_pipeline = [
dict(type='LoadImageFromFile'),
dict(type='LoadAnnotations'),
dict(type='ColorJitter', brightness=0.5, contrast=0.5, saturation=0.5,
     hue=0.5),
dict(type='RandomGamma', gamma_range=(0.7, 1.5)),
dict(type='Normalize', mean=[0., 0., 0.], std=[255., 255., 255.], to_rgb=False),
dict(type='GaussianNoise', sigma_range=(0, 0.04), clamp_range=(0., 1.)),
dict(type='RandomFlip', prob=0.5, direction='horizontal'),
dict(type='RandomFlip', prob=0.5, direction='vertical'),
dict(type='RandomAffine',
     global_transform=dict(
        translates=(0.05, 0.05),
        zoom=(1.0, 1.5),
        shear=(0.86, 1.16),
        rotate=(-10., 10.)
    ),
     relative_transform=)dict(
        translates=(0.00375, 0.00375),
        zoom=(0.985, 1.015),
        shear=(1.0, 1.0),
        rotate=(-1.0, 1.0)
    ),
dict(type='RandomCrop', crop_size=(384, 448)),
dict(type='MyTransform'),
dict(type='DefaultFormatBundle'),
dict(
    type='Collect',
    keys=['imgs', 'flow_gt'],
    meta_keys=('img_fields', 'ann_fields', 'filename1', 'filename2',
               'ori_filename1', 'ori_filename2', 'filename_flow',
               'ori_filename_flow', 'ori_shape', 'img_shape',
               'img_norm_cfg'))]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值