什么是IOU?

简单来说IOU就是用来度量目标检测中预测框与真实框的重叠程度。在图像分类中,有一个明确的指标准确率来衡量模型分类模型的好坏。其公式为:

acc=PtrueNN=全部样本的数量,Ptrue=预测正确的样本数量acc = \frac{P_{true}}{N} {\quad}{\quad}{\quad}{\quad}{\quad}{\quad}{\quad}N=全部样本的数量,P_{true}=预测正确的样本数量 acc=NPtrue​​N=全部样本的数量,Ptrue​=预测正确的样本数量

这个公式显然不适合在在目标检测中使用。我们知道目标检测中都是用一个矩形框住被检测物体,又因为检测物体尺度不同,预测框与真实框或大或小。所以度量标准必然是具有尺度不变性的,那么大神们就引入了一个概念IOU(交并比),用预测框(A)和真实框(B)的交集除上二者的并集,其公式为:
IOU=A∩BA∪BIOU = \frac{A\cap B}{A\cup B} IOU=A∪BA∩B​

显而易见,IOU的值越高也说明A框与B框重合程度越高,代表模型预测越准确。反之,IOU越低模型性能越差。

IOU应用场景

除了作为目标检测的评价指标,IOU还有其他应用场景:

  1. 在anchor-based方法的目标检测中,根据IOU的值来区分正样本和负样本。
  2. 可以直接作为边界框回归的loss函数进行优化。
  3. 在NMS(非极大值抑制)对预测框筛选。

IOU的优缺点

普通IOU的优缺点很明显,优点:

  • IOU具有尺度不变性
  • 满足非负性

同时,由于IOU并没有考虑框之间的距离,所以它的作为loss函数的时候也有相应的缺点:

  • 在A框与B框不重合的时候IOU为0,不能正确反映两者的距离大小。
  • IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IOU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。

对IOU进行改进

普通IOU是对两个框的距离不敏感的,下面两张图中,左图预测框的坐标要比右图预测框的坐标更接近真实框。但两者的IOU皆为0,如果直接把IOU当作loss函数进行优化,则loss=0,没有梯度回传,所以无法进行训练。

GIOU

  1. 对于任意的两个A、B框,首先找到一个能够包住它们的最小方框,例如在上述场景 A 和 B 中,C 的形状分别为:

  1. 计算IOU

  2. 根据A、B,我们可以算出C的面积,有了C的面积就可以计算出GIOU了:
    GIOU=IOU−C−(A∪B)CGIOU = IOU - \frac{C - (A\cup B)}{C} GIOU=IOU−CC−(A∪B)​
    GIOU=−1+(A∪B)C(IOU=0)GIOU = -1 + \frac{(A\cup B)}{C} \quad\quad\quad(IOU=0) GIOU=−1+C(A∪B)​(IOU=0)

而当IOU为0时,意味着A与B非常远时,A∪BC\frac{A\cup B}{C}CA∪B​无限接近于0,GIOU趋近于-1,同理当IOU为1时,两框重合,A∪BC\frac{A\cup B}{C}CA∪B​为1。所以GIOU的取值为(-1, 1]。

GIOU作为loss函数时,为L=1−GIOUL=1-GIOUL=1−GIOU ,当A、B两框不相交时A∪BA\cup BA∪B值不变,最大化GIOUGIOUGIOU就是就小化CCC,这样就会促使两个框不断靠近。

DIoU

尽管GIoU解决了在IoU作为损失函数时梯度无法计算的问题,且加入了最小外包框作为惩罚项。但是它任然存在一些问题。下图第一行的三张图片是GIoU迭代时预测框收敛情况。其中黑色框代表anchor,蓝色框代表预测框,绿色框代表真实框。

上图中可以看出,GIoU在开始的时候需要将检测结果方法使其与目标框相交,之后才开始缩小检测结果与GT重合,这就带来了需要较多的迭代次数才能收敛问题,特别是对于水平与垂直框的情况下。此外,其在一个框包含另一个框的情况下,GIoU降退化成IoU,无法评价好坏,见下图所示:

综合以上的问题,又有大神提出了DIoU:
DIoU=ρ2(A,B)c2DIoU =\frac{\rho^2(A, B)}{c^2} DIoU=c2ρ2(A,B)​
其中d=ρ(A,B)d = \rho(A, B)d=ρ(A,B)是A框与B框中心点坐标的欧式距离,而ccc则是包住它们的最小方框的对角线距离。

完整的DIoU Loss定义如下:
LDIoU=1−IoU+ρ2(A,B)c2L_{DIoU} = 1 - IoU + \frac{\rho^2(A, B)}{c^2} LDIoU​=1−IoU+c2ρ2(A,B)​
从公式和示意图中,我们可以看到,DIoU有几个优点:

  1. DIoU的惩罚项是基于中心点的距离和对角线距离的比值,避免了像GIoU在两框距离较远时,产生较大的外包框,Loss值较大难以优化(因为它的惩罚项是A∪BA \cup BA∪B比上最小外包框的面积)。所以DIoU Loss收敛速度会比GIoU Loss快。
  2. 即使在一个框包含另一个框的情况下,c值不变,但d值也可以进行有效度量。

CIoU

