小知识IoU的计算实现Python
1. 交并比(IoU)
具体来说,它是两边界框相交部分面积与相并部分面积之比,如下所示:
也就是两个框的交集和两个框的并集之比。
2.原理
这里详细解释一下计算的原理:
一般来说我们给定框的坐标有两种形式:[x,y,w,h]
(或者说是[x,y,h,w]
原理一样) 其中这里的x,y代表框的中心坐标,w代表宽,h代表高度。那么我们用中心坐标分别加上(减去)w/2和h/2就能把框四个角的坐标求出来。[x1,y1,x2,y2]
x1,y1代表左上角的顶点坐标,x2,y2代表右下角的坐标。也就是把对角的两个坐标给出。两种形式计算IoU的区别不大,以第一种形式为例子:
我们想要把两个框相交区域的面积(即深蓝色区域)S求出来,那么就要知道这个区域的宽和高,也就是图中的w和h。首先,我们根据给的[x,y,w,h]
坐标框可以把两个框的所有坐标计算出来:
看上图的两个虚线框,虚线框将两个框的上边线(下边线)框在了一起,要求h,我们只需要看Y轴方向,两条上边线的Y坐标分别是4(篮框)和3(黄框),两者取小即Ymax=3
,同理下边线要取大即Ymin=2
,很明显:
h=Ymax-Ymin=1,w同理。总结就是上取小下取大,右取小左取大,
3.代码实现
import numpy as np
class calculate_iou():
def __init__(self,box1,box2):
self.box1=box1
self.box2=box2
#以中心坐标格式为例
def center_iou(self):
x1,y1,w1,h1=self.box1
x2,y2,w2,h2=self.box2
#计算每个框的上下左右边线的坐标
y1_max=y1 h1/2
x1_max=x1 w1/2
y1_min=y1-h1/2
x1_min=x1-w1/2
y2_max=y2 h2/2
x2_max=x2 w2/2
y2_min=y2-h2/2
x2_min=x2-w2/2
#上取小下取大,右取小左取大
xx1 = np.max([x1_min, x2_min])
yy1 = np.max([y1_min, y2_min])
xx2 = np.min([x1_max, x2_max])
yy2 = np.min([y1_max, y2_max])
#计算各个框的面积
area1 = (x1_max-x1_min) * (y1_max-y1_min)
area2 = (x2_max-x2_min) * (y2_max-y2_min)
#计算相交的面积
inter_area = (np.max([0, xx2-xx1])) * (np.max([0, yy2-yy1]))
#计算IoU
iou = inter_area / (area1 area2-inter_area)
return iou
#传入目标框的坐标
a=calculate_iou([2,2,2,2],[3,3,2,2])
print(1/7) # 根据公式手动计算的IoU:0.14285714285714285
a.center_iou() # 0.14285714285714285
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfebjb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01