gluoncv.data¶
此模块为流行的视觉数据集提供数据加载器和转换器。
提示
请参考 准备数据集 查看此页面中列出数据集的描述以及如何下载和解压它们。
提示
对于 MNIST 和 CIFAR10 等小型数据集,请参考 GluonCV Datasets,可以直接使用而无需任何下载步骤。
Pascal VOC¶
Pascal VOC 检测数据集。 |
|
Pascal VOC 语义分割数据集。 |
|
Pascal VOC 增强语义分割数据集。 |
Kinetics400¶
加载 Kinetics400 视频行为识别数据集。 |
自定义数据集¶
从 LST 文件和原始图像加载的检测数据集。 |
|
从记录文件加载的检测数据集。 |
API 参考¶
-
class
gluoncv.data.
ImageNet
(root='~/.mxnet/datasets/imagenet', train=True, transform=None)[source]¶ 加载 ImageNet 分类数据集。
有关此数据集的描述以及如何准备,请参考 准备 ImageNet 数据集。
-
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 推荐的目标检测格式,了解如何准备此文件的教程。
-
class
gluoncv.data.
RecordFileDetection
(filename, coord_normalized=True)[source]¶ 从记录文件加载的检测数据集。支持的记录文件使用与
mxnet.image.ImageDetIter()
和mxnet.io.ImageDetRecordIter()
相同的格式。请查看 1. GluonCV 和 MXNet 推荐的目标检测格式,了解如何准备此文件的教程。
注意
我们建议您只在熟悉记录文件时使用
RecordFileDetection
。- 参数
示例
>>> record_dataset = RecordFileDetection('train.rec') >>> img, label = record_dataset[0] >>> print(img.shape, label.shape) (512, 512, 3) (1, 5)