目标检测回归损失函数——L1、L2、smooth L1
一、 L1 Loss
1. 函数特性
L1 Loss也称为平均绝对值误差(MAE),是指模型预测值f(x)和真实值y之间绝对差值的平均值,公式如下:
其中
曲线分布如下:
L1损失函数的导数是常量,有着稳定的梯度,所以不会有梯度爆炸的问题。对于离群点造成的惩罚是固定的,不会被放大。
2. 存在的问题
MAE函数虽然连续,但是在0处不可导。而且MAE的导数为常数,所以在较小的损失值时,得到的梯度也相对较大,可能造成模型震荡不利于收敛。
二、 L2 Loss
1.函数特性
L2 Loss也称为均方误差(MSE),是指模型预测值f(x)和真实值y之间差值平方的平均值,公式如下:
曲线分布如下:
函数曲线连续,处处可导,随着误差值的减小,梯度也减小,有利于收敛到最小值。
2. 存在的问题
由于采用平方运算,当预测值和真实值的差值大于1时,会放大误差。尤其当函数的输入值距离中心值较远的时候,使用梯度下降法求解的时候梯度很大,可能造成梯度爆炸。同时当有多个离群点时,这些点可能占据Loss的主要部分,需要牺牲很多有效的样本去补偿它,所以MSE损失函数受离群点的影响较大。
三、Smooth L1 Loss
1. 函数特性
简单的说Smooth L1就是一个平滑版的L1 Loss,其公式如下:
Smooth
该函数实际上是一个分段函数,在[-1,1]之间就是L2损失,解决L1在0处有折点,在[-1, 1]区间以外就是L1损失,解决离群点梯度爆炸问题,所以能从以下两个方面限制梯度:
- 当预测值与真实值误差过大时,梯度值不至于过大;
- 当预测值与真实值误差很小时,梯度值足够小。
曲线分布如下:
2. 存在的问题
在早期的目标检测网络Fast R-CNN中被提出,用于计算Bounding Box的4个坐标值和GT框之间的误差,然后将这4个loss进行相加构成回归损失,但是这种做法假设Bounding Box的4个点是相互独立的,实际上其有一定相关性。并且检测框的评价指标使用的是IOU,和该损失无法等价。
四、L1、L2、Smooth L1对比
L1 Loss由于不会放大损失,所以对离群点的处理上更加鲁棒;
L2 Loss由于处处可导,在0值周围具有较小的梯度值,波动小更加稳定;
Smooth L1 Loss综合了L1和L2 Loss的优点,总结如下:
L1损失函数 | L2损失函数 | Smooth L1损失函数 |
---|---|---|
鲁棒 | 不鲁棒 | 鲁棒 |
不稳定解 | 稳定解 | 稳定解 |
可能多解 | 一个解 | 一个解 |
对比三种损失函数方程:
对比三种损失函数导数:
其中x表示预测值和真实值之间的误差值。
L2损失函数的导数是动态变化的,所以x增加也会使损失增加,尤其在训练早起标签和预测的差异大,会导致梯度较大,训练不稳定。
L1损失函数的导数为常数,在模型训练后期标签和预测的差异较小时,梯度值任然较大导致损失函数在稳定值附近波动难以进一步收敛。
Smooth L1损失函数在x较大时,梯度为常数解决了L2损失中梯度较大破坏训练参数的问题,当x较小时,梯度会动态减小解决了L1损失中难以收敛的问题。
所以在目标检测的Bounding box回归上早期会考虑Smooth L1 Loss:
- 相比于L1 Loss,可以收敛得更快。
- 相比于L2 Loss,对离群点、异常值不敏感,梯度变化相对更小,训练时不容易跑飞。
曲线分布如下:
五、补充知识
1.什么是梯度爆炸?
在深度神经网络中,一般使用反向传播更新权重,由于链式法则误差梯度会在逐层更新中积累,变成非常大的梯度,然后导致网络的权重大幅更新,在极端情况下会权重溢出导致NAN值。
目标检测回归损失函数——L1、L2、smooth L1相关推荐
- 目标检测回归损失函数简介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:极市平台 目标检测任务的损失函数由Classificitio ...
- 目标检测回归损失函数——IOU、GIOU、DIOU、CIOU、EIOU
一.IOU Loss 上一篇文章提到L1,L2及其变种只将Bounding box的四个角点分别求loss然后相加,没有引入box四个顶点之间的相关性并且模型在训练过程中更偏向于尺寸更大的物体.在此基 ...
- 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss
文章目录 1. Smooth L1 Loss 1.1 假设x为预测框和真实框之间的数值差异,常用的L1和L2 Loss定义为: 1.2 上述的3个损失函数对x的导数分别为: 1.3 实际目标检测框回归 ...
- 目标检测常用损失函数-类别损失+位置损失
目录 类别损失 1. 交叉熵损失 Cross Entropy Loss 2. Focal Loss 改进的交叉熵损失函数 位置损失 1. L1 Loss 平均绝对误差(Mean Absolute Er ...
- 机器学习02——回归问题中的损失函数 (L2损失L1损失Huber损失函数)
回归问题预测中的残差 • 预测残差:真实值和预测值之间的差异: ? = ? − ?1 • 忽略预测残差的正负号:残差的平方:?**2 • 最佳模型:残差平方和(Residual Sum of Squa ...
- yolov5目标检测神经网络——损失函数计算原理
前面已经写了4篇关于yolov5的文章,链接如下: 1.基于libtorch的yolov5目标检测网络实现--COCO数据集json标签文件解析 2.基于libtorch的yolov5目标检测网络实现 ...
- 目标检测常用损失函数
学习目标检测的同学一定对损失函数非常头疼.在求分类时会遇到0-1损失,交叉熵损失,在求回归框的时候需要用到L1损失.L2损失以及各种IoU损失.而我们本身又不是很了解这些损失函数,网上的教程大多是走数 ...
- 目标检测分类损失函数——Cross entropy、Focal loss
一.Cross Entropy Loss 交叉熵是用来判定实际的输出与期望的输出的接近程度,刻画的是实际输出与期望输出的距离,也就是交叉熵的值越小,两个概率分布就越接近. 1. CE Loss的定义 ...
- hrsc2016 下载 数据集_PIoU Loss:倾斜目标检测专用损失函数,公开超难倾斜目标数据集Retail50K | ECCV 2020 Spotlight...
> 论文提出从IoU指标延伸来的PIoU损失函数,能够有效地提高倾斜目标检测场景下的旋转角度预测和IoU效果,对anchor-based方法和anchor-free方法均适用.另外论文提供了Re ...
最新文章
- 列表框QListWidget 类
- PHP漏洞之session会话劫持
- 【转载】别了,摩托罗拉(十):“战争部落”和“独立王国”
- Taro+react开发(63) 修改蓝湖的样式
- C++11 explicit关键字的作用
- 能让你的Intellij IDEA 起飞的几个设置(设置背景 字体 快捷键 鼠标悬停提示 提示忽略大小写 取消单行显示)
- ubuntu18.04安装opencv4.3.0
- 程序发布以后,如何修改安装URL
- CCNA学习笔记3---备份和升级IOS
- OpenCV 访问Mat 像素
- 网络安全 Security+(SY0-601)学习笔记
- C++设计模式10--命令模式(一)--降低请求发送者与接收者耦合
- JavaEE JavaSE JavaME的区别
- 硬件-1-打印机爱普生L3153墨仓式一体机
- 西游释厄传 所有物品代码
- python3爬取头条比基尼图片
- 案例19:Java私房菜定制上门服务系统设计与实现开题报告
- 【线段树区间合并】POJ3667-Hotel
- 查询国际学术会议的信息
- vlan与vxlan
热门文章
- os.path.basename()
- [Linux + 深度学习]Ubuntu18.04 深度学习环境配置
- kong 网关教程入门
- python机器学习案例系列教程——K最近邻算法(KNN)、kd树
- ---调试-用try-catch语句检查错误
- 基于Arduino和Blynk平台的远程控制智能小车
- Unity3D笔记 愤怒的小鸟四 实现Selelction界面
- mybatis框架增删改的注意事项 ,不同数据库取消转义的方法
- BZOJ4372 烁烁的游戏(动态点分治+线段树)
- 20162302 第七周作业