还是yolo5系列哦

这次主要讲是用于边界框回归的DIoU损失和CIoU损失和用于抑制冗余检测框的DIoU-NMS。

边界框回归是目标检测的关键步骤,在现有方法中,虽然-norm loss 被广泛用于边界框回归,但它不是针对评估指标量身定制的,即 Intersection over Union (IoU)。最近,已经提出了 IoU 损失和generalized IoU (GIoU) Loss作为评估IoU的指标 ,但仍然存在收敛速度慢和回归不准确的问题。在本文中,我们通过结合预测框和目标框之间的归一化距离来提出距离-IoU (DIoU) Loss,它在训练中的收敛速度比 IoU 和 GIoU Loss快得多。

此外,本文总结了边界框回归中的三个几何因素,即

重叠面积(overlap area)、中心点距离(central point distance)和高宽比(aspect ratio),在此基础上提出了完全损失,从而促进了更快的收敛和更优的性能。通过将 和损失结合到最先进的目标检测算法中,例如 YOLO v3、SSD 和 Faster RCNN,我们不仅在 IoU 指标方面而且在 GIoU 指标方面都获得了显着的性能提升。此外,DIoU 可以很容易地用于非最大抑制(NMS)作为标准,进一步促进性能提升。

注释:这里IoU指标方面和GIoU指标方面指的是在:目标检测精度测量(mAP值 ),IoU损失计算稳定性等一些方面。

目标检测是计算机视觉任务中的关键问题之一,几十年来一直受到了广泛的研究关注 (Redmon et al. 2016; Redmon and Farhadi 2018; Ren et al. 2015; He et al. 2017; Yang et al. 2018; Wang et al. 2019; 2018). 通常,现有的目标检测方法可以分为:

  • 单阶段-检测,如YOLO系列 (Redmon et al. 2016; Red- mon and Farhadi 2017; 2018) 和SSD (Liu et al. 2016; Fu et al. 2017),

  • 两阶段检测,如 R-CNN系列检测 (Girshick et al. 2014; Girshick 2015; Ren et al. 2015; He et al. 2017),

  • 甚至是多阶段的检测, 像Cascade R-CNN (Cai and Vasconcelos 2018). 尽管存在这些不 同的检测框架,但边界框回归预测一个矩形框来定位目标对象仍然是其中关键步骤。

