【MMDetection 系列:三】Loss 函数详解 + Pytorch 实现

Reference

https://zhuanlan.zhihu.com/p/40284001
https://blog.csdn.net/weixin_41665360/article/details/100126744
https://github.com/open-mmlab/mmdetection
https://github.com/thangvubk/Cascade-RPN (based on mmdetection framework)
Deep Learning v1 笔记

一个函数能够作为损失函数,要符合以下两个特性:

  • 非负
  • 当实际输出接近预期,那么损失函数应该接近0

基本 loss

MSE —— 回归loss

参考KL散度

MSE 回归loss ,更适合用来预测值。而CE是衡量两个分布距离的指标

SSE

和方差

  • 该参数计算的是拟合数据和原始对应点的误差的平方和

是真实数据, 是拟合的数据, ,从这里可以看出SSE接近于0,说明模型选择和拟合更好,数据预测也越成功。

MSE

均方方差

  • 预测数据和原始数据对应点误差的平方和的均值

缺点

  • 其偏导值在输出概率值接近0或者接近1的时候非常小,这可能会造成模型刚开始训练时,偏导值几乎消失。
import torch.nn.functional as F
mse_loss = weighted_loss(F.mse_loss)

RMSE

也叫回归系统的拟合标准差,是MSE的平方根,计算公式为:

0-1 Loss

0-1损失函数直接对应分类判断错误的个数,但是它是一个非凸函数,不太适用.

hinge loss

Hinge Loss常作为 SVM 的损失函数

L1 loss

L2 Loss

L2-loss 比 L1-loss 好,因为L2-loss的收敛速度要比L1-loss要快得多。

缺点:

  • 当存在离群点(outliers)的时候,这些点会占loss的主要组成部分
    比如说真实值为1,预测10次,有一次预测值为1000,其余次的预测值为1左右,显然loss值主要由1000主宰

不管是L1损失函数,还是L2损失函数,都有两大缺陷:

  • 假定噪声的影响和图像的局部特性是独立的。然而,人类的视觉系统对噪声的感知受局部照度、对比、结构的影响。
  • 假定噪声接近高斯白噪声,然而这一假定并不总是成立。

分类 loss CE

CE

Cross - Entropy

交叉熵

表示样本, 表示预测的输出, 表示实际的输出, 表示样本总数量

  • 对数似然函数,可用于二分类和多分类任务中
  • 二分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出)
  • 多分类问题中的loss函数(输入数据是softmax或者sigmoid函数的输出)

交叉熵

def cross_entropy(pred, label, weight=None, reduction='mean', avg_factor=None):
    # element-wise losses
    loss = F.cross_entropy(pred, label, reduction='none')

    # apply weights and do the reduction
    if weight is not None:
        weight = weight.float()
    loss = weight_reduce_loss(
        loss, weight=weight, reduction=reduction, avg_factor=avg_factor)

    return loss

Binary CE loss

二分类

def binary_cross_entropy(pred,
                         label,
                         weight=None,
                         reduction='mean',
                         avg_factor=None):
    if pred.dim() != label.dim():
        label, weight = _expand_binary_labels(label, weight, pred.size(-1))

    # weighted element-wise losses
    if weight is not None:
        weight = weight.float()
    loss = F.binary_cross_entropy_with_logits(pred, label.float(), weight, reduction='none')
    # do the reduction for the weighted loss
    loss = weight_reduce_loss(loss, reduction=reduction,avg_factor=avg_factor)

    return loss

Balanced CE loss

类别不平衡问题对最终training loss的不利影响,我们自然会想到可通过在loss公式中使用与目标存在概率成反比的系数对其进行较正

Focal Loss

  • 12
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
Zero DCE是一种用于图像去模糊和增强的方法,该方法可以通过训练一个深度学习模型来实现。而PyTorch是一种常用的深度学习框架,可以在其中实现Zero DCE。 要实现Zero DCE,首先需要准备一个用于训练的图像数据集。可以收集模糊的图像作为输入,同时还需要准备它们清晰的参考图像作为标签。接下来,可以使用PyTorch创建一个深度神经网络模型,用于训练和测试。 在PyTorch中,可以使用torchvision库加载和预处理图像数据。可以使用torch.utils.data.Dataset和torch.utils.data.DataLoader来构建自定义数据集,并在训练过程中对图像进行批处理和数据增强操作。 然后,可以定义网络模型。可以选择使用现有的神经网络结构(如ResNet、U-Net等),并根据具体的需求进行适当的修改。可以使用torch.nn包中的各种层和函数来构建网络结构。 接下来,可以定义损失函数和优化器。可以使用PyTorch提供的各种损失函数(如均方误差损失、感知损失等),以及优化器(如随机梯度下降、Adam等)。 然后,可以进行模型的训练和测试。可以使用torch.nn.Module中的forward函数来定义前向传播过程,通过计算输入图像的模糊与清晰度之间的差异来更新网络参数。同时,可以使用torch.utils.tensorboard等调试工具进行模型的监控和可视化。 最后,在训练完成后,可以使用训练得到的模型对新的图像进行去模糊和增强操作。可以将模糊的图像输入模型,通过前向传播得到增强后的图像。 通过以上步骤,可以使用PyTorch实现Zero DCE方法,实现图像去模糊和增强的效果。但需要注意的是,具体实现过程中还需根据实际情况进行调试和优化,并通过适当的数据集和参数选择来提高模型的性能和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值