gluoncv.data

此模块为流行的视觉数据集提供数据加载器和转换器。

提示

请参考 准备数据集 查看此页面中列出数据集的描述以及如何下载和解压它们。

提示

对于 MNIST 和 CIFAR10 等小型数据集,请参考 GluonCV Datasets,可以直接使用而无需任何下载步骤。

ImageNet

gluoncv.data.ImageNet

加载 ImageNet 分类数据集。

Pascal VOC

gluoncv.data.VOCDetection

Pascal VOC 检测数据集。

gluoncv.data.VOCSegmentation

Pascal VOC 语义分割数据集。

gluoncv.data.VOCAugSegmentation

Pascal VOC 增强语义分割数据集。

COCO

gluoncv.data.COCODetection

MS COCO 检测数据集。

gluoncv.data.COCOInstance

MS COCO 实例分割数据集。

ADE20K

gluoncv.data.ADE20KSegmentation

ADE20K 语义分割数据集。

Kinetics400

gluoncv.data.Kinetics400

加载 Kinetics400 视频行为识别数据集。

自定义数据集

gluoncv.data.LstDetection

从 LST 文件和原始图像加载的检测数据集。

gluoncv.data.RecordFileDetection

从记录文件加载的检测数据集。

API 参考

class gluoncv.data.ImageNet(root='~/.mxnet/datasets/imagenet', train=True, transform=None)[source]

加载 ImageNet 分类数据集。

有关此数据集的描述以及如何准备,请参考 准备 ImageNet 数据集

参数
  • root (str, 默认为 '~/.mxnet/datasets/imagenet') – 存储数据集的文件夹路径。

  • train (bool, 默认为 True) – 是否加载训练集或验证集。

  • transform (function, 默认为 None) – 一个接收数据和标签并对其进行转换的函数。请参考 ./transforms 查看示例。(待办,是否应限制其数据类型为 transformer?)

class gluoncv.data.VOCDetection(root='~/.mxnet/datasets/voc', splits=((2007, 'trainval'), (2012, 'trainval')), transform=None, index_map=None, preload_label=True)[source]

Pascal VOC 检测数据集。

参数
  • root (str, 默认为 '~/mxnet/datasets/voc') – 存储数据集的文件夹路径。

  • splits (list of tuples, 默认为 ((2007, 'trainval'), (2012, 'trainval'))) – (年份, 名称) 组合的列表。年份选项有:2007, 2012。名称选项有:'train', 'val', 'trainval', 'test'。

  • transform (callable, 默认为 None) –

    一个接收数据和标签并对其进行转换的函数。请参考 ./transforms 查看示例。

    目标检测的转换函数应考虑标签,因为任何几何修改都需要修改标签。

  • index_map (dict, 默认为 None) – 默认情况下,20 个类别映射到 0 到 19 的索引。可以通过提供一个从类名到整数的字典来自定义映射。仅供高级用户使用,当您想交换类标签的顺序时。

  • preload_label (bool, 默认为 True) – 如果为 True,则在初始化期间解析并将所有标签加载到内存中。这通常会加速,但需要更多内存。典型的预加载标签需要几十兆字节。只有当您的数据集非常大时才需要禁用它。

class gluoncv.data.VOCSegmentation(root='/root/.mxnet/datasets/voc', split='train', mode=None, transform=None, **kwargs)[source]

Pascal VOC 语义分割数据集。

参数
  • root (string) – VOCdevkit 文件夹路径。默认为 ‘$(HOME)/mxnet/datasets/voc’

  • split (string) – ‘train’, ‘val’ 或 ‘test’

  • transform (callable, optional) – 转换图像的函数

示例

>>> from mxnet.gluon.data.vision import transforms
>>> # Transforms for Normalization
>>> input_transform = transforms.Compose([
>>>     transforms.ToTensor(),
>>>     transforms.Normalize([.485, .456, .406], [.229, .224, .225]),
>>> ])
>>> # Create Dataset
>>> trainset = gluoncv.data.VOCSegmentation(split='train', transform=input_transform)
>>> # Create Training Loader
>>> train_data = gluon.data.DataLoader(
>>>     trainset, 4, shuffle=True, last_batch='rollover',
>>>     num_workers=4)
class gluoncv.data.VOCAugSegmentation(root='/root/.mxnet/datasets/voc', split='train', mode=None, transform=None, **kwargs)[source]

