gluoncv.nn

神经网络组件。

提示

此处列出的并非所有组件都是 HybridBlock,这意味着其中一些是不可混合化的。但是,我们正尽最大努力确保推理期间所需的组件是可混合化的,以便整个网络可以导出并在其他语言中运行。

例如,编码器通常不可混合化,但仅在训练期间需要。相比之下,解码器大多是 HybridBlock

边界框

应用边界框相关功能的模块。

BBoxCornerToCenter

将角点框转换为中心框。

BBoxCenterToCorner

将中心框转换为角点框。

BBoxSplit

将边界框分割成 4 列。

BBoxArea

计算边界框的面积。

编码器和解码器

编码器用于在应用损失函数之前对训练目标进行编码。解码器用于通过反转编码器中的操作来恢复预测值。它们通常成对出现以确保结果一致。

NormalizedBoxCenterEncoder

使用归一化的中心偏移量对边界框训练目标进行编码。

NormalizedBoxCenterDecoder

使用归一化的中心偏移量对边界框训练目标进行解码。

MultiClassEncoder

根据匹配结果对分类训练目标进行编码。

MultiClassDecoder

解码分类结果。

MultiPerClassDecoder

解码分类结果。

SigmoidClassEncoder

为 SigmoidCrossEntropy 损失编码类别预测标签。

特征

特征层是组件,它们要么将部分网络提取为特征提取器,要么通过新层扩展网络。

FeatureExtractor

特征提取器。

FeatureExpander

带有附加层的特征提取器。

匹配器

匹配器常用于目标检测任务,其目标是找到锚框(在目标检测中非常流行)与真实框之间的匹配关系。

CompositeMatcher

结合多种策略的匹配器。

BipartiteMatcher

实现二分匹配策略的匹配器。

MaximumMatcher

实现最大匹配策略的匹配器。

预测器

预测器是常用的神经网络组件,专门用于预测值。根据目的不同,它可以是卷积层或全连接层。

ConvPredictor

卷积预测器。

FCPredictor

全连接预测器。

采样器

采样器常用于匹配层之后,用于确定正样本/负样本/忽略样本。

例如,NaiveSampler 简单地将所有匹配的样本作为正样本返回,所有未匹配的样本作为负样本返回。

这种行为有时容易出现问题,因为训练目标是不平衡的。有关更高级的采样策略,请参阅 OHEMSamplerQuotaSampler

NaiveSampler

一个简单的采样器,采用所有现有的匹配结果。

OHEMSampler

一个实现在线难例挖掘 (Online Hard-negative mining) 的采样器。

QuotaSampler

处理正样本和负样本有限配额的采样器。

API 参考

边界框操作符

class gluoncv.nn.bbox.BBoxArea(axis=- 1, fmt='corner', **kwargs)[source]

计算边界框的面积。

参数
  • fmt (str, 默认为 corner) – 边界框格式,可以是 {‘center’, ‘corner’}。‘center’: {x, y, width, height} ‘corner’: {xmin, ymin, xmax, ymax}

  • axis (int, 默认为 -1) – 边界框的有效轴。默认为 -1 (最后一个维度)。

返回值

返回类型

BxNx1 NDArray

hybrid_forward(F, x)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluoncv.nn.bbox.BBoxBatchIOU(axis=- 1, fmt='corner', offset=0, eps=1e-15, **kwargs)[source]

批量边界框 IOU。

参数
  • axis (int) – 长度为 4 的边界框维度所在的轴。

  • fmt (str) – BBox 编码格式,可以是 ‘corner’ 或 ‘center’。‘corner’: (xmin, ymin, xmax, ymax) ‘center’: (center_x, center_y, width, height)

  • offset (float, 默认为 0) – 如果在计算宽度和高度时需要 +1,则使用偏移量,否则使用 0。

  • eps (float, 默认为 1e-15) – 极小值,用于避免除以 0。

hybrid_forward(F, a, b)[source]

计算每个批次的 IOU

