[YOLOv7/YOLOv5系列算法改进NO.7]损失函数改进
前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法。此后的系列文章,将重点对YOLOv5的如何改进进行详细的介绍,目的是为了给那些搞科研的同学需要创新点或者搞工程项目的朋友需要达到更好的效果提供自己的微薄帮助和参考。
解决问题:YOLOv5采用CIOU损失函数,优点:CIOU就是在DIOU的基础上增加了检测框尺度的loss,增加了长和宽的loss,这样预测框就会更加的符合真实框。但是缺点是:1. 纵横比描述的是相对值,存在一定的模糊 2. 未考虑难易样本的平衡问题。针对以上问题,采用EIOU的方法。
原理:
CIOU Loss虽然考虑了边界框回归的重叠面积、中心点距离、纵横比。但是通过其公式中的v反映的纵横比的差异,而不是宽高分别与其置信度的真实差异,所以有时会阻碍模型有效的优化相似性。针对这一问题,有学者在CIOU的基础上将纵横比拆开,提出了EIOU Loss,并且加入Focal聚焦优质的锚框,该方法出自于2021年的一篇文章《Focal and Efficient IOU Loss for Accurate Bounding Box Regression》
文章链接:https://arxiv.org/pdf/2101.0815
EIOU的惩罚项是在CIOU的惩罚项基础上将纵横比的影响因子拆开分别计算目标框和锚框的长和宽,该损失函数包含三个部分:重叠损失,中心距离损失,宽高损失,前两部分延续CIOU中的方法,但是宽高损失直接使目标盒与锚盒的宽度和高度之差最小,使得收敛速度更快。惩罚项公式如下
方 法:
第一步修改general.py,增加EIOU。
elif EIoU:
w=(w1-w2)*(w1-w2)
h=(h1-h2)*(h1-h2)
return iou-(rho2/c2+w/(cw**2)+h/(ch**2))#EIOU 2021.12.29
第二步:将loss.py中边框位置回归损失函数改为eiou。
iou = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, EIoU=True) # iou(prediction, target)
结 果:本人在多个数据集上做了大量实验,针对不同的数据集效果不同,有轻微的提升作用。
预告一下:下一篇内容分享损失函数的改进。有兴趣的朋友可以关注一下我,有问题可以留言或者私聊我哦
PS:损失函数的改进的方法不仅仅是适用改进YOLOv5,也可以改进其他的YOLO网络,比如YOLOv4、v3等。
最后,希望能互粉一下,做个朋友,一起学习交流。
相关文章
- react中的diff算法,通俗易懂的解读
- 哈希函数/散列算法
- Go 数据结构和算法篇(十四):哈希表、哈希函数、哈希冲突和哈希算法
- 前端工程师leetcode算法面试之二分搜索算法(上)
- 前端leetcde算法面试之回溯
- C++数学与算法系列之初等数论
- 算法的权值-基于局部权值阈值调整的BP 算法的研究.docx
- 【DSP视频教程】第11期:插补算法,曲线拟合丝滑顺畅,统计函数和基础函数加速实现,汇集SIMD,饱和和MAC乘累加应用实战(2023-02-12)
- 字符函数和字符串函数的模拟实现及KMP算法
- 算法-包含min函数的栈详解编程语言
- C++ binary_search(STL binary_search)二分查找算法详解
- MongoDB中的高效排序算法(cmongodb排序)
- PRICAI 2016 论文精选 | 特征选取与实例选取的差分进化算法
- MySQL函数实现递归算法(mysql函数递归)
- Oracle中求比例函数优化算法极大提高求比例效率(oracle中求比例函数)
- Redis集群实现主节点选举算法简介(redis选举主节点算法)
- python实现插入排序算法