当前位置:网站首页>【IoU loss】IoU损失函数理解
【IoU loss】IoU损失函数理解
2022-08-03 05:27:00 【寻找永不遗憾】
1 引言
目标检测任务的损失函数由Classificition Loss和Bounding Box Regeression Loss两部分构成。
Bounding Box Regression Loss Function的演进路线是:
Smooth L1 Loss --> IoU Loss --> GIoU Loss --> DIoU Loss --> CIoU Loss
之前写到了Smooth L1 Loss,本文介绍IoU Loss。
2 问题分析
Iou loss提出前,大家主要通过4个坐标点独立回归Bounding box(bbox,边界框),这样做的缺点有:
- 目标检测的评价方式是使用IoU,而实际回归坐标框的时候使用4个坐标点,二者是不等价的,如下图所示;
- L1或者L2 Loss相同的框,其IoU 不是唯一的
- 通过4个坐标点回归坐标框的方式,是假设4个点相互独立的,没有考虑其相关性,实际4个坐标点具有一定的相关性
- 基于L1和L2的距离的loss对于尺度 不具有 不变性


图(a)中的三组框具有相同的L2 Loss,但其IoU差异很大;
图(b)中的三组框具有相同的L1 Loss,但IoU 同样差异很大。
说明L1,L2这些Loss用于回归任务时,不能等价于最后用于评测检测的IoU。
3 IoU Loss
针对上面的问题,旷世在2016年提出IoU Loss,将4个点构成的box看成一个整体进行回归。
上图展示了L2 Loss和IoU Loss 的求法,图中的红色点表示目标检测网络结构中Head部分上的点(i, j),绿色的框表示Ground truth框, 蓝色的框表示Prediction的框。
IoU loss的定义如上,先求出2个框的IoU,然后再求-ln(IoU)。其中IoU是真实框和预测框的交集和并集之比,当它们完全重合时,IoU就是1。
对于Loss来说,越小越好,loss越小说明他们重合度高。所以,IoU Loss也可以写为1-IoU。
IoU loss能够更好的反应重合程度,具有尺度不变形。但当框不相交,使用1-IoU作为loss时,loss为0。
4 代码演示IoU
import cv2
import numpy as np
def CountIOU(RecA, RecB):
xA = max(RecA[0], RecB[0])
yA = max(RecA[1], RecB[1])
xB = min(RecA[2], RecB[2])
yB = min(RecA[3], RecB[3])
# 计算交集部分面积
interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)
# 计算预测值和真实值的面积
RecA_Area = (RecA[2] - RecA[0] + 1) * (RecA[3] - RecA[1] + 1)
RecB_Area = (RecB[2] - RecB[0] + 1) * (RecB[3] - RecB[1] + 1)
# 计算IOU
iou = interArea / float(RecA_Area + RecB_Area - interArea)
return iou
img = np.zeros((512,512,3), np.uint8)
img.fill(255)
# 分别是矩形左上、右下的坐标
RecA = [30,30,300,300]
RecB = [60,60,350,340]
cv2.rectangle(img, (RecA[0],RecA[1]), (RecA[2],RecA[3]), (0, 255, 0), 5)
cv2.rectangle(img, (RecB[0],RecB[1]), (RecB[2],RecB[3]), (255, 0, 0), 5)
IOU = CountIOU(RecA,RecB)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(img,"IOU = %.2f"%IOU,(130, 190),font,0.8,(0,0,0),2)
cv2.imshow("image",img)
cv2.waitKey()
cv2.destroyAllWindows()

5 感谢链接
https://zhuanlan.zhihu.com/p/104236411
边栏推荐
- C#操作FTP上传文件后检查上传正确性
- 游戏3D建模师是吃青春饭的吗?被高薪挖掘的建模人才,靠的是这个
- How the world's leading medical technology company maximizes design productivity | SOLIDWORKS Product Exploration
- 详解SSL证书的分类以及如何选择合适的证书?
- 移动端人脸风格化技术的应用
- 剑指 Offer II 001. 整数除法
- 二层交换机,三层交换机,路由器内容总结记录
- 【地平线 开发板】实现模型转换并在地平线开发板上部署的全过程操作记录(魔改开发包)
- Unity Animation从UAS获取动画资产到编制状态机控制简单的人物动画
- 2021-06-15
猜你喜欢
随机推荐
ue4学习日记2(项目迁移,画刷,附材质)
数组与字符串14-使用双指针移除元素
C # program with administrator rights to open by default
TFS(Azure DevOps)禁止多人同时签出
【C语言】斐波那契数列
g++ parameter description
使用Contab调用Shell脚本执行expdp自动备份Oracle
内网渗透信息收集
contos install php-ffmpeg and tp5.1 using plugin
CPU上下文切换详解思维导图
3D建模:做什么副业在家就能月入1W?
802.1AS 时钟同步原理理解
详解SSL证书的分类以及如何选择合适的证书?
802.1AS的SystemIdentity理解
阿里云短信服务的使用(创建,测试笔记)
3. What is the difference between final, finally, and finalize?
Unity Animation从UAS获取动画资产到编制状态机控制简单的人物动画
MySql数据格式转成Redis键值对格式
ue4学习日记4(植被,光照,光束遮挡,天空球)
xshell报错-要继续使用此程序,您必须应用最新的更新或使用新版本