参数
  • a (mxnet.nd.NDArraymxnet.sym.Symbol) – (B, N, 4) 第一个输入。

  • b (mxnet.nd.NDArraymxnet.sym.Symbol) – (B, M, 4) 第二个输入。

返回值

(B, N, M) IOU 数组。

返回类型

mxnet.nd.NDArray 或 mxnet.sym.Symbol

class gluoncv.nn.bbox.BBoxCenterToCorner(axis=- 1, split=False)[source]

将中心框转换为角点框。角点框编码为 (xmin, ymin, xmax, ymax) 中心框编码为 (center_x, center_y, width, height)

参数
  • split (bool) – 处理后是否将框分割成单独的元素。

  • axis (int, 默认为 -1) – 边界框的有效轴。默认为 -1 (最后一个维度)。

返回值

返回类型

如果 split 为 False,则返回 BxNx4 NDArray,如果 split 为 True,则返回 4 个 BxNx1 NDArray。

hybrid_forward(F, x)[source]

Hybrid 前向计算

class gluoncv.nn.bbox.BBoxClipToImage(**kwargs)[source]

将边界框坐标裁剪到图像边界。如果提供并填充了多张图像,则必须有表示精确图像形状的额外输入。

hybrid_forward(F, x, img)[source]

如果图像被填充,则必须有用于裁剪的额外输入

参数
  • x ((B, N, 4) 边界框坐标。) –

  • img ((B, C, H, W) 图像张量。) –

返回值

返回类型

(B, N, 4) 边界框坐标。

class gluoncv.nn.bbox.BBoxCornerToCenter(axis=- 1, split=False)[source]

将角点框转换为中心框。角点框编码为 (xmin, ymin, xmax, ymax) 中心框编码为 (center_x, center_y, width, height)

参数
  • split (bool) – 处理后是否将框分割成单独的元素。

  • axis (int, 默认为 -1) – 边界框的有效轴。默认为 -1 (最后一个维度)。

返回值

返回类型

如果 split 为 False,则返回 BxNx4 NDArray,如果 split 为 True,则返回 4 个 BxNx1 NDArray

hybrid_forward(F, x)[source]

Hybrid 前向计算

class gluoncv.nn.bbox.BBoxSplit(axis, squeeze_axis=False, **kwargs)[source]

将边界框分割成 4 列。

参数
  • axis (int, 默认为 -1) – 分割边界框所在的轴。默认为 -1 (最后一个维度)。

  • squeeze_axis (布尔值, 默认为 False) – 如果为 True,则从输出数组的形状中移除长度为 1 的轴。注意,将 squeeze_axis 设置为 true 仅在分割所在的 axis 上移除长度为 1 的轴。此外,只有当 input.shape[axis] == num_outputs 时才能将 squeeze_axis 设置为 true

hybrid_forward(F, x)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluoncv.nn.bbox.NumPyBBoxCornerToCenter(axis=- 1, split=False)[source]

使用 numpy 将角点框转换为中心框。角点框编码为 (xmin, ymin, xmax, ymax) 中心框编码为 (center_x, center_y, width, height)

参数
  • split (bool) – 处理后是否将框分割成单独的元素。

  • axis (int, 默认为 -1) – 边界框的有效轴。默认为 -1 (最后一个维度)。

返回值

返回类型

如果 split 为 False,则返回 BxNx4 NDArray,如果 split 为 True,则返回 4 个 BxNx1 NDArray

编码器和解码器函数。编码器在训练期间使用,用于分配训练目标。解码器在测试/验证期间使用,用于将预测结果转换回正常框等。

class gluoncv.nn.coder.CenterNetDecoder(topk=100, scale=4.0)[source]

CenterNet 解码器。

参数
  • topk (int) – 只保留 topk 个结果。

  • scale (float, 默认为 4.0) – 网络下采样比例。

hybrid_forward(F, x, wh, reg)[source]

解码器的前向计算

class gluoncv.nn.coder.MultiClassDecoder(axis=- 1, thresh=0.01)[source]

解码分类结果。