Pascal VOC 增强语义分割数据集。

参数
  • root (string) – VOCdevkit 文件夹路径。默认为 ‘$(HOME)/mxnet/datasplits/voc’

  • split (string) – ‘train’ 或 ‘val’

  • transform (callable, optional) – 转换图像的函数

示例

>>> from mxnet.gluon.data.vision import transforms
>>> # Transforms for Normalization
>>> input_transform = transforms.Compose([
>>>     transforms.ToTensor(),
>>>     transforms.Normalize([.485, .456, .406], [.229, .224, .225]),
>>> ])
>>> # Create Dataset
>>> trainset = gluoncv.data.VOCAugSegmentation(split='train', transform=input_transform)
>>> # Create Training Loader
>>> train_data = gluon.data.DataLoader(
>>>     trainset, 4, shuffle=True, last_batch='rollover',
>>>     num_workers=4)
class gluoncv.data.COCODetection(root='~/.mxnet/datasets/coco', splits=('instances_val2017'), transform=None, min_object_area=0, skip_empty=True, use_crowd=True)[source]

MS COCO 检测数据集。

参数
  • root (str, 默认为 '~/.mxnet/datasets/coco') – 存储数据集的文件夹路径。

  • splits (list of str, 默认为 ['instances_val2017']) – Json 注释文件名称。选项有:instances_val2017, instances_train2017。

  • transform (callable, 默认为 None) –

    一个接收数据和标签并对其进行转换的函数。请参考 ./transforms 查看示例。

    目标检测的转换函数应考虑标签,因为任何几何修改都需要修改标签。

  • min_object_area (float) – 最小可接受的真实标注区域,如果对象的区域小于此值,则将被忽略。

  • skip_empty (bool, 默认为 True) – 是否跳过没有有效对象的图像。在训练时这应该是 True,否则会导致未定义的行为。

  • use_crowd (bool, 默认为 True) – 是否使用标记为 crowd 实例的框。

class gluoncv.data.COCOInstance(root='~/.mxnet/datasets/coco', splits=('instances_val2017'), transform=None, min_object_area=1, skip_empty=True)[source]

MS COCO 实例分割数据集。

参数
  • root (str, 默认为 '~/mxnet/datasets/coco') – 存储数据集的文件夹路径。

  • splits (list of str, 默认为 ['instances_val2017']) – Json 注释文件名称。选项有:instances_val2017, instances_train2017。

  • transform (callable, 默认为 None) –

    一个接收数据和标签并对其进行转换的函数。请参考 ./transforms 查看示例。

    目标检测的转换函数应考虑标签,因为任何几何修改都需要修改标签。

  • min_object_area (float, 默认为 1) – 最小可接受的真实标注区域,如果对象的区域小于此值,则将被忽略。

  • skip_empty (bool, 默认为 True) – 是否跳过没有有效对象的图像。在训练时这应该是 True,否则会导致未定义的行为。

class gluoncv.data.ADE20KSegmentation(root='/root/.mxnet/datasets/ade', split='train', mode=None, transform=None, **kwargs)[source]

ADE20K 语义分割数据集。

参数
  • root (string) – VOCdevkit 文件夹路径。默认为 ‘$(HOME)/mxnet/datasplits/ade’

  • split (string) – ‘train’, ‘val’ 或 ‘test’

  • transform (callable, optional) – 转换图像的函数

示例

>>> from mxnet.gluon.data.vision import transforms
>>> # Transforms for Normalization
>>> input_transform = transforms.Compose([
>>>     transforms.ToTensor(),
>>>     transforms.Normalize([.485, .456, .406], [.229, .224, .225]),
>>> ])
>>> # Create Dataset
>>> trainset = gluoncv.data.ADE20KSegmentation(split='train', transform=input_transform)
>>> # Create Training Loader
>>> train_data = gluon.data.DataLoader(
>>>     trainset, 4, shuffle=True, last_batch='rollover',
>>>     num_workers=4)
class gluoncv.data.Kinetics400(root='/root/.mxnet/datasets/kinetics400/rawframes_train', setting='/root/.mxnet/datasets/kinetics400/kinetics400_train_list_rawframes.txt', train=True, test_mode=False, name_pattern='img_%05d.jpg', video_ext='mp4', is_color=True, modality='rgb', num_segments=1, num_crop=1, new_length=1, new_step=1, new_width=340, new_height=256, target_width=224, target_height=224, temporal_jitter=False, video_loader=False, use_decord=False, slowfast=False, slow_temporal_stride=16, fast_temporal_stride=2, data_aug='v1', lazy_init=False, transform=None)[source]

