【Smooth L1 Loss】FRCNN的box回归为什么采用smooth L1 loss

本文详细介绍了平滑L1损失函数在回归问题中的应用,对比了L2和L1损失函数,解释了平滑L1损失如何解决L1损失在0点导数不唯一的问题,以及其在Mask R-CNN基准中的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于边框的预测是一个回归问题,通常可以选择平方损失函数(L2损失),但是这个损失函数对于比较大的误差的惩罚很高。我们可以采用稍微缓和一点绝对损失函数(L1)损失,它是随误差线性增长的,而不是平方增长。

但是这个函数在0点处的导数不为唯一,因此可能会影响收敛,一个通常的办法是在0点附近使用平方函数使得它更加平滑。我们称之为平滑L1损失。它通过一个参数sigma来控制平滑的区域。

                                                                                smooth l1 loss损失 曲线

maskrcnn-benchmark中的实现:

# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
import torch


# TODO maybe push this to nn?
def smooth_l1_loss(input, target, beta=1. / 9, size_average=True):
    """
    very similar to the smooth_l1_loss from pytorch, but with
    the extra beta parameter
    """
    n = torch.abs(input - target)
    cond = n < beta
    loss = torch.where(cond, 0.5 * n ** 2 / beta, n - 0.5 * beta)
    if size_average:
        return loss.mean()
    return loss.sum()

 

参考:https://blog.youkuaiyun.com/wfei101/article/details/79809332

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值