此解码器必须与 MultiClassEncoder 配合使用才能重构有效的标签。解码器期望的结果是 logits 之后的结果,例如 Softmax。

参数
  • axis (int) – 按类别划分结果的轴。

  • thresh (float) – Softmax 后分数的置信度阈值。小于 thresh 的分数标记为 0,相应的 cls_id 标记为无效类别 id -1

hybrid_forward(F, x)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluoncv.nn.coder.MultiClassEncoder(ignore_label=- 1)[source]

根据匹配结果对分类训练目标进行编码。

此编码器将匹配的边界框的训练目标分配为真实框标签 + 1,负样本分配为标签 0。忽略的样本将分配 ignore_label,默认值为 -1。

参数

ignore_label (float) – 分配给未匹配的样本,它们在训练期间既不是正样本也不是负样本,应在损失函数中排除。默认为 -1。

hybrid_forward(F, samples, matches, refs)[source]

HybridBlock,正确处理多批次

参数
  • samples ((B, N), 值 +1 (正样本), -1 (负样本), 0 (忽略样本)) –

  • matches ((B, N), 值范围 [0, M)) –

  • refs ((B, M), 值范围 [0, num_fg_class), 不包含背景) –

返回值

目标

返回类型

(B, N),值范围 [0, num_fg_class + 1),包含背景

class gluoncv.nn.coder.MultiPerClassDecoder(num_class, axis=- 1, thresh=0.01)[source]

解码分类结果。

此解码器必须与 MultiClassEncoder 配合使用才能重构有效的标签。解码器期望的结果是 logits 之后的结果,例如 Softmax。此版本与 gluoncv.nn.coder.MultiClassDecoder 的区别如下:

对于每个位置(锚框),每个前景类别都可以有自己的结果,而不是强制只能有一个最佳结果。例如,对于一个包含背景的 5 类别预测(总共 6 个类别),比如 (0.5, 0.1, 0.2, 0.1, 0.05, 0.05) 分别代表 (bg, apple, orange, peach, grape, melon),MultiClassDecoder 只会产生一个类别 id 和分数,即 (orange-0.2)。MultiPerClassDecoder 会单独产生 5 个结果:(apple-0.1, orange-0.2, peach-0.1, grape-0.05, melon-0.05)。

参数
  • num_class (int) – 类别数量,包含背景。

  • axis (int) – 按类别划分结果的轴。

  • thresh (float) – Softmax 后分数的置信度阈值。小于 thresh 的分数标记为 0,相应的 cls_id 标记为无效类别 id -1

hybrid_forward(F, x)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluoncv.nn.coder.NormalizedBoxCenterDecoder(stds=(0.1, 0.1, 0.2, 0.2), convert_anchor=False, clip=None, minimal_opset=False)[source]

使用归一化的中心偏移量对边界框训练目标进行解码。此解码器必须与具有相同 stds 的 NormalizedBoxCenterEncoder 配合使用,才能获得正确重构的边界框。

返回的边界框使用角点类型:x_{min}, y_{min}, x_{max}, y_{max}

参数
  • stds (大小为 4 的类似数组) – 用于除以编码值的标准差值,默认为 (0.1, 0.1, 0.2, 0.2)。

  • clip (float, 默认为 None) – 如果给定,边界框目标将被裁剪到此值。

  • convert_anchor (布尔值, 默认为 False) – 是否将锚框从角点格式转换为中心格式。

  • minimal_opset (bool) – 我们有时会添加特殊算子以加速训练/推理,但对于导出到第三方编译器,我们希望使用最广泛使用的算子。如果 minimal_opsetTrue,网络将使用一组最少且适用于例如 TVM 的算子。

hybrid_forward(F, x, anchors)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluoncv.nn.coder.NormalizedBoxCenterEncoder(stds=(0.1, 0.1, 0.2, 0.2), means=(0.0, 0.0, 0.0, 0.0), **kwargs)[source]

使用归一化的中心偏移量对边界框训练目标进行编码。

输入边界框使用角点类型:x_{min}, y_{min}, x_{max}, y_{max}