加载 Kinetics400 视频行为识别数据集。

有关此数据集的描述以及如何准备,请参考 准备 Kinetics400 数据集

参数
  • root (str, 必需。默认为 '~/.mxnet/datasets/kinetics400/rawframes_train'.) – 存储数据集的根文件夹路径。

  • setting (str, 必需。) – 描述数据集的文本文件,每行代表一个视频样本。每行有三个项目:(1) 视频路径;(2) 视频长度和 (3) 视频标签。

  • train (bool, 默认为 True。) – 是否加载训练集或验证集。

  • test_mode (bool, 默认为 False。) – 是否在测试集上执行评估。通常涉及三裁剪或十裁剪评估策略。

  • name_pattern (str, 默认为 None。) – 解码后的视频帧的命名模式。例如,img_00012.jpg。

  • video_ext (str, 默认为 'mp4'.) – 如果 video_loader 设置为 True,请相应地指定视频格式。

  • is_color (bool, 默认为 True。) – 加载的图像是彩色还是灰度。

  • modality (str, 默认为 'rgb'.) – 输入模态,目前仅支持 rgb 视频帧。稍后将添加对 rgb 差分图像和光流图像的支持。

  • num_segments (int, 默认为 1。) – 将视频均匀分割成片段的数量。一种获取全局视频级信息的有用技术。Limin Wang 等人,《时间分割网络:朝着深度行为识别的良好实践迈进》,ECCV 2016。

  • num_crop (int, 默认为 1。) – 每张图像的裁剪次数。默认为 1。评估时常用的是三次裁剪和十次裁剪。

  • new_length (int, 默认为 1。) – 输入视频片段的长度。默认为单张图像,但可以是多个连续视频帧。例如,new_length=16 表示我们将提取一个包含连续 16 帧的视频片段。

  • new_step (int, 默认为 1。) – 时间采样率。例如,new_step=1 表示我们将提取连续帧的视频片段。new_step=2 表示我们将提取每隔一帧的视频片段。

  • new_width (str, 默认为 340。) – 将加载图像的宽度缩放到 'new_width',用于后续多尺度裁剪和调整大小。

  • new_height (int, 默认为 256。) – 将加载图像的高度缩放到 'new_height',用于后续多尺度裁剪和调整大小。

  • target_width (int, 默认为 224。) – 将转换后图像的宽度缩放到相同的 'target_width',用于批量转发。

  • target_height (int, 默认为 224。) – 将转换后图像的高度缩放到相同的 'target_height',用于批量转发。

  • temporal_jitter (bool, 默认为 False。) – 如果 new_step > 1,是否进行时间抖动。

  • video_loader (bool, 默认为 False。) – 是否使用视频加载器加载数据。

  • use_decord (bool, 默认为 True。) – 是否使用 Decord 视频加载器加载数据。否则使用 mmcv 视频加载器。

  • transform (function, 默认为 None。) – 一个接收数据和标签并对其进行转换的函数。

  • slowfast (bool, 默认为 False。) – 如果设置为 True,则使用专为 SlowFast 网络设计的数据加载器。Christoph Feichtenhofer 等人,《用于视频识别的 SlowFast 网络》,ICCV 2019。

  • slow_temporal_stride (int, 默认为 16。) – SlowFast 网络慢分支中视频帧稀疏采样的时间步长。

  • fast_temporal_stride (int, 默认为 2。) – SlowFast 网络快分支中视频帧稀疏采样的时间步长。

  • data_aug (str, 默认为 'v1'.) – 不同类型的数据增强自动。支持 v1, v2, v3 和 v4。

  • lazy_init (bool, 默认为 False。) – 如果设置为 True,构建数据集实例但不加载任何数据集。

class gluoncv.data.DetectionDataLoader(dataset, batch_size=None, shuffle=False, sampler=None, last_batch=None, batch_sampler=None, batchify_fn=None, num_workers=0)[source]

用于检测数据集的数据加载器。

