目标检测基础模块之IoU汇总(iou/giou/ciou/diou)

1 简介

IoU又名交并比,是一种计算不同图像相互重叠比例的算法,时常被用于深度学习领域的目标检测或语义分割任务中。

1.1 IoU在目标检测中的应用

在目标检测任务中,我们时常会让模型一次性生成大量的候选框(candidate bound),然后再根据每一个框的置信度对框进行排序,进而依次计算框与框之间的IoU,以非极大值抑制的方式,来判断到底哪一个是我们真正要找的物体,哪几个又该删除。例如在做人脸检测时,模型输出的可能是左图,而最终我们得到的是右图。

 

 在我们得到最终的输出后,也可以拿输出框与原标记框(ground truth bound)之间的IoU,使用1-IoU来作为loss(区间[0,1]找极小值),并以此实现模型的迭代优化。

模型输出框(黄色)与真实人脸框(红色)计算IoU

1.2 IoU在语义分割中的应用

在语义分割任务里,我们同样可以计算图像中的预测区域与真实区域之间的IoU,并使用1-IoU作为Loss来对模型进行迭代优化。

 

 使用模型抠出左图中的人像,右图红色区域为真实人像区域,黄色区域为模型预测结果

 

1.3 IoU的终极目标

通过上述几个例子,我们能够发现,计算IoU可以看做是在比较两个框或者两个图像的大小、区域、位置相不相同,进而可以把它想象成是在比较两个图像之间的几何图形相似度,那么我们不妨想一想,这个相似度都与哪些参数相关呢?我们能想到的有重叠比例、图形距离、形状相似度(矩形长宽比)等等。

下面我将为大家介绍IoU的计算原理,以及它是如何一步一步进行优化,朝着理想的方向迈进的。

2 IoU

2.1 IoU原理

IoU其实是Intersection over Union的简称,也叫‘交并比’。IoU在目标检测以及语义分割中,都有着至关重要的作用。

首先,我们先来了解一下IoU的定义:

直观来讲,我们可以把IoU的值定为为两个图形面积的交集和并集的比值,如下图所示:

 

 

通过IoU来评判两个图像的重合度具有以下几点优点:

  • 具有尺度不变性;
  • 满足非负性;
  • 满足对称性;

但与此同时,IoU也有几点很明显的不足:

  • 如果|A∩B|=0,也就是两个图像没有相交时,无法比较两个图像的距离远近;
  • 无法体现两个图像到底是如何相交的。

我们可以认为,这个IoU初步满足了计算两个图像的几何图形相似度的要求,简单实现了图像重叠度的计算,但无法体现两个图形之间的距离以及图形长宽比的相似性。

2.2 IoU计算

 

下面我来带大家手动计算一下IoU:

2.3 IoU实现


import numpy as np
# box:[上, 左, 下, 右]
box1 = [0,0,8,6]
box2 = [2,3,10,9]

def IoU(box1, box2):
    # 计算中间矩形的宽高
    in_h = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_w = min(box1[3], box2[3]) - max(box1[1], box2[1])
    
    # 计算交集、并集面积
    inter = 0 if in_h < 0 or in_w < 0 else in_h * in_w
    union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
            (box2[2] - box2[0]) * (box2[3] - box2[1]) - inter
    # 计算IoU
    iou = inter / union
    return iou
IoU(box1, box2)

Out: 0.23076923076923078

3 GIoU

3.1 GIoU原理

GIoU(Generalized Intersection over Union)相较于IoU多了一个‘Generalized’,这也意味着它能在更广义的层面上计算IoU,并解决刚才我们说的‘两个图像没有相交时,无法比较两个图像的距离远近’的问题。

GIoU的计算公式为:

其中C代表两个图像的最小包庇面积,也可以理解为这两个图像的最小外接矩形的面积。

由此我们可以看出:

  • 原有IoU取值区间为[0,1],而GIoU的取值区间为[-1,1];在两个图像完全重叠时,IoU=GIoU=1,在两个图像距离无限远时,IoU=0而GIoU=-1。
  • 与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注非重叠区域,这样能更好的的反映两个图像的重合度。

    此时我们可以认为,GIoU完善了图像重叠度的计算功能,但仍无法对图形距离以及长宽比的相似性进行很好的表示。

    注:GIoU论文地址https://arxiv.org/pdf/1902.09630.pdf

3.2 GIoU计算

3.3 GIoU实现

import numpy as np
# box:[上, 左, 下, 右]
box1 = [0,0,8,6]
box2 = [2,3,10,9]

