Shortcuts

数据处理

在 MMClassification 中,数据处理和数据集是解耦的。数据集只定义了如何从文件系统中获取样本的基本信息。这些基本信息包括分类标签和原始图像数据/图像的路径。完整的数据处理流程包括了数据变换(data transform)、数据预处理器(data preprocessor)及批量数据增强(batch augmentation)。

  • 数据变换:数据变换包括了数据的加载、部分预处理/增强、数据格式化等操作

  • 数据预处理器:主要负责批量数据的收集、归一化、堆叠、通道翻转等操作。

    • 批量数据增强:批量数据增强是数据预处理器的功能之一,负责处理涉及多个样本的数据增强操作,例如 Mixup 和 CutMix。

数据变换

为了准备输入数据,我们需要对数据集中保存的基本信息做一些变换。这些变换包括数据加载、部分预处理和增强、格式化。一系列的数据变换组成了数据流水线(data pipeline)。因此,在数据集的配置参数中通常存在一个 pipeline 参数,例如:

train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='RandomResizedCrop', scale=224),
    dict(type='RandomFlip', prob=0.5, direction='horizontal'),
    dict(type='PackClsInputs'),
]

train_dataloader = dict(
    ....
    dataset=dict(
        pipeline=train_pipeline,
        ....),
    ....
)

pipeline 列表中的每一项都是以下数据变换类之一。如果您想添加自定义数据变换类,可以参考 自定义数据流水线教程

组合式增强

Albumentations

使用 Albumentations 库进行数据变换的封装类

ColorJitter

随机改变图像的亮度、对比度和饱和度

EfficientNetCenterCrop

EfficientNet 风格的中心裁剪

EfficientNetRandomCrop

EfficientNet 风格的随机缩放裁剪

Lighting

使用 AlexNet 风格的 PCA 抖动随机调整图像照明

RandomCrop

在随机位置裁剪给定图像

RandomErasing

在图像中随机选择一个矩形区域并擦除像素

RandomResizedCrop

将给定图像按照随机尺寸和纵横比进行裁剪

ResizeEdge

按照指定边长调整图像尺寸

组合式增强

组合式增强将一系列数据增强方法组合在一起,实现对样本的整体增强,例如 AutoAugmentRandAugment

AutoAugment

Auto augmentation.

RandAugment

Random augmentation.

为了指定增强组合的策略(即上述变换中的 policies 参数),你可以使用字符串从一系列预设策略中指定。

预设策略

用于

说明

“imagenet”

AutoAugment

用于 ImageNet 数据集的增强组合,来自 DeepVoltaire/AutoAugment 仓库

“timm_increasing”

RandAugment

timm 仓库中的 _RAND_INCREASING_TRANSFORMS 增强组合

你还可以通过根据下表手动配置一组策略。

AutoContrast

自动调整图像对比度

Brightness

自动调整图像亮度

ColorTransform

自动调整图像平衡

Contrast

改变图像对比度

Cutout

擦除部分图像区域

Equalize

均衡化图像直方图

Invert

反转图像色阶

Posterize

图像像素化(降低各色彩通道的比特数)

Rotate

旋转图像

Sharpness

改变图像锐度

Shear

图像切变

Solarize

图像日光化(反转高于某一阈值的所有图像色阶)

SolarizeAdd

图像过曝(为低于某一阈值的所有色阶增加一个固定值)

Translate

平移图像

BaseAugTransform

用于组合式增强的数据变换基类

格式化

Collect

收集并仅保留指定字段的数据

PackClsInputs

将输入数据整理成为用于分类任务的数据格式。

ToNumpy

将对象转变为 numpy.ndarray

ToPIL

将图片从 OpenCV 格式转为为 PIL.Image.Image 格式

Transpose

转置 NumPy 数组

MMCV 中的数据变换

我们还在 MMCV 中提供了很多数据转换类。你可以在配置文件中直接使用它们。这里我们列举了一些常用的数据变换类,完整的数据变换类列表可以在 mmcv.transforms 中找到。

LoadImageFromFile

从图片路径加载图片

Resize

缩放图像、bbox、分割图、关键点等

RandomResize

随机缩放图像、bbox、关键点等

RandomFlip

随机翻转图像、bbox、关键点等

RandomGrayscale

随机灰度化图像

CenterCrop

裁剪一张图像的中心区域(同时处理分割图、bbox、关键点等)。如果裁剪尺寸超出原图区域,并且指定了 auto_pad=True,则会在裁剪之前扩充原图至合适大小

Normalize

归一化图像

Compose

顺序组合一系列数据变换

数据预处理器

数据预处理器也是在数据进入神经网络之前,对数据进行处理的组件。与数据变换相比,数据预处理器是模型的一个的模块,并且可以获得一个批次的数据进行处理,这意味着它可以使用模型所在的设备(如 GPU),并利用批量处理,实现加速。

MMClassification 中使用的默认的数据预处理器可以进行以下操作:

  1. 将数据移动到模型所在的设备

  2. 将不同尺寸的输入填充至统一的尺寸

  3. 将一系列输入的 tensor 组成 batch

  4. 如果输入的 tensor 形状为 (3, H, W),则可以执行 BGR 到 RGB 的通道转换

  5. 根据给定的均值和方差对图像进行归一化

  6. 在训练时进行批量数据增强,如 Mixup 和 CutMix

你可以在配置文件的 data_preprocessor 字段,或是 model.data_preprocessor 字段对数据预处理器进行配置。一个典型的用法如下:

data_preprocessor = dict(
    # RGB format normalization parameters
    mean=[123.675, 116.28, 103.53],
    std=[58.395, 57.12, 57.375],
    to_rgb=True,    # convert image from BGR to RGB
)

或者在 model.data_preprocessor 字段配置如下:

model = dict(
    backbone = ...,
    neck = ...,
    head = ...,
    data_preprocessor = dict(
                         mean=[123.675, 116.28, 103.53],
                         std=[58.395, 57.12, 57.375],
                         to_rgb=True)
    train_cfg=...,
)

请注意如果在两处均进行了配置,model.data_preprocessor 拥有更高的优先级。

ClsDataPreprocessor

用于分类任务的图像预处理器

批量数据增强

批量数据增强是数据预处理器的一个功能。它可以利用一个批次的多个样本,以某种方式进行混合增强,如 Mixup 和 CutMix。

这些数据增强只会在训练过程中生效,因此,我们使用 model.train_cfg 字段来配置这些功能。

model = dict(
    backbone=...,
    neck=...,
    head=...,
    train_cfg=dict(augments=[
        dict(type='Mixup', alpha=0.8),
        dict(type='CutMix', alpha=1.0),
    ]),
)

你也可以通过 probs 字段指定每一个批量数据增强的概率。

model = dict(
    backbone=...,
    neck=...,
    head=...,
    train_cfg=dict(augments=[
        dict(type='Mixup', alpha=0.8),
        dict(type='CutMix', alpha=1.0),
    ], probs=[0.3, 0.7])
)

这里是 MMClassification 中支持的所有批量数据增强列表。

Mixup

Mixup batch augmentation.

CutMix

CutMix batch agumentation.

ResizeMix

ResizeMix Random Paste layer for a batch of data.

Read the Docs v: mmcls-1.x
Versions
latest
stable
mmcls-1.x
mmcls-0.x
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.