IOU

IOU
即交并比,应用:NMS(过滤重叠框)mAP

import numpt as np

def get_IOU(pred_bbox, gt_bbox):
	ixmin = max(pred_bbox[0], gt_bbox[0])
	iymin = max(pred_bbox[1], gt_bbox[1])
	ixmax = min(pred_bbox[2], gt_bbox[2])
	iymax = min(pred_bbox[3], gt_bbox[3])
	iw = np.maximum(ixmax - ixmin + 1., 0.)
	ih = np.maximum(iymax - iymin + 1., 0.)

	inters = iw * ih
	uni = ((pred_bbox[2] - pred_bbox[0] + 1.) * (pred_bbox[3] - pred_bbox[1] + 1.) + (gt_bbox[2] - gt_bbox[0] + 1.) * (gt_bbox[3] - gt_bbox[1] + 1.) - inters)

	overlaps = inters / uni
	return overlaps

def get_max_IOU(pred_bboxes, gt_bbox):
	if pred_bboxs.shape[0] > 0:
		ixmin = np.maximum(pred_bboxes[:, 0], gt_bbox[0])
		iymin = np.maximum(pred_bboxes[:, 1], gt_bbox[1])
		ixmax = np.minimum(pred_bboxes[:, 2], gt_bbox[2])
		iymax = np.minimum(pred_bboxes[:, 3], gt_bbox[3])
		iw = np.maximum(ixmax - ixmin + 1., 0.)
		ih = np.maximum(iymax - iymin + 1., 0.)

		inters = iw * ih
		uni = ((gt_bbox[2] - gt_bbox[0] + 1.) * (gt_bbox[3] - gt_bbox[1] + 1.) + (pred_bboxes[:, 2] - pred_bboxes[:, 0] + 1.) * (pred_bboxes[:, 3] - pred_bboxes[:, 1] + 1.) - inters)
		overlaps = inters / uni
		ovmax = np.max(overlaps)
		jmax = np.argmax(overlaps)

	return overlaps, ovmax, jmax

MIoU
在这里插入图片描述
MPA (均精度):计算橙色与红色圆的比例;
MIoU:计算两圆交集(橙色部分)与两圆并集(红橙黄)之间比例,理想状态两圆重合,比例为1.

代码解析:https://blog.youkuaiyun.com/jiongnima/article/details/84750819

### Intersection over Union (IoU) 的计算公式 Intersection over Union (IoU),即交并比,是一种用于衡量两个边界框之间重叠程度的指标。它通常被应用于目标检测任务中,用来评估预测边界框与真实边界框之间的相似性。 IoU 的计算方式如下: 给定一个 **预测边界框** \( B_{pred} \) 和一个 **真实边界框** \( B_{true} \),它们分别由矩形区域表示,则 IoU 定义为这两个矩形的交集面积除以它们的并集面积[^1]: \[ IoU(B_{pred}, B_{true}) = \frac{Area(\text{intersection of } B_{pred} \text{ and } B_{true})}{Area(\text{union of } B_{pred} \text{ and } B_{true})} \] 其中, - 交集部分是指两个边界框共同覆盖的区域; - 并集部分则是指两个边界框所覆盖的所有区域之和减去重复的部分。 当 IoU 值接近于 1 时,说明预测边界框与真实边界框高度重合;而当 IoU 接近于 0 时,则表明两者几乎没有重叠[^2]。 以下是 Python 实现 IoU 计算的一个简单例子: ```python def calculate_iou(boxA, boxB): # 获取边界框的坐标(x_min, y_min, x_max, y_max) xA = max(boxA[0], boxB[0]) yA = max(boxA[1], boxB[1]) xB = min(boxA[2], boxB[2]) yB = min(boxA[3], boxB[3]) # 计算交集的宽度和高度 inter_width = max(0, xB - xA + 1) inter_height = max(0, yB - yA + 1) # 计算交集面积 intersection_area = inter_width * inter_height # 计算每个边界框的面积 area_boxA = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1) area_boxB = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1) # 计算并集面积 union_area = float(area_boxA + area_boxB - intersection_area) # 返回 IoU 结果 iou = intersection_area / union_area if union_area != 0 else 0 return iou ``` 上述函数接受两个边界框 `boxA` 和 `boxB`,返回两者的 IoU 值。 --- ### 应用场景 IoU 被广泛应用于计算机视觉领域中的目标检测任务,特别是在以下几个方面: #### 1. 模型训练阶段 在监督学习的目标检测框架(如 YOLO、Faster R-CNN 等)中,IoU 是损失函数的一部分。通过最大化 IoU 或最小化其误差项,模型能够逐步调整权重以提高预测精度[^3]。 #### 2. 非极大值抑制(NMS) 在目标检测算法的结果后处理过程中,非极大值抑制技术利用 IoU 来筛选掉冗余的候选框。具体来说,对于同一物体的不同预测框,如果某些框与其他高置信度框具有较高的 IoU,则这些低优先级框会被移除。 #### 3. 性能评估 IoU 还可以用作评价标准之一,在测试数据上比较不同模型的表现优劣。例如 COCO 数据集采用平均精度均值(mAP@IoU_threshold)作为最终排名依据,这里的阈值通常是预设好的固定值(比如 0.5 或更高)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值