深度学习笔记 - IoU python 高质量实现
程序员文章站
2022-04-21 19:20:16
文章目录深度学习笔记7 - IoU python 实现一、IoU 含义二、算法实现深度学习笔记7 - IoU python 实现一、IoU 含义二、算法实现算法思想#!/usr/bin/env python# encoding: utf-8'''@Author : pentiumCM@Email : 842679178@qq.com@Software: PyCharm@File : iou_utils.py@Time : 2020/11/22 15:32@de...
深度学习笔记7 - IoU python 实现
一、IoU 含义
IoU:IoU 的全称为交并比(Intersection over Union),IoU 计算的是 “预测框” 和 “真实框” 的交集和并集的比值。
图示如下:
二、算法实现
真实框和预测框根据实际情况,有如上四种位置关系。如果按照 暴力法 来求解 IoU 势必是一件特别麻烦而且不酷的事,如何帅气地实现 IoU 的算法,可以看我下面算法思想的环节。
算法思想:
我们以上图图2为例,IoU 的计算,是用真实框和预测框的交集面积 / 真实框和预测框的并集面积。所以关键的步骤需要求出交集部分的坐标,即上图中的A,B两点。
得到A,B坐标之后便可求出交集的宽高,来求出交集的面积。并集的面积 = 真实框的面积 + 预测框的面积 - 交集的面积。
问题便可解决
-
A,B坐标求法:
A:交集部分的左上坐标,来源于 真实框和预测框左上坐标中的较大值。 inter_upleft = np.maximum(box1[:2], box2[:2])
B:交集部分的左上坐标,来源于 真实框和预测框左上坐标中的较大值。 inter_botright = np.minimum(box1[2:], box2[2:]) -
交集的宽高求法:
inter_wh = inter_botright - inter_upleft
inter_wh = np.maximum(inter_wh, 0) :如果没有交集,宽高就赋值为0,解决图3,4的情况。
关于 np.maximum,np.minimum的解释如下:
np.maximum(X, Y, out=None):X 和 Y 逐位进行比较,选择最大值。
np.maximum(X, Y, out=None):X 和 Y 逐位进行比较,选择最小值。
完整代码如下:
#!/usr/bin/env python
# encoding: utf-8
'''
@Author : pentiumCM
@Email : 842679178@qq.com
@Software: PyCharm
@File : iou_utils.py
@Time : 2020/11/22 15:32
@desc : iou的工具模块
'''
import numpy as np
def iou(box1, box2):
"""
计算预测框和真实框之间的IoU
:param box1:预测框
:param box2: 真实框
:return:
"""
inter_upleft = np.maximum(box1[:2], box2[:2])
inter_botright = np.minimum(box1[2:], box2[2:])
inter_wh = inter_botright - inter_upleft
inter_wh = np.maximum(inter_wh, 0)
# 交集面积
inter = inter_wh[0] * inter_wh[1]
# 真实框的面积
area_gt = (box2[2] - box2[0]) * (box2[3] - box2[1])
# 预测框的面积
area_pred = (box1[2] - box1[0]) * (box1[3] - box1[1])
# 并集面积
union = area_gt + area_pred - inter
# 计算 IoU
iou_val = inter / union
return iou_val
if __name__ == '__main__':
box1 = np.array([50, 100, 150, 200])
box2 = np.array([100, 50, 200, 150])
iou_val = iou(box1, box2)
print(iou_val)
本文地址:https://blog.csdn.net/pentiumCM/article/details/109962380
推荐阅读
-
python OpenCV学习笔记直方图反向投影的实现
-
python开启摄像头以及深度学习实现目标检测方法
-
python OpenCV学习笔记实现二维直方图
-
深度学习笔记 - IoU python 高质量实现
-
Coursera吴恩达《神经网络与深度学习》课程笔记(3)-- 神经网络基础之Python与向量化
-
MXNet动手学深度学习笔记:Gluon实现Dropout
-
深度学习框架Pytorch——学习笔记(六)PyTorch实现L1,L2正则化以及Dropout
-
(pytorch-深度学习系列)pytorch避免过拟合-dropout丢弃法的实现-学习笔记
-
《统计学习方法》读书笔记(1)——感知机学习算法的简单Python实现
-
【深度学习学习笔记】3.LogisticRegression之一:实现sigmoid的交叉熵损失函数