同时DIoU的作者考虑到,在两个框中心点重合时,c与d的值都不变。所以此时需要引入框的宽高比:
CIoU=ρ2(A,B)c2+αvCIoU = \frac{\rho^2(A, B)}{c^2} + \alpha v CIoU=c2ρ2(A,B)​+αv
其中α\alphaα是权重函数,vvv用来度量宽高比的一致性:
α=v(1−IoU)+v\alpha = \frac{v}{(1 - IoU) + v} α=(1−IoU)+vv​

v=4π2(arctanwgthgt−arctanwh)2v = \frac{4}{\pi^2}(arctan \frac{w^{gt}}{h^{gt}} - arctan\frac{w}{h})^2 v=π24​(arctanhgtwgt​−arctanhw​)2

最终CIoU Loss定义为:
CIoU=1−IoU+ρ2(A,B)c2+αvCIoU = 1 - IoU + \frac{\rho^2(A, B)}{c^2} + \alpha v CIoU=1−IoU+c2ρ2(A,B)​+αv

  • GIoU论文
  • DIoU与CIoU论文

目标检测中的IoU、GIoU、DIoU与CIoU相关推荐

  1. 目标检测中的Iou与map指标详细介绍(零基础)

    目标检测中的Iou与map指标详细介绍(零基础) 最近在算法岗实习,更新的频率会低一点,希望在实习过程中学到更多有用的视觉知识. IOU指标 下图中Ground truth为标记的正确框,Predic ...

  2. 机器学习知识总结 —— 11. 关于目标检测中的IoU是什么

    文章目录 1. 什么是 IoU 2. 什么是「边界框(bounding box)」 3. 如何计算IoU 1. 什么是 IoU 在深度学习的相关任务中,尤其当涉及到目标识别这一类的任务时,总能在论文或 ...

  3. 目标检测回归损失函数简介:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源:极市平台 目标检测任务的损失函数由Classificitio ...

  4. 目标检测回归损失函数——IOU、GIOU、DIOU、CIOU、EIOU

    一.IOU Loss 上一篇文章提到L1,L2及其变种只将Bounding box的四个角点分别求loss然后相加,没有引入box四个顶点之间的相关性并且模型在训练过程中更偏向于尺寸更大的物体.在此基 ...

  5. 目标检测回归损失函数:SmoothL1/IoU/GIoU/DIoU/CIoU Loss

    文章目录 1. Smooth L1 Loss 1.1 假设x为预测框和真实框之间的数值差异,常用的L1和L2 Loss定义为: 1.2 上述的3个损失函数对x的导数分别为: 1.3 实际目标检测框回归 ...

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

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

  7. 目标检测中NMS和mAP指标中的的IoU阈值和置信度阈值

    有时候路走的太远,会忘了为什么要出发. 学习亦如是 在目标检测中,经常看到置信度阈值和IoU阈值这两个关键参数,且NMS计算和mAP计算中都会有这两个,那它们的区别是什么?本文就这个问题做一次总结. ...

  8. 目标检测中IoU(Intersection over Union)的概念理解

    参考博客 深度学习中IU.IoU(Intersection over Union)的概念理解以及python程序实现 一.IoU(交并比)概念 Intersection over Union,是一种测 ...

  9. 【深度学习】目标检测中 IOU 的概念及计算

    在目标检测当中,有一个重要的概念就是 IOU.一般指代模型预测的 bbox 和 Groud Truth 之间的交并比. 何为交并比呢? I O U = A ∩ B A ∪ B IOU = \frac{ ...

最新文章

  1. python社会学科需要学些什么_学好Python能做什么
  2. 给Ocelot做一个Docker 镜像
  3. ASUS华硕笔记本电脑的数字小键盘按什么健切换?
  4. 在Python中使用XGBoost
  5. OpenAI 挑战《索尼克》,阿里南大队如何一举夺魁?
  6. 获取 RPM 包常用站点
  7. 在线教育雪崩:藏在家长群里的“水军”消失了
  8. nbu WIN平台下面(mtx/robtest/tar/nt_ttu)手动测试driver是否正常
  9. Android WifiManager.WifiLock 简介
  10. html5 手机剪切板,H5页面在手机端如何实现复制粘贴板功能
  11. 午间一乐:no zuo no die,唱起来
  12. 一个猫下面的计算机互相访问,光猫连接路由器和电脑如何互相访问
  13. 计算机无法打开cad文件,无法打开cad文件的解决方法
  14. Android Canvas.scale缩放
  15. 第二章:图像基本操作 1-计算机眼中的图像
  16. 示坡线高程判断_【专题突破】等高线地形图的判读技巧
  17. 人工智能时代,普通的我们如何提升自己的核心竞争力
  18. 数学推理相关的几个名词及LaTeX用法
  19. java 爬虫 获取京东_Java爬虫爬取京东
  20. uni使用echarts自定义图标(圆形雷达图)

热门文章

  1. 2012年下半年11月份系统架构设计师上午试题答案之一
  2. 3D数字展厅 | 线上展会应用方案
  3. 大学计算机基础教程第14章信息安全
  4. tornado之目录
  5. 10个Scratch热门作品(4)
  6. Python3爬取网页中图片(2021-01-04 14:06:02),附上完整代码
  7. Mysql 定时任务的关闭
  8. 游戏开发总结-java篇
  9. evaluate函数在python_Pandas探索之高性能函数eval和query解析
  10. 数控编程球面计算机,基于UG NX的非球面镜片五轴数控编程技术