自 0.2.0 版本起弃用: DetectionDataLoader 已弃用,请直接使用 mxnet.gluon.data.DataLoader 以及 gluoncv.data.batchify 中列出的 batchify 函数。

它从数据集中加载数据批次,然后应用数据转换。它是 mxnet.gluon.data.DataLoader 的子类,因此具有非常相似的 API。

数据加载器的主要目的是填充每张图像中变长标签,因为它们具有不同数量的对象。

参数
  • dataset (mxnet.gluon.data.Dataset or numpy.ndarray or mxnet.ndarray.NDArray) – 源数据集。

  • batch_size (int) – 小批量的大小。

  • shuffle (bool, 默认为 False) – 是否随机打乱样本。训练数据集通常使用 True,验证/测试数据集使用 False。

  • sampler (mxnet.gluon.data.Sampler, 默认为 None) – 要使用的采样器。应该指定一个采样器或启用 shuffle,不能同时指定,因为随机打乱是一种采样方法。

  • last_batch ({'keep', 'discard', 'rollover'}, 默认为 keep) –

    如果批量大小不能均匀地整除数据集中的样本数量,如何处理最后一个批次。处理最后一个批次的大小小于指定批量大小时有三种选项。

    • keep: 保留它

    • discard: 丢弃它

    • rollover: 将样本插入到下一个批次的开头

  • batch_sampler (mxnet.gluon.data.BatchSampler) – 一个返回小批次的采样器。如果指定了 batch_sampler,请勿指定 batch_size、shuffle、sampler 和 last_batch。

  • batchify_fn (callable) –

    回调函数,允许用户指定如何将样本合并到批次中。默认为 gluoncv.data.dataloader.default_pad_batchify_fn()

    def default_pad_batchify_fn(data):
        if isinstance(data[0], nd.NDArray):
            return nd.stack(*data)
        elif isinstance(data[0], tuple):
            data = zip(*data)
            return [pad_batchify(i) for i in data]
        else:
            data = np.asarray(data)
            pad = max([l.shape[0] for l in data])
            buf = np.full((len(data), pad, data[0].shape[-1]),
                          -1, dtype=data[0].dtype)
            for i, l in enumerate(data):
                buf[i][:l.shape[0], :] = l
            return nd.array(buf, dtype=data[0].dtype)
    

  • num_workers (int, 默认为 0) – 用于数据预处理的多进程工作进程数量。如果 num_workers = 0,则禁用多进程。否则,使用 num_workers 个多进程工作进程来处理数据。

class gluoncv.data.LstDetection(filename, root='', flag=1, coord_normalized=True)[source]

从 LST 文件和原始图像加载的检测数据集。LST 文件是纯文本文件,但具有特殊的标签格式。

请查看 1. GluonCV 和 MXNet 推荐的目标检测格式,了解如何准备此文件的教程。

参数
  • filename (type) – 参数 filename 的描述。

  • root (str) – LST 文件中文件名的相对图像根文件夹。

  • flag (int, 默认为 1) – 彩色图像使用 1,灰度图像使用 0。

  • coord_normalized (boolean) – 指示标签中的边界框坐标是否已标准化为 (0, 1)。如果是,我们将通过乘以宽度或高度将其重新缩放到绝对坐标。

class gluoncv.data.RecordFileDetection(filename, coord_normalized=True)[source]

从记录文件加载的检测数据集。支持的记录文件使用与 mxnet.image.ImageDetIter()mxnet.io.ImageDetRecordIter() 相同的格式。

请查看 1. GluonCV 和 MXNet 推荐的目标检测格式,了解如何准备此文件的教程。

注意

我们建议您只在熟悉记录文件时使用 RecordFileDetection

参数
  • filename (str) – 记录文件的路径。它要求在同一目录下同时存在 *.rec 和 *.idx 文件,其中原始图像和标签存储在 *.rec 文件中以获得更好的 IO 性能,*.idx 文件用于提供对二进制文件的随机访问。

  • coord_normalized (boolean) – 指示标签中的边界框坐标是否已标准化为 (0, 1)。如果是,我们将通过乘以宽度或高度将其重新缩放到绝对坐标。

示例

>>> record_dataset = RecordFileDetection('train.rec')
>>> img, label = record_dataset[0]
>>> print(img.shape, label.shape)
(512, 512, 3) (1, 5)