参数
  • stds (大小为 4 的类似数组) – 用于除以编码值的标准差值,默认为 (0.1, 0.1, 0.2, 0.2)。

  • means (大小为 4 的类似数组) – 从编码值中减去的均值,默认为 (0., 0., 0., 0.)。

hybrid_forward(F, samples, matches, anchors, refs)[source]

由于使用了 matches.shape,不是 HybridBlock

参数
  • samples ((B, N) 值 +1 (正样本), -1 (负样本), 0 (忽略)) –

  • matches ((B, N) 值范围 [0, M)) –

  • anchors ((B, N, 4) 以角点编码) –

  • refs ((B, M, 4) 以角点编码) –

返回值

  • targets ((B, N, 4) 根据匹配结果将锚框转换为选定的 refs)

  • masks ((B, N, 4) 只有正样本锚框有目标)

class gluoncv.nn.coder.NormalizedPerClassBoxCenterEncoder(num_class, max_pos=128, per_device_batch_size=1, stds=(0.1, 0.1, 0.2, 0.2), means=(0.0, 0.0, 0.0, 0.0))[source]

使用归一化的中心偏移量对边界框训练目标进行编码。

输入边界框使用角点类型:x_{min}, y_{min}, x_{max}, y_{max}

参数
  • max_pos (int, 默认为 128) – 正样本数量上限。

  • per_device_batch_size (int, 默认为 1) – 每个设备的批次大小

  • stds (大小为 4 的类似数组) – 用于除以编码值的标准差值,默认为 (0.1, 0.1, 0.2, 0.2)。

  • means (大小为 4 的类似数组) – 从编码值中减去的均值,默认为 (0., 0., 0., 0.)。

hybrid_forward(F, samples, matches, anchors, labels, refs, means=None, stds=None)[source]

按类别编码 BBox (每个类别一个条目)

参数
  • samples ((B, N) 值 +1 (正样本), -1 (负样本), 0 (忽略)) –

  • matches ((B, N) 值范围 [0, M)) –

  • anchors ((B, N, 4) 以角点编码) –

  • labels ((B, N) 值范围 [0, self._num_class), 不包含背景) –

  • refs ((B, M, 4) 以角点编码) –

返回值

  • targets ((B, N_pos, C, 4) 根据匹配结果将锚框转换为选定的 refs)

  • masks ((B, N_pos, C, 4) 只有正确类别的正样本锚框有目标)

  • indices ((B, N_pos) 正样本索引)

class gluoncv.nn.coder.NumPyNormalizedBoxCenterEncoder(stds=(0.1, 0.1, 0.2, 0.2), means=(0.0, 0.0, 0.0, 0.0))[source]

使用 numpy 通过归一化中心偏移量对边界框训练目标进行编码。

输入边界框使用角点类型:x_{min}, y_{min}, x_{max}, y_{max}

参数
  • stds (大小为 4 的类似数组) – 用于除以编码值的标准差值,默认为 (0.1, 0.1, 0.2, 0.2)。

  • means (大小为 4 的类似数组) – 从编码值中减去的均值,默认为 (0., 0., 0., 0.)。

class gluoncv.nn.coder.SigmoidClassEncoder(**kwargs)[source]

为 SigmoidCrossEntropy 损失编码类别预测标签。

特征提取块。特征或多特征提取是目标检测中的关键组件。类别预测器/框预测器通常应用于特征层。良好的特征提取机制对性能至关重要。

class gluoncv.nn.feature.FPNFeatureExpander(network, outputs, num_filters, use_1x1=True, use_upsample=True, use_elewadd=True, use_p6=False, p6_conv=True, no_bias=True, pretrained=False, norm_layer=None, norm_kwargs=None, ctx=cpu(0), inputs=('data'))[source]

带有附加层的特征提取器。这是专门为实现自上而下通路和横向连接的目标检测特征金字塔网络指定的。

