gluoncv.data.batchify¶
Batchify 函数可用于将数据集转换为可以高效处理的 mini-batch。
在计算机视觉任务中,图像/标签通常具有不同的形状。GluonCV 提供了一系列方便的 batchify 函数,适用于各种情况。
Batch 加载器¶
堆叠输入数据样本以构建 batch。 |
|
沿指定的填充轴填充输入 ndarrays 并将其堆叠以获得输出。函数的输入将是 N 个样本。每个样本应包含一个单一元素,可以是 1) numpy.ndarray, 2) mxnet.nd.NDArray, 3) 数字列表。你可以设置 axis 和 pad_val 来确定填充轴和值。数组将在 axis 处被填充到最大维度,然后堆叠形成最终输出。此外,如果 ret_length 打开,函数将在 axis 处输出原始维度。:param axis: 用于填充数组的轴。数组将在 pad_axis 处填充到最大维度。例如,假设输入数组的形状为 (10, 8, 5), (6, 8, 5), (3, 8, 5),pad_axis 为 0。每个输入将被填充到 (10, 8, 5),然后堆叠形成最终输出。:type axis: int 或 tuple, 默认 0 :param pad_val: 填充值。:type pad_val: float 或 int, 默认 0 :param num_shards: 要创建的分片数。每个分片独立填充。:type num_shards: int, 默认 1 :param ret_length: 是否在输出中返回有效长度。:type ret_length: bool, 默认 False。 |
|
松散地返回输入数据样本列表。 |
|
包装多个 batchify 函数,形成一个函数,分别应用于每个输入字段的每个输入函数。 |
API 参考¶
Batchify 函数。它们可以在 Gluon 数据加载器中使用,以帮助将单个样本组合成 batch 进行快速处理。
-
class
gluoncv.data.batchify.
Append
(expand=True, batch_axis=0)[source]¶ 松散地返回输入数据样本列表。对任何输入样本的形状都没有限制,但是,由于输出具有不同的形状,你只能应用单个 batch 操作。
示例
>>> a = [1, 2, 3, 4] >>> b = [4, 5, 6] >>> c = [8, 2] >>> batchify.Append()([a, b, c]) [ [[1. 2. 3. 4.]] <NDArray 1x4 @cpu_shared(0)>, [[4. 5. 6.]] <NDArray 1x3 @cpu_shared(0)>, [[8. 2.]] <NDArray 1x2 @cpu_shared(0)> ]
-
class
gluoncv.data.batchify.
FasterRCNNTrainBatchify
(net, num_shards=1)[source]¶ Batchify 包含 5 个元素的 FasterRCNN 数据:img, bbox, rpn_cls_targets, rpn_box_targets 和 rpn_box_masks :param net: 用于推断输出形状的 faster-rcnn 网络。:type net: mxnet.gluon.HybridBlock. :param num_shards: 分片数。每个分片对应一个设备。:type num_shards: int, 默认 1
-
class
gluoncv.data.batchify.
Pad
(axis=0, pad_val=0, num_shards=1, ret_length=False)[source]¶ 沿指定的填充轴填充输入 ndarrays 并将其堆叠以获得输出。函数的输入将是 N 个样本。每个样本应包含一个单一元素,可以是 1) numpy.ndarray, 2) mxnet.nd.NDArray, 3) 数字列表。你可以设置 axis 和 pad_val 来确定填充轴和值。数组将在 axis 处填充到最大维度,然后堆叠形成最终输出。此外,如果 ret_length 打开,函数将在 axis 处输出原始维度。:param axis: 用于填充数组的轴。数组将在
pad_axis 处填充到最大维度。例如,假设输入数组的形状为 (10, 8, 5), (6, 8, 5), (3, 8, 5),pad_axis 为 0。每个输入将被填充到 (10, 8, 5),然后堆叠形成最终输出。
- 参数
示例
>>> from gluoncv.data import batchify >>> # Inputs are multiple lists >>> a = [1, 2, 3, 4] >>> b = [4, 5, 6] >>> c = [8, 2] >>> batchify.Pad()([a, b, c]) [[ 1 2 3 4] [ 4 5 6 0] [ 8 2 0 0]] <NDArray 3x4 @cpu(0)> >>> # Also output the lengths >>> a = [1, 2, 3, 4] >>> b = [4, 5, 6] >>> c = [8, 2] >>> batchify.Pad(ret_length=True)([a, b, c]) ( [[1 2 3 4] [4 5 6 0] [8 2 0 0]] <NDArray 3x4 @cpu(0)>, [4 3 2] <NDArray 3 @cpu(0)>) >>> # Inputs are multiple ndarrays >>> import numpy as np >>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> b = np.array([[5, 8], [1, 2]]) >>> batchify.Pad(axis=1, pad_val=-1)([a, b]) [[[ 1 2 3 4] [ 5 6 7 8]] [[ 5 8 -1 -1] [ 1 2 -1 -1]]] <NDArray 2x2x4 @cpu(0)> >>> # Inputs are multiple NDArrays >>> import mxnet as mx >>> a = mx.nd.array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> b = mx.nd.array([[5, 8], [1, 2]]) >>> batchify.Pad(axis=1, pad_val=-1)([a, b]) [[[ 1. 2. 3. 4.] [ 5. 6. 7. 8.]] [[ 5. 8. -1. -1.] [ 1. 2. -1. -1.]]] <NDArray 2x2x4 @cpu(0)>
-
class
gluoncv.data.batchify.
Stack
[source]¶ 堆叠输入数据样本以构建 batch。N 个输入样本必须具有相同的形状/长度,并将被堆叠以构建一个 batch。.. rubric:: 示例
>>> from gluoncv.data import batchify >>> # Stack multiple lists >>> a = [1, 2, 3, 4] >>> b = [4, 5, 6, 8] >>> c = [8, 9, 1, 2] >>> batchify.Stack()([a, b, c]) [[1. 2. 3. 4.] [4. 5. 6. 8.] [8. 9. 1. 2.]] <NDArray 3x4 @cpu(0)> >>> # Stack multiple numpy.ndarrays >>> import numpy as np >>> a = np.array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> b = np.array([[5, 6, 7, 8], [1, 2, 3, 4]]) >>> batchify.Stack()([a, b]) [[[1. 2. 3. 4.] [5. 6. 7. 8.]] [[5. 6. 7. 8.] [1. 2. 3. 4.]]] <NDArray 2x2x4 @cpu(0)> >>> # Stack multiple NDArrays >>> import mxnet as mx >>> a = mx.nd.array([[1, 2, 3, 4], [5, 6, 7, 8]]) >>> b = mx.nd.array([[5, 6, 7, 8], [1, 2, 3, 4]]) >>> batchify.Stack()([a, b]) [[[1. 2. 3. 4.] [5. 6. 7. 8.]] [[5. 6. 7. 8.] [1. 2. 3. 4.]]] <NDArray 2x2x4 @cpu(0)>
-
class
gluoncv.data.batchify.
Tuple
(fn, *args)[source]¶ 包装多个 batchify 函数,形成一个函数,分别应用于每个输入字段的每个输入函数。每个数据样本应该是一个列表或元组,包含多个属性。存储在 Tuple 中的第 i 个 batchify 函数将应用于第 i 个属性。例如,每个数据样本是 (nd_data, label)。你可以使用 Wrap(DataBatchify, LabelBatchify) 包装两个 batchify 函数,以分别 batchify nd_data 和 label。:param fn: 要包装的 batchify 函数。:type fn: list 或 tuple 或 callable :param *args: 要包装的附加 batchify 函数。:type *args: tuple of callable
示例
>>> from gluoncv.data import batchify >>> a = ([1, 2, 3, 4], 0) >>> b = ([5, 7], 1) >>> c = ([1, 2, 3, 4, 5, 6, 7], 0) >>> batchify.Tuple(batchify.Pad(), batchify.Stack())([a, b]) ( [[1 2 3 4] [5 7 0 0]] <NDArray 2x4 @cpu(0)>, [0. 1.] <NDArray 2 @cpu(0)>) >>> # Input can also be a list >>> batchify.Tuple([batchify.Pad(), batchify.Stack()])([a, b]) ( [[1 2 3 4] [5 7 0 0]] <NDArray 2x4 @cpu(0)>, [0. 1.] <NDArray 2 @cpu(0)>) >>> # Another example >>> a = ([1, 2, 3, 4], [5, 6], 1) >>> b = ([1, 2], [3, 4, 5, 6], 0) >>> c = ([1], [2, 3, 4, 5, 6], 0) >>> batchify.Tuple(batchify.Pad(), batchify.Pad(), batchify.Stack())([a, b, c]) ( [[1 2 3 4] [1 2 0 0] [1 0 0 0]] <NDArray 3x4 @cpu(0)>, [[5 6 0 0 0] [3 4 5 6 0] [2 3 4 5 6]] <NDArray 3x5 @cpu(0)>, [1. 0. 0.] <NDArray 3 @cpu(0)>)