gluoncv.loss

自定义损失函数。损失函数是 gluon.loss.Loss 的子类,实际上是一个 HybridBlock。

FocalLoss

用于不平衡分类的 Focal Loss。

SSDMultiBoxLoss

单发多框目标检测损失函数。

API 参考

自定义损失函数。损失函数是 gluon.loss.Loss 的子类,实际上是一个 HybridBlock。

class gluoncv.loss.DistillationSoftmaxCrossEntropyLoss(temperature=1, hard_weight=0.5, sparse_label=True, **kwargs)[源码]

带有教师模型预测的 SoftmaxCrossEntrolyLoss

参数
  • temperature (float, 默认 1) – 用于软化教师预测的温度参数。

  • hard_weight (float, 默认 0.5) – 独热标签上损失的权重。

  • sparse_label (bool, 默认 True) – 独热标签是否为稀疏格式。

hybrid_forward(F, output, label, soft_target)[源码]

计算损失

class gluoncv.loss.FocalLoss(axis=- 1, alpha=0.25, gamma=2, sparse_label=True, from_logits=False, batch_axis=0, weight=None, num_class=None, eps=1e-12, size_average=True, **kwargs)[源码]

用于不平衡分类的 Focal Loss。Focal loss 在 https://arxiv.org/abs/1708.02002 中有描述。

参数
  • axis (int, 默认 -1) – 计算 softmax 和熵时求和的轴。

  • alpha (float, 默认 0.25) – 控制损失曲线的 alpha 参数。

  • gamma (float, 默认 2) – 控制损失曲线的 gamma 参数。

  • sparse_label (bool, 默认 True) – 标签是整数数组还是概率分布。

  • from_logits (bool, 默认 False) – 输入是否为对数概率(通常来自 log_softmax)。

  • batch_axis (int, 默认 0) – 表示 mini-batch 的轴。

  • weight (floatNone) – 损失的全局标量权重。

  • num_class (int) – 分类别的数量。如果 sparse_labelTrue,则这是必需的。

  • eps (float) – 避免数值问题的 epsilon 值。

  • size_average (bool, 默认 True) – 如果为 True,则对除 batch_axis 外的每个轴上的输出损失取平均值。

  • 输入 –

    • pred: 预测张量,其中 batch_axis 维度表示 batch size,axis 维度表示类别数。

    • label: 真值张量。当 sparse_label 为 True 时,label 的形状应与 pred 的形状相同,但移除了 axis 维度。例如,对于形状为 (1,2,3,4) 且 axis = 2predlabel 的形状应为 (1,2,4),值应为 0 到 2 之间的整数。如果 sparse_label 为 False,label 的形状必须与 pred 相同,值应为 [0, 1] 范围内的浮点数。

    • sample_weight: 元素级权重张量。必须能够广播到与 label 相同的形状。例如,如果 label 的形状是 (64, 10),并且您想单独加权 batch 中的每个样本,则 sample_weight 的形状应为 (64, 1)。

  • 输出 –

    • loss: 形状为 (batch_size,) 的损失张量。除 batch_axis 外的维度均已平均。

hybrid_forward(F, pred, label, sample_weight=None)[源码]

损失前向计算

class gluoncv.loss.ICNetLoss(weights=(0.4, 0.4, 1.0), height=None, width=None, crop_size=480, ignore_label=- 1, **kwargs)[源码]

用于 ICNet 训练的加权 SoftmaxCrossEntropyLoss2D

参数
  • weights (tuple, 默认 (0.4, 0.4, 1.0)) – 用于级联标签指导的权重。

  • ignore_label (int, 默认 -1) – 要忽略的标签。

hybrid_forward(F, *inputs)[源码]

计算损失

class gluoncv.loss.MixSoftmaxCrossEntropyLoss(aux=True, mixup=False, aux_weight=0.2, ignore_label=- 1, **kwargs)[源码]

带有辅助损失的 SoftmaxCrossEntropyLoss2D

参数
  • aux (bool, 默认 True) – 是否使用辅助损失。

  • aux_weight (float, 默认 0.2) – 辅助损失的权重。

  • ignore_label (int, 默认 -1) – 要忽略的标签。

hybrid_forward(F, *inputs, **kwargs)[源码]

计算损失

class gluoncv.loss.MixSoftmaxCrossEntropyOHEMLoss(aux=True, aux_weight=0.2, ignore_label=- 1, **kwargs)[源码]

带有辅助损失的 SoftmaxCrossEntropyLoss2D

参数
  • aux (bool, 默认 True) – 是否使用辅助损失。

  • aux_weight (float, 默认 0.2) – 辅助损失的权重。

  • ignore_label (int, 默认 -1) – 要忽略的标签。