参数
  • network (strHybridBlockSymbol) – 逻辑链:如果 network 是字符串,则从 gluon.model_zoo.vision 加载。如果 network 是 HybridBlock,则转换为 Symbol。

  • outputs (strstr 列表) – 要提取为特征的层的名称

  • num_filters (int 列表 e.g. [256, 256, 256, 256]) – 要附加的滤波器数量。

  • use_1x1 (bool) – 是否使用 1x1 卷积

  • use_upsample (bool) – 是否使用上采样

  • use_elewadd (float) – 是否使用逐元素相加操作

  • use_p6 (bool) – 是否使用 P6 阶段,这用于原始论文中的 RPN 实验

  • p6_conv (bool) – 如果启用 P6 阶段,是否使用卷积,或者仅使用最大池化。

  • no_bias (bool) – 卷积操作是否使用偏置。

  • norm_layer (HybridBlockSymbolBlock) – 归一化层类型。

  • norm_kwargs (dict) – 归一化层的参数。

  • pretrained (bool) – 如果为 True,则使用 gluon.model_zoo 中的预训练参数。

  • ctx (Context) – 上下文,例如 mxnet.cpu(), mxnet.gpu(0)。

  • inputs (str 列表) – 网络输入变量的名称。

class gluoncv.nn.feature.FeatureExpander(network, outputs, num_filters, use_1x1_transition=True, use_bn=True, reduce_ratio=1.0, min_depth=128, global_pool=False, pretrained=False, ctx=cpu(0), inputs=('data'), **kwargs)[source]

带有附加层的特征提取器。这在视觉网络中非常常见,其中额外的分支连接到骨干网络。

参数
  • network (strHybridBlockSymbol) – 逻辑链:如果 network 是字符串,则从 gluoncv.model_zoo 加载。如果 network 是 HybridBlock,则转换为 Symbol。

  • outputs (strstr 列表) – 要提取为特征的层的名称

  • num_filters (int 列表) – 要附加的滤波器数量。

  • use_1x1_transition (bool) – 附加层之间是否使用 1x1 卷积。它可以有效地减小网络大小。

  • use_bn (bool) – 附加层之间是否使用 BatchNorm。

  • reduce_ratio (float) – 过渡层的通道缩减比例。

  • min_depth (int) – 过渡层的最小通道数。

  • global_pool (bool) – 是否使用全局池化作为最后一层。

  • pretrained (bool) – 如果为 True,则使用 gluon.model_zoo 中的预训练参数。

  • ctx (Context) – 上下文,例如 mxnet.cpu(), mxnet.gpu(0)。

  • inputs (str 列表) – 网络输入变量的名称。

pretrained (bool) – 如果为 True,则使用 gluon.model_zoo 中的预训练参数。

特征提取器。

参数
  • ctx (Context) – 上下文,例如 mxnet.cpu(), mxnet.gpu(0)。

  • outputs (strstr 列表) – 要提取为特征的层的名称

  • inputs (str 列表Symbol 列表) – 网络的输入。

  • pretrained (bool) – 使用 gluon.model_zoo 中的预训练参数

  • ctx (Context) – 上下文,例如 mxnet.cpu(), mxnet.gpu(0)。

用于分类/框预测的预测器。

class gluoncv.nn.predictor.ConvPredictor(num_channel, kernel=(3, 3), pad=(1, 1), stride=(1, 1), activation=None, use_bias=True, in_channels=0, **kwargs)[source]

卷积预测器。卷积预测器广泛用于目标检测。它可以用于预测分类分数(每个类别 1 个通道)或框预测器(通常每个框 4 个通道)。输出形状为 (N, num_channel, H, W)。

参数
  • num_channel (int) – 卷积通道数。

  • kernel ((int, int) 元组, 默认为 (3, 3)) – 卷积核大小,格式为 (H, W)。

  • pad ((int, int) 元组, 默认为 (1, 1)) – 卷积填充大小,格式为 (H, W)。

  • stride ((int, int) 元组, 默认为 (1, 1)) – 卷积步幅大小,格式为 (H, W)。

  • activation (str, 可选) – 卷积后的可选激活函数,例如 ‘relu’。

  • use_bias (bool) – 卷积中是否使用偏置。如果后面接 BatchNorm,则不是必需的。

  • in_channels (int, 默认为 0) – 此层的输入通道数。如果未指定,初始化将延迟到第一次调用 forward 时,in_channels 将从输入数据的形状推断。