def GIoU(box1, box2):
    # 计算最小包庇面积
    y1,x1,y2,x2 = box1 
    y3,x3,y4,x4 = box2
    area_C = (max(x1,x2,x3,x4)-min(x1,x2,x3,x4)) * \
             (max(y1,y2,y3,y4)-min(y1,y2,y3,y4))
    
    # 计算IoU
    in_h = min(box1[2], box2[2]) - max(box1[0], box2[0])
    in_w = min(box1[3], box2[3]) - max(box1[1], box2[1])
    inter = 0 if in_h < 0 or in_w < 0 else in_h * in_w
    union = (box1[2] - box1[0]) * (box1[3] - box1[1]) + \
            (box2[2] - box2[0]) * (box2[3] - box2[1]) - inter
    iou = inter / union
    
    # 计算空白部分占比
    end_area = (area_C - union)/area_C
    giou = iou - end_area
    return giou
GIoU(box1, box2)

Out: 0.09743589743589745

4 DIoU

4.1 DIoU原理

GIoU虽然解决了IoU的一些问题,但是它并不能直接反映预测框与目标框之间的距离,DIoU(Distance-IoU)即可解决这个问题,它将两个框之间的重叠度、距离、尺度都考虑了进来,DIoU的计算公式如下:

其中b,bgt分别代表两个框的中心点,ρ代表两个中心点之间的欧氏距离,C代表最小包庇矩形的对角线,即如下图所示:

DIoU相较于其他两种计算方法的优点是:

  • DIoU可直接最小化两个框之间的距离,所以作为损失函数的时候Loss收敛的更快;
  • 在两个框完全上下排列或左右排列时,没有空白区域,此时GIoU几乎退化为了IoU,但是DIoU仍然有效。

此时我们可以认为,DIoU在完善图像重叠度的计算功能的基础上,实现了对图形距离的考量,但仍无法对图形长宽比的相似性进行很好的表示。

注:DIoU论文地址 https://arxiv.org/pdf/1911.08287.pdf

 4.3 DIoU计算

通过计算可得,黄框中心点K、蓝框中心点J的坐标分别为:

K:(3,4) J:(6,6)

那么此时的DIoU计算公式为:

 

4.3 DIoU实现

import numpy as np
import IoU
# box:[上, 左, 下, 右]
box1 = [0,0,8,6]
box2 = [2,3,10,9]

def DIoU(box1, box2):
    # 计算对角线长度
    y1,x1,y2,x2 = box1 
    y3,x3,y4,x4 = box2
    C = np.sqrt((max(x1,x2,x3,x4)-min(x1,x2,x3,x4))**2 + \
                (max(y1,y2,y3,y4)-min(y1,y2,y3,y4))**2)
    
    # 计算中心点间距
    point_1 = ((x2+x1)/2, (y2+y1)/2)
    point_2 = ((x4+x3)/2, (y4+y3)/2)
    D = np.sqrt((point_2[0]-point_1[0])**2 + \
                (point_2[1]-point_1[1])**2)

    # 计算IoU
    iou = IoU(box1, box2)

    # 计算空白部分占比
    lens = D**2 / C**2
    diou = iou - lens
    return diou
DIoU(box1, box2)

Out: 0.1589460263493413

5 CIoU

5.1 CIoU原理

CIoU的全称为Complete IoU,它在DIoU的基础上,还能同时考虑两个矩形的长宽比,也就是形状的相似性,CIoU的计算公式为:

其中α是权重函数,而v用来度量长宽比的相似性:

可以看出,CIoU就是在DIoU的基础上,增加了图像相似性的影响因子,因此可以更好的反映两个框之间的差异性。

我们还需要注意的一点是,在使用CIoU作为Loss的时候,v的梯度同样会参与反向传播的计算,其中:

如果矩形的w和h均小于1,w2+h2的值则会很小,这样很容易出现梯度爆炸的现象,所以在计算v的梯度时,直接把  当做1来计算。

至此,我们终于完成了最初所定的目标,实现了对两个图像之间的重叠比例、图形距离、形状相似度(矩形长宽比)的综合度量。

注:CIoU论文与DIoU是同一篇。

5.2 CIoU计算

通过计算可得,黄框中心点K、蓝框中心点J的坐标分别为:

K:(3,4) J:(6,6)

此时CIoU的计算公式为:

由于最开始设定的两个矩形的形状相同,计算所得的形状惩罚项为0,因此此时CIoU=DIoU。由此可见,两个形状差别越大,CIoU相较于DIoU则越小。