hybrid_forward(F, *inputs, **kwargs)[源码]

计算损失

class gluoncv.loss.SSDMultiBoxLoss(negative_mining_ratio=3, rho=1.0, lambd=1.0, min_hard_negatives=0, **kwargs)[源码]

单发多框目标检测损失函数。

注意

由于计算批次统计量需要跨设备同步,这与非同步版本相比略微次优。然而,我们发现这对收敛模型的性能更好。

参数
  • negative_mining_ratio (float, 默认值为 3) – 负样本与正样本的比例。

  • rho (float, 默认值为 1.0) – 用于 trimmed mean 估计量的阈值。这是 L1-L2 过渡的平滑参数。

  • lambd (float, 默认值为 1.0) – 分类损失和边界框回归损失之间的相对权重。总损失计算为 \(L = loss_{class} + \lambda \times loss_{loc}\)

  • min_hard_negatives (int, 默认值为 0) – 最少负样本数。

forward(cls_pred, box_pred, cls_target, box_target)[源码]

计算整个批次跨设备的损失。

参数
  • cls_pred (mxnet.nd.NDArray) –

  • classes. (Ground-truth) –

  • box_pred (mxnet.nd.NDArray) –

  • bounding-boxes. (Ground-truth) –

  • cls_target (mxnet.nd.NDArray) –

  • classes.

  • box_target (mxnet.nd.NDArray) –

  • bounding-boxes.

返回

sum_losses包含分类预测和边界框回归损失总和的数组。

class prediction and bounding-box regression loss.

cls_losses : 类别预测损失数组。 box_losses : 边界框回归 L1 损失数组。

返回类型

NDArray 元组

class gluoncv.loss.SegmentationMultiLosses(size_average=True, ignore_label=- 1, **kwargs)[源码]

带有多损失的 2D 交叉熵损失

hybrid_forward(F, *inputs, **kwargs)[源码]

计算损失

class gluoncv.loss.SiamRPNLoss(batch_size=128, **kwargs)[源码]

用于 SiamRPN 训练的加权 L1 损失和交叉熵损失

参数

batch_size (int, 默认 128) – 每个设备 (CPU/GPU) 的训练批次大小。

cross_entropy_loss(F, pred, label, pos_index, neg_index)[源码]

计算 cross_entropy_loss

get_cls_loss(F, pred, label, select)[源码]

计算 SoftmaxCrossEntropyLoss

hybrid_forward(F, cls_pred, loc_pred, label_cls, pos_index, neg_index, label_loc, label_loc_weight)[源码]

计算损失

weight_l1_loss(F, pred_loc, label_loc, loss_weight)[源码]

计算 weight_l1_loss

class gluoncv.loss.YOLOV3Loss(batch_axis=0, weight=None, **kwargs)[源码]

YOLO v3 的损失函数。

参数
  • batch_axis (int, 默认 0) – 表示 mini-batch 的轴。

  • weight (floatNone) – 损失的全局标量权重。

hybrid_forward(F, objness, box_centers, box_scales, cls_preds, objness_t, center_t, scale_t, weight_t, class_t, class_mask)[源码]

计算 YOLOv3 损失。

参数
  • objness (mxnet.nd.NDArray) – 预测的目标存在性 (B, N),范围 (0, 1)。

  • box_centers (mxnet.nd.NDArray) – 预测的边界框中心点 (x, y) (B, N, 2),范围 (0, 1)。

  • box_scales (mxnet.nd.NDArray) – 预测的边界框尺度 (宽度, 高度) (B, N, 2)。

  • cls_preds (mxnet.nd.NDArray) – 预测的类别预测值 (B, N, num_class),范围 (0, 1)。

  • objness_t (mxnet.nd.NDArray) – 目标存在性目标,(B, N),负样本为 0,正样本为 1,忽略为 -1。

  • center_t (mxnet.nd.NDArray) – 中心点 (x, y) 目标 (B, N, 2)。

  • scale_t (mxnet.nd.NDArray) – 尺度 (宽度, 高度) 目标 (B, N, 2)。

  • weight_t (mxnet.nd.NDArray) – 中心点和尺度目标的损失乘数 (B, N, 2)。

  • class_t (mxnet.nd.NDArray) – 类别目标 (B, N, num_class)。它是松弛的独热向量,例如 (1, 0, 1, 0, 0)。它可以包含多个正类别。

  • class_mask (mxnet.nd.NDArray) – 用于掩盖忽略样本的 0 或 1 掩码数组 (B, N, num_class)。

返回

obj_loss: 目标存在性逻辑损失总和 center_loss: 边界框中心点逻辑回归损失总和 scale_loss: 边界框尺度 L1 损失总和 cls_loss: 每个类别的逻辑损失总和

返回类型

NDArray 元组