IoU代码竟如此简单

本文深入讲解了交并比(IoU)的计算方法,通过具体的Python代码实现,展示了如何计算两个矩形框之间的交并比,并提供了多个示例来验证算法的正确性。IoU是目标检测和图像识别中用于评估预测框与真实框重叠程度的重要指标。

IoU代码:

def IoU(lx_1,ly_1,rx_1,ry_1,lx_2,ly_2,rx_2,ry_2):
    '''
    :param lx_1: 第一个box的左上角x坐标
    :param ly_1: 第一个box的左上角y坐标
    :param rx_1: 第一个box的右下角x坐标
    :param ry_1: 第一个box的右下角y坐标
    :param lx_2: 第二个box的左上角x坐标
    :param ly_2: 第二个box的左上角y坐标
    :param rx_2: 第二个box的右下角x坐标
    :param ry_2: 第二个box的右下角y坐标
    :return:
    '''
    area_1=(rx_1-lx_1)*(ry_1-ly_1)
    area_2=(rx_2-lx_2)*(ry_2-ly_2)
    x1=max(lx_1,lx_2)
    y1=max(ly_1,ly_2)
    x2=min(rx_1,rx_2)
    y2=min(ry_1,ry_2)
    in_area=abs(x1-x2)*abs(y1-y2)
    return  in_area/(area_2+area_1-in_area)

测试:

IoU(0,0,2,2,2,2,3,3)
Out[3]: 0.0
IoU(0,0,2,2,0,0,3,3)
Out[4]: 0.4444444444444444
IoU(0,0,2,2,0,0,2,2)
Out[5]: 1.0
IoU(0,0,2,2,0,0,1,1)
Out[6]: 0.25
### Mean IoU (mIoU) 计算代码实现 为了计算平均交并比(Mean Intersection over Union, mIoU),通常需要先获取每个类别的IoU值,再求这些IoU值得均值。下面是一个Python函数用于计算给定预测标签和真实标签之间的mIoU。 ```python import numpy as np def intersection_over_union(preds, labels, num_classes): """ Calculate the Intersection Over Union (IoU) for each class. 参数: preds: 预测的类别标签数组 labels: 真实的类别标签数组 num_classes: 类别总数 返回: iou_list: 各个类别的IoU列表 """ ious = [] pred_area = np.histogram(preds, bins=np.arange(num_classes + 1))[0] label_area = np.histogram(labels, bins=np.arange(num_classes + 1))[0] intersection = np.histogram2d( labels.flatten(), preds.flatten(), bins=num_classes, range=[[-0.5, num_classes-0.5],[-0.5, num_classes-0.5]] )[0] union = pred_area + label_area - intersection for cls_id in range(num_classes): if union[cls_id] == 0: iou = 0 else: iou = intersection[cls_id] / union[cls_id] ious.append(iou) return ious def mean_intersection_over_union(class_ious): """Calculate the mean of all classes' IoUs.""" miou = np.nanmean(class_ious) return miou ``` 此段代码定义了两个主要功能:`intersection_over_union()` 和 `mean_intersection_over_union()`. 前者负责计算各个类别的IoU;后者则用来计算所有类别上IoU得分的平均值[^1]. 对于边界F1分数和其他变体如GIOU、DIOU等,则涉及更复杂的几何关系处理,在这里不作展开讨论[^2]. 不过值得注意的是,选择合适的损失函数可以减少因数据质量问题带来的负面影响,并有助于提高模型的整体表现[^3].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值