hybrid_forward(F, x)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

class gluoncv.nn.predictor.FCPredictor(num_output, activation=None, use_bias=True, **kwargs)[source]

全连接预测器。全连接预测器用于忽略空间信息,并将输出固定大小的预测。

参数
  • num_output (int) – 全连接输出数量。

  • activation (str, 可选) – 卷积后的可选激活函数,例如 ‘relu’。

  • use_bias (bool) – 卷积中是否使用偏置。如果后面接 BatchNorm,则不是必需的。

activation (str, 可选) – 可选的激活函数,例如 ‘relu’。

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

use_bias (bool) – 在全连接层中使用偏置。

hybrid_forward(F, x)[source]

实现二分匹配策略的匹配器。

参数
  • 用于目标分配的匹配器。匹配器常用于目标检测中的锚框-真实框匹配。匹配过程是训练目标分配的先决条件。通常在测试期间不需要匹配。

  • class gluoncv.nn.matcher.BipartiteMatcher(threshold=1e-12, is_ascend=False, eps=1e-12, share_max=True)[source]

  • threshold (float) – 用于忽略无效填充的阈值

  • is_ascend (bool) – 是否按升序排列匹配顺序。默认为 False。

eps (float) – 用于浮点数比较的 epsilon 值

share_max (bool, 默认为 True) – 锚框/真实框之间的最大重叠可以由多个真实框共享。我们建议 Fast(er)-RCNN 系列使用 True,而对于 SSD,默认为 False 会获得更好的结果。

hybrid_forward(F, x)[source]

二分匹配

xNDArray 或 Symbol

结合多种策略的匹配器。

参数

形状为 (N, M) 的 IOU 重叠,支持批量处理。

class gluoncv.nn.matcher.CompositeMatcher(matchers)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

matchers (Matcher 列表) – Matcher 是用于匹配两组框的 Block/HybridBlock。

实现最大匹配策略的匹配器。

参数

hybrid_forward(F, x)[source]

class gluoncv.nn.matcher.MaximumMatcher(threshold)[source]

重写此方法以构建此 Block 的符号图。

参数
  • x (SymbolNDArray) – 第一个输入张量。

  • *args (Symbol 列表NDArray 列表) – 额外的输入张量。

threshold (float) – 匹配阈值。

hybrid_forward(F, x)[source]

用于选择正样本/负样本/忽略样本的采样器。此模块用于在训练期间选择样本。根据不同的策略,我们希望选择不同数量的样本作为正样本、负样本或忽略(不关心)样本。目的是在某些情况下减轻训练目标不平衡的问题。采样器的输出是与匹配结果形状相同的 NDArray。注意:1 表示正样本,-1 表示负样本,0 表示忽略。

class gluoncv.nn.sampler.NaiveSampler[source]

Hybrid 前向计算

一个简单的采样器,采用所有现有的匹配结果。在这种情况下没有忽略的样本。

hybrid_forward(F, x)[source]

参数
  • class gluoncv.nn.sampler.OHEMSampler(ratio, min_samples=0, thresh=0.5)[source]

  • 一个实现在线难例挖掘 (Online Hard-negative mining) 的采样器。如论文 https://arxiv.org/abs/1604.03540 所述。

  • ratio (float) – 负样本与正样本的比例。建议值 >= 1.0。

min_samples (int, 默认为 0) – 无论正样本数量如何,都要选择的最小样本数。例如,如果正样本数量为 0,我们有时仍然希望选择一些 num_negative 样本。

thresh (float, 默认为 0.5) – 所选负样本的 IOU 重叠阈值。IOU 不得超过此阈值,以免将匹配良好的锚框选为负样本。

forward(x, logits, ious)[source]

处理正样本和负样本有限配额的采样器。