本文主要是结合论文Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression(https://arxiv.org/pdf/1911.08287.pdf) 对 IoU 的解析学习。

IoU

IoU介绍

Intersection over Union (IoU)在指标评估概述的小节有介绍过IoU,已经对IoU有了初步的认识(其实在yolov5项目中并不是简单的使用,而是用的后面介绍的CIoU )
计算公式:

IoU loss

计算公式:

IoU Loss 优缺点分析

有明显的缺陷 IoU loss只在边界框有重叠时才能工作, 对于不重叠的情况不会提供任何移动梯度 (移动代表预测框朝着目标框重叠的方向移动) 。移动梯度表示无法衡量完全不相交的两个框所产生的的损失(iou固定为0),和两个不同形状的预测框可能产生相同的loss(相同的iou)分别如下图的左边和右边所示。

GIoU

GIoU介绍

GIoU的设计初衷就是想解决IoU Loss存在的问题(预测框与真实框不相交时iou恒定为0),设计了一套Generalized Intersection over Union Loss。在IoU的基础上,GIoU还需要找到预测框和真实框的最小外接矩形,然后求出最小外接矩形减去两个预测框union的面积,具体算法流程如下: 

GIoU loss

计算公式 :

GIoU 优缺点分析

GIoU Loss解决了IoU Loss在不相交情况的问题,在所有性能指标中都可以作为IoU的适当替代品,在目标检测任务中能够得到更高的准确率。

缺点:虽然GIoU可以缓解重叠情况下的梯度消失问题,但它仍有一些局限性。即无法衡量有包含关系时的框回归损失,如下图,三个回归框具有相同的GIoU Loss,但是显然第三个框的回归效果更好。

IoU & GIoU 分析

首先,在本文上部分我们分析了关于原始的IoU损失和GIoU 损失的局限性。下面将通过模拟实验结果对边界框回归的过程进行进一步的解析。(补充说明: 为什么要进行模型实验?  因为仅仅从检测结果来分析边界框回归的过程很难,因为在不受控制的基准中的回归情况往往不全面比如:不同的距离(distances),不同的尺度(scales)和不同的长宽比(aspect ratios)。相反,进行模拟实验,在实验中综合考虑回归情况,然后就可以很容易地分析给定损失函数的问题。)

模拟实验

IoU 和 GIoU 损失的限制

在图4中,我们可视化迭代T时对5000个分散点的最终回归误差。

  • 从图4(a)中很容易看出,IoU损失只适用于与目标框重叠的情况。由于∇B总是0,没有重叠的锚框将不会移动。通过添加一个惩罚项见公式(3),

  • GIoU 损失能够更好的缓解非重叠案例的问题,如图所示4(b), 但GIoU的损失显著扩大了盆地,即GIoU的工作面积。但是,在水平方向和垂直方向的情况下,仍然很可能有很大的误差。这是因为GIoU损失中的惩罚项是用来最小化|C−A∪B|,但是C−A∪B的面积通常很小或为0(当两个盒子有包含关系时),然后GIoU几乎退化为IoU损失。只要以适当的学习速率运行足够的迭代GIoU 损失能收敛到很好的解决方案,但收敛速度却是非常慢。从几何上来说,从如图1所示的回归步骤来看,GIoU实际上增大了预测的框大小,用来和目标框重叠,然后IoU项用于预测框与目标框匹配,产生非常缓慢的收敛。

综上所述,在非重叠情况下,IoU损失收敛是糟糕的解决方式,而GIoU损失收敛速度较慢,特别是对于水平和垂直方向的框。在目标检测流程中,IoU和GIoU的损失都不能保证回归的准确性。

DIoU & CIoU

通过前面的IoU和GIoU的分析我们很自然会问以下问题:

  1. 第一,是否可以直接最小化预测框和目标框之间的归一化距离,以实现更快的收敛?

  2. 第二,当与目标框有重叠甚至包含时,如何使回归更准确、更快?

DIoU loss

Distance-IoU 损失:更快更好的边界框回归损失,一般来说, IoU-based损失可以定义为

DIoU 和 IoU/GIoU 损失比较

新提出的DIoU损失继承IoU和GIoU损失的一些属性

  1. DIoU损失对回归问题的尺度仍然是不变的

  2. 与GIoU损失类似, DIoU损失可以在与目标框不重叠时为边界框提供移动方向。

  3. Complete IoU Loss

  4. NMS(Non-Maximum Suppression)

    介绍

    NMS是大多数目标检测算法的最后一步,其中删除了冗余的检测框当它与最高分框的重叠超过一个阈值。Soft-NMS (Bodla et al. 2017) 用连续函数w.r.t.惩罚相邻框的检测分数IoU,产生比原始NMS产生更柔和大和更强大的抑制。IoU-Net (Jiang et al. 2018) 提出了一个新的网络分支来预测定位置信度来指导NMS。最近,自适应NMS(Liu,Huang,和Wang 2019)和Softer-NMS(He et al. 2019)被提出分别研究适当的阈值策略和加权平均策略。在本工作中,简单将DIoU作为原始NMS的标准, 在抑制冗余框时,同时考虑边界框的重叠面积和两个中心点之间的距离。              whaosoft aiot http://143ai.com

    DioU-NMS

    Non-Maximum Suppression using DIoU

    总结 

参考文章

  • https://github.com/Zzh-tju/DIoU/blob/master/README.md#introduction

  • https://github.com/Zzh-tju/DIoU/blob/master/README.md#introduction

  • IoU: https://arxiv.org/pdf/1608.01471.pdf

  • GIoU: https://giou.stanford.edu/GIoU.pdf

  • DIoU: https://arxiv.org/pdf/1911.08287.pdf

  • 代码仓库地址:https://github.com/Oneflow-Inc/one-yolov5欢迎star one-yolov5项目

YOLOv5-IoU相关推荐

  1. Yolov5训练自己的数据集+TensorRT加速+Qt部署

    本人由于项目要求,需要利用Yolov5网络训练自己的目标检测与分类模型,并利用TensorRT加速将其部署到Qt界面上.目前已经实现了整个流程,写下这篇博客供需要的各位参考.(本文描述的重点主要是在后 ...

  2. 基于YOLO目标检测及OpenCV实现的游戏代玩人工智能体(Auto Gaming Agent) [3] (更新)

    大型生存类游戏自动代玩人工智能[3] -- 目标识别(新) 一.目标检测算法更新 二.YOLOv5模型训练 1. 数据准备 2. 训练模型 三.Pytorch推理预测YOLOv5 1. 引入库 2. ...

  3. NeurIPS 2021 助力YOLOv5涨点 Alpha-IoU:IoU Loss大一统

    经过测试,代码与Yolov5基本一致, 模型也是14m,精度没有大幅明显提升. Alpha-IoU:A Family of Power Intersection over Union Losses f ...

  4. α-IoU | 再助YOLOv5登上巅峰,造就IoU Loss大一统

    点击上方"计算机视觉工坊",选择"星标" 干货第一时间送达 作者丨 ChaucerG 编辑丨集智书童 在本文中,作者将现有的基于IoU Loss推广到一个新的P ...

  5. YOLOv5的参数IOU与PR曲线,F1 score

    YOLOv5的参数IOU与PR曲线,F1 score conf_thres Confidence Threshold,置信度阈值. 只显示预测概率超过conf_thres的预测结果.想让YOLO只标记 ...

  6. YOLOv5的置信度阀值与iou阀值及P R详解

    conf_thres Confidence Threshold,置信度阈值. 只显示预测概率超过conf_thres的预测结果. 想让YOLO只标记可能性高的地方,就把这个参数提高. iou_thre ...

  7. 目标检测算法——YOLOv5/YOLOv7改进|将IOU Loss替换为EIOU Loss

    >>>深度学习Tricks,第一时间送达<<< 论文题目:<Focal and Efficient IOU Loss for Accurate Boundin ...

  8. 【目标检测算法】IOU、GIOU、DIOU、CIOU与YOLOv5损失函数

    1 常见IOU汇总 classification loss 分类损失 localization loss, 定位损失(预测边界框与GT之间的误差) confidence loss 置信度损失(框的目标 ...

  9. Yolov5如何更换EIOU / alpha IOU / SIoU?

    Yolov5如何更换EIOU / alpha IOU / SIoU? 更新日志:2022-07-25日新增SIoU代码

  10. YOLOv5改进、YOLOv7改进IoU损失函数:YOLOv7涨点Trick,改进添加SIoU损失函数、EIoU损失函数、GIoU损失函数、α-IoU损失函数

最新文章

  1. 企业级自动化运维方案设计及Saltstack、Ansible等5种工具比较分析--云平台技术栈08...
  2. response.addCookie(cookie)添加cookie失败.
  3. 服务器用户编码是什么,涨知识:英特尔服务器CPU编号是啥意思?
  4. php格式化金额函数分享
  5. uniapp动态修改样式_uniapp样式动态绑定
  6. 大学计算机基础知识点图文,大学计算机基础知识点超详细总结
  7. Python之Pymysql模块操作MySQL增删改查
  8. JavaWeb之tomcat安装、配置与使用(一)
  9. 让AIX下的sqlplus也支持回显功能
  10. LeetCode:每日一题(2020.4.8)
  11. 优化 RTD 温度传感系统:挑战
  12. B站左程云算法视频中级班01
  13. 【有限元分析】电力塔架ansys有限元模型
  14. 海思35xx移动侦测-修改sdk中sample到嵌入式设备测试成功
  15. JAVA之ZIP、RAR解压工具类
  16. 牛客网 - 编程初学者入门训练 - 分支控制(BC50~BC77)
  17. 【JSON】JSON入门详解(一)
  18. Java 添加 Excel 文本水印和图片水印及,及其他操作文档
  19. ViveInputUtility-手柄射线与3D物体交互(5)
  20. 简述验证Anaconda是否安装成功的两种方式和Anaconda环境变量配置过程

热门文章

  1. C语言实验报告求三角形面积,C语言作业,编程求三角形面积。
  2. windows/NBTSTAT,linux/nmblookup命令详解,查询NetBIOS名
  3. MySQL的多表操作——外键约束、多表联合查询、子查询
  4. huggingface/transformers的tokenizer的padding参数 代码示例
  5. python 金融量化盘后分析系统V0.5
  6. Linux(Ubuntu)安装和使用Edge浏览器
  7. Android 解决handler内存泄露的方法
  8. js websocket代码
  9. java游戏开发入门(八) -图像
  10. 华为手机到底用了多少美国芯?