其他分享
首页 > 其他分享> > IOU 系列

IOU 系列

作者:互联网

IOU 

 

def iou(rec1, rec2):
    """
    rec1: [left1,top1,right1,bottom1]
    rec2: [left2,top2,right2,bottom2]
    """
    # 重合部分
    left_max = max(rec1[0], rec2[0])
    top_max = max(rec1[1], rec2[1])
    right_min = min(rec1[2], rec2[2])
    bottom_min = min(rec1[3], rec2[3])
    # 两矩形相交时计算IoU
    if (left_max > right_min or bottom_min < top_max):  # 没有交集
        return 0
    else:
        rect1_area = (rec1[2] - rec1[0]) * (rec1[3] - rec1[1])
        rect2_area = (rec2[2] - rec2[0]) * (rec2[3] - rec2[1])
        area_cross = (bottom_min - top_max) * (right_min - left_max)
        return area_cross / (rect1_area + rect2_area - area_cross)

 

存在问题

1. 如果两个目标没有重叠,iou 为 0,微调位置 无法反应 两目标之间的位置变话,loss = 1 - iou 恒为 1,无法优化

2.iou 无法区分 两个目标 的对齐方式,不同的对齐方式下,iou 可能相等,如下图

GIOU

不多说

存在问题

1. GIOU 训练较慢

2. GIOU 倾向得到一个较大的 bbox

3. GIOU 区分两个对象之间的对齐方式比较间接,仅通过引入C的方式来反应重叠的方式,不够直接。如下图所示。第二幅图展示来当GIoU一样的情况下,DIoU是不一致的

DIOU  【Distance-IoU】

不多说,记住就好

 

CIOU

在DIoU的基础上增加了对长宽比的惩罚项

 

EIOU

w=(w1-w2)*(w1-w2)
h=(h1-h2)*(h1-h2)
eiou = iou-(rho2/c2+w/(cw**2)+h/(ch**2))

Leiou = 1 - eiou  

 

 

 

 

参考资料:

https://blog.csdn.net/weixin_40922744/article/details/102988751  超简单的IoU python3实现

https://www.cnblogs.com/wojianxin/p/12581056.html  python实现IoU

https://blog.csdn.net/weixin_41735859/article/details/89288493  GIoU详解

https://zhuanlan.zhihu.com/p/57992040  CVPR2019: 使用GIoU作为检测任务的Loss

https://blog.csdn.net/liangdong2014/article/details/114380202  详解GIoU、DIoU、CIoU Loss

https://mp.weixin.qq.com/s/0U4Y_ZEI2YvW1sMHxRfwMQ  YOLOv5改进之七:损失函数改进

标签:系列,min,max,IOU,area,https,rec2,rec1
来源: https://www.cnblogs.com/yanshw/p/15339270.html