参数
  • num_sample (int, 默认值是 128) – RCNN 目标的样本数量。

  • pos_iou_thresh (float, 默认值是 0.5) – IOU 大于 pos_iou_thresh 的候选框被认为是正样本。

  • neg_iou_thresh_high (float, 默认值是 0.5) – IOU 小于 neg_iou_thresh_high 且大于 neg_iou_thresh_low 的候选框被认为是负样本。IOU 在 pos_iou_threshneg_iou_thresh 之间的候选框将被忽略。

  • neg_iou_thresh_low (float, 默认值是 0.0) – 参见 neg_iou_thresh_high

  • pos_ratio (float, 默认值是 0.25) – pos_ratio 定义要采样的正样本数量(pos_ratio * num_sample)。

  • neg_ratio (floatNone) – neg_ratio 定义要采样的负样本数量(pos_ratio * num_sample)。如果提供 None,则等于 1 - pos_ratio

  • fill_negative (bool) – 如果为 True,负样本将填充正样本不足造成的空缺。例如,如果 num_sample 是 100,pos_rationeg_ratio 都为 0.5。可用的正样本和负样本数量分别是 10 和 10000,这是典型的值。现在,输出的正样本是 10(完整),因为这小于 50(100 * 0.5),负样本将填充剩余的 40 个位置。如果 fill_negative == False,这 40 个位置将填充 -1(忽略)。

forward(matches, ious)[source]

配额采样器

matchesNDArray 或 Symbol

匹配结果,正数表示正匹配,-1 表示未匹配。

iousNDArray 或 Symbol

二分匹配

NDArray 或 Symbol

采样结果,与 matches 形状相同。1 表示正样本,-1 表示负样本,0 表示忽略。

class gluoncv.nn.sampler.QuotaSamplerOp(num_sample, pos_thresh, neg_thresh_high=0.5, neg_thresh_low=- inf, pos_ratio=0.5, neg_ratio=None, fill_negative=True)[source]

处理正样本和负样本有限配额的采样器。

这是一个在 HybridBlock 中使用的自定义操作符。

参数
  • num_sample (int, 默认值是 128) – RCNN 目标的样本数量。

  • pos_iou_thresh (float, 默认值是 0.5) – IOU 大于 pos_iou_thresh 的候选框被认为是正样本。

  • neg_iou_thresh_high (float, 默认值是 0.5) – IOU 小于 neg_iou_thresh_high 且大于 neg_iou_thresh_low 的候选框被认为是负样本。IOU 在 pos_iou_threshneg_iou_thresh 之间的候选框将被忽略。

  • neg_iou_thresh_low (float, 默认值是 0.0) – 参见 neg_iou_thresh_high

  • pos_ratio (float, 默认值是 0.25) – pos_ratio 定义要采样的正样本数量(pos_ratio * num_sample)。

  • neg_ratio (floatNone) – neg_ratio 定义要采样的负样本数量(pos_ratio * num_sample)。如果提供 None,则等于 1 - pos_ratio

  • fill_negative (bool) – 如果为 True,负样本将填充正样本不足造成的空缺。例如,如果 num_sample 是 100,pos_rationeg_ratio 都为 0.5。可用的正样本和负样本数量分别是 10 和 10000,这是典型的值。现在,输出的正样本是 10(完整),因为这小于 50(100 * 0.5),负样本将填充剩余的 40 个位置。如果 fill_negative == False,这 40 个位置将填充 -1(忽略)。

backward(req, out_grad, in_data, out_data, in_grad, aux)[source]

反向传播接口。创建新操作符时可以覆盖此方法。

参数
  • req (str 列表) – 如何赋值给 in_grad。可以是 ‘null’、‘write’ 或 ‘add’。你可以选择使用 self.assign(dst, req, src) 来处理。

  • out_grad (NDArray 列表) – 反向传播的输入和输出。参见文档中对应的 Operator::Backward 参数。

  • in_data (NDArray 列表) – 反向传播的输入和输出。参见文档中对应的 Operator::Backward 参数。

  • out_data (NDArray 列表) – 反向传播的输入和输出。参见文档中对应的 Operator::Backward 参数。

  • in_grad (NDArray 列表) – 反向传播的输入和输出。参见文档中对应的 Operator::Backward 参数。

  • aux (NDArray 列表) – 反向传播的输入和输出。参见文档中对应的 Operator::Backward 参数。

