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