5.3 CIoU实现

import numpy as np
import math
import IoU
import DIoU

# box:[上, 左, 下, 右]
box1 = [0,0,8,6]
box2 = [2,3,10,9]

def CIoU(box1, box2):
    y1,x1,y2,x2 = box1 
    y3,x3,y4,x4 = box2
    
    iou = IoU(box1, box2)
    diou = DIoU(box1, box2)

    v = 4 / math.pi**2 * (math.atan((x2-x1)/(y2-y1)) - \
                          math.atan((x4-x3)/(y4-y3)))**2 + 1e-5
    alpha = v / ((1-iou) + v)
    
    ciou = diou - alpha * v
    return ciou
CIoU(box1, box2)

Out: 0.1589460263493413

 参考文献:

https://zhuanlan.zhihu.com/p/111013447

https://www.zhihu.com/people/li-ge-35-18/posts

 

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: IoU (Intersection over Union)是计算两个区域重叠的程度的一种指标,常用于目标检测中评估预测框和真实框的匹配情况。 IoU可以有以下几种变形: - mIoU(mean IoU):对于数据集中所有样本,计算每一类的IoU并取平均值。 - gIoU(generalized IoU):对于两个区域A、B,gIoU计算如下:gIoU(A,B) = IoU(A,B) - IoU(A,B') + 1,其中B'是与B不相交的区域。 - cIoU(complete IoU):对于两个区域A、B,cIoU计算如下:cIoU(A,B) = IoU(A,B) - IoU(A,B') - IoU(A',B) + IoU(A',B') + IoU(A,B),其中A'、B'是与A、B不相交的区域。 - CIoU(confidence IoU):CIoUcIoU基础上再加入了预测框的置信度因素,公式如下:CIoU(A,B) = cIoU(A,B) - p2 * v(A) / (v(A) + v(B)),其中p2是置信度的超参数,v(A)和v(B)分别表示区域A、B的面积。 常见的目标检测任务常常使用mIoU作为性能度量指标。 ### 回答2: 目标检测中的交并比(IOU)是一种衡量检测框与真实框之间重叠程度的指标。在目标检测任务中,IOU通常用来评估检测结果的准确性。 在实际应用中,研究者对IOU进行了一些变形和扩展,以更好地适应不同的场景和需求。 1. GIOU(Generalized Intersection over Union):GIOU是对IOU的一种改进,考虑了目标框的尺寸和位置信息,同时考虑了检测框和真实框之间的平移和缩放关系。 2. DIOU(Distance-IoU):DIOU基于IOU和目标框的中心距离进行了修改。它考虑了物体的大小和位置信息,并通过计算中心距离来惩罚检测框与真实框之间的重叠不足。 3. CIOU(Complete-IoU):CIOU是对DIOU的改进,它还考虑了宽高比的一致性。CIOU通过计算对角线距离来衡量两个框之间的距离,从而更好地描述检测框和真实框之间的相似度。 以上是目标检测中常用的IOU变形的汇总。这些改进方法能够更准确地评估检测结果的质量,并帮助提升目标检测算法的性能和准确性。研究者们不断尝试更多的变体,并希望能够找到更好的方式来衡量目标检测的结果。 ### 回答3: 目标检测中的Intersection over Union(IoU)是一种常用的评估指标,用于衡量预测框与真实标注框之间的重叠程度。除了传统的IoU指标外,还有一些关于IoU的变形方法。 首先是GIoU(Generalized IoU),它通过计算预测框与真实标注框的最小闭包矩形(minimum enclosing rectangle,MER)的面积和真实标注框的面积之比来进行衡量。相比传统的IoUGIoU考虑了预测框与真实标注框之间的位置偏移,能够更好地评估不同形状的目标。 接下来是DIoU(Distance IoU),它在GIoU基础上还考虑了预测框与真实标注框之间的中心点距离。DIoU可以有效地解决多目标检测中的crowding问题,改进了目标之间的重叠度量。 还有CIoU(Complete IoU),它在DIoU基础上进一步考虑了长宽比的相似性。CIoU使用一个参数来衡量长宽比的差异,可以更加准确地评估目标的匹配程度。 此外,还有EIoU(Efficient IoU)等其他变形方法,它们主要通过改进IoU的计算方式来提高检测算法的效率。 总的来说,这些IoU的变形方法在目标检测中起到了衡量目标检测精度的作用,能够更好地评估预测框与真实标注框之间的重叠程度,从而提高目标检测算法的准确性和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DLANDML

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值