forward(is_train, req, in_data, out_data, aux)[source]

配额采样器

in_data: array-like of Symbol

[matches, ious],见下文。

matchesNDArray 或 Symbol

匹配结果,正数表示正匹配,-1 表示未匹配。

iousNDArray 或 Symbol

二分匹配

NDArray 或 Symbol

采样结果,与 matches 形状相同。1 表示正样本,-1 表示负样本,0 表示忽略。

class gluoncv.nn.sampler.QuotaSamplerProp(num_sample, pos_thresh, neg_thresh_high=0.5, neg_thresh_low=0.0, pos_ratio=0.5, neg_ratio=None, fill_negative=True)[source]

QuotaSampleOp 的属性。

参数
  • num_sample (int, 默认值是 128) – RCNN 目标的样本数量。

  • pos_iou_thresh (float, 默认值是 0.5) – IOU 大于 pos_iou_thresh 的候选框被认为是正样本。

  • neg_iou_thresh_high (float, 默认值是 0.5) – IOU 小于 neg_iou_thresh_high 且大于 neg_iou_thresh_low 的候选框被认为是负样本。IOU 在 pos_iou_threshneg_iou_thresh 之间的候选框将被忽略。

  • neg_iou_thresh_low (float, 默认值是 0.0) – 参见 neg_iou_thresh_high

  • pos_ratio (float, 默认值是 0.25) – pos_ratio 定义要采样的正样本数量(pos_ratio * num_sample)。

  • neg_ratio (floatNone) – neg_ratio 定义要采样的负样本数量(pos_ratio * num_sample)。如果提供 None,则等于 1 - pos_ratio

  • fill_negative (bool) – 如果为 True,负样本将填充正样本不足造成的空缺。例如,如果 num_sample 是 100,pos_rationeg_ratio 都为 0.5。可用的正样本和负样本数量分别是 10 和 10000,这是典型的值。现在,输出的正样本是 10(完整),因为这小于 50(100 * 0.5),负样本将填充剩余的 40 个位置。如果 fill_negative == False,这 40 个位置将填充 -1(忽略)。

create_operator(ctx, in_shapes, in_dtypes)[source]

在给定上下文、输入形状和输入数据类型的情况下,创建一个执行实际计算的操作符。

infer_shape(in_shape)[source]

infer_shape 接口。创建新操作符时可以覆盖此方法。

参数

in_shape (列表) – 按 list_arguments 中声明的相同顺序排列的参数形状列表。

返回值

  • in_shape (列表) – 参数形状列表。可以从 in_shape 修改。

  • out_shape (列表) – 根据 in_shape 计算出的输出形状列表,按 list_outputs 中声明的相同顺序排列。

  • aux_shape (可选, 列表) – 根据 in_shape 计算出的 aux 形状列表,按 list_auxiliary_states 中声明的相同顺序排列。

infer_type(in_type)[source]

infer_type 接口。覆盖此方法以创建新操作符

参数

in_type (np.dtype 列表) – 按 list_arguments 中声明的相同顺序排列的参数类型列表。

返回值

  • in_type (列表) – 参数类型列表。可以从 in_type 修改。

  • out_type (列表) – 根据 in_type 计算出的输出类型列表,按 list_outputs 中声明的相同顺序排列。

  • aux_type (可选, 列表) – 根据 in_type 计算出的 aux 类型列表,按 list_auxiliary_states 中声明的相同顺序排列。

list_arguments()[source]

list_arguments 接口。创建新操作符时可以覆盖此方法。

返回值

arguments – 参数 blob 名称列表。

返回类型

list

list_outputs()[source]

list_outputs 接口。创建新操作符时可以覆盖此方法。

返回值

outputs – 输出 blob 名称列表。

返回类型

list