Object Detection--Loss Function:从IoU到CIoU

本文分析了IoU在计算两个框的相似度时存在的问题,如在不重叠和完全相同情况下的局限性。随后介绍了GIoU,通过引入最小外接矩形的面积来改进IoU,讨论了它在处理特定场景时的倾向性。
摘要由CSDN通过智能技术生成

本篇总结Loss Function中的IoU系列代码。

1. IoU

交并集,两个框交集面积除以并集面积。(论写写画画的重要性)(找原文看看)

"""
box1[x1, y1, x2, y2]
box2[x1, y1, x2, y2]
return iou
"""
def iou(box1, box2):
    # Intersection
    w = max(0, min(box1[2], box2[2])-max(box1[0], box2[0]))
    h = max(0, min(box1[3], box2[3])-max(box1[1], box2[1]))
    
    # Union
    s1 = (box1[2]-box1[0]) * (box1[3]-box1[1])
    s2 = (box2[2]-box2[0]) * (box2[3]-box2[1])
    
    return (w*h)/(s1+s2-w*h)

 IoU的问题:

(1)在检测框和目标框完全不重叠时,IoU为0,无法衡量两个框的距离远近,损失函数不可导,无法优化;

(2)两个检测框相同,IoU也相同时,无法衡量两者和目标框相交情况的不同(这点一定要区分吗?)。

2. GIoU

 公式:

 GIoU=IoU- \frac{C-U}{C}

 其中C表示最小外接矩形面积,U表示并集面积。

(找原文看看)

"""
box1[x1, y1, x2, y2]
box2[x1, y1, x2, y2]
return giou
"""
def giou(box1, box2):
    # Intersection
    w = max(0, min(box1[2], box2[2])-max(box1[0], box2[0]))
    h = max(0, min(box1[3], box2[3])-max(box1[1], box2[1]))
    
    # Union
    s1 = (box1[2]-box1[0]) * (box1[3]-box1[1])
    s2 = (box2[2]-box2[0]) * (box2[3]-box2[1])
    union = s1+s2-w*h
    
    iou = (w*h)/union
    
    # area of minimun rectangular
    x1 = min(box1[0], box2[0])
    x2 = max(box1[2], box2[2])
    y1 = min(box1[1], box2[1])
    y2 = max(box1[3], box2[3])
    
    c = (x2-x1) * (y2-y1)
    return iou-(c-union)/c

疑问:当两个检测框大小相同,和目标框的IoU相同时,GIoU更倾向于使检测框和目标框在x或y方向上平行,这样合理吗?

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值