计算一个框和其他所有框的IOU

博客围绕Python、算法和深度学习展开,提及了Pytorch。Python在深度学习领域应用广泛,借助相关算法,结合Pytorch框架,可实现各类深度学习任务,推动信息技术发展。
部署运行你感兴趣的模型镜像
import os
import json
import numpy as np
def culculate_iou(box,checked_boxes):
    '''

    :param box: [x1,y1,x2,y2]
    :param checked_boxes: [N,x1,y1,x2,y2]
    :return:
    '''
    b1=np.array(box)
    b2=np.array(checked_boxes)
    xx=np.maximum(b1[0],b2[:,0])
    yy=np.maximum(b1[1],b2[:,1])
    XX=np.minimum(b1[2],b2[:,2])
    YY=np.minimum(b1[3],b2[:,3])
    intersect = np.maximum(0,XX-xx)*np.maximum(0,YY-yy)
    s_b1 = np.maximum(0, b1[2] - b1[0]) * np.maximum(0, b1[3] - b1[1])
    s_b2 = np.maximum(0, b2[:,2] - b2[:,0]) * np.maximum(0, b2[:,3] - b2[:,1])
    sum_area=s_b1+s_b2
    iou=intersect/(sum_area-intersect)*1.0
    list_iou=list(iou)
    return max(iou),list_iou.index(max(list_iou))

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

计算预测边界真实边界之间的交并比(IoU)值,主要涉及以下几个步骤: 1. **定义边界**: 边界通常由其左上角右下角的坐标表示。例如,一个边界可以表示为 `[x1, y1, x2, y2]`,其中 `(x1, y1)` 是左上角坐标,`(x2, y2)` 是右下角坐标。 2. **计算两个边界的交集区域**: 交集区域的左上角坐标是两个边界坐标的最大值,右下角坐标是最小值。如果这两个坐标之间没有重叠,则交集区域的面积为0。 3. **计算两个边界的并集区域**: 并集区域的面积等于两个边界面积之减去交集区域的面积。 4. **计算IoU**: IoU 的公式为: $$ \text{IoU} = \frac{\text{交集区域面积}}{\text{并集区域面积}} $$ 以下是一个具体的实现代码示例,用于计算两个边界集合之间的 IoU 值: ```python import torch # 定义计算边界面积的函数 def box_area(boxes): return (boxes[:, 2] - boxes[:, 0]) * (boxes[:, 3] - boxes[:, 1]) # 示例输入边界集合 boxes1 = torch.tensor([[0, 0, 2, 2], [1, 1, 3, 3]]) # 预测边界 boxes2 = torch.tensor([[1, 0, 3, 2], [0, 1, 2, 3]]) # 真实边界 # 计算每个边界的面积 areas1 = box_area(boxes1) areas2 = box_area(boxes2) # 计算交集区域的左上角右下角坐标 inter_upperlefts = torch.max(boxes1[:, None, :2], boxes2[:, :2]) inter_lowerrights = torch.min(boxes1[:, None, 2:], boxes2[:, 2:]) # 计算交集区域的宽度高度,并确保它们不为负数 inters = (inter_lowerrights - inter_upperlefts).clamp(min=0) inter_areas = inters[:, :, 0] * inters[:, :, 1] # 计算并集区域的面积 union_areas = areas1[:, None] + areas2 - inter_areas # 计算IoU iou_values = inter_areas / union_areas print("IoU values:\n", iou_values) ``` ### 输出说明 - `iou_values` 是一个二维张量,其中 `iou_values[i][j]` 表示 `boxes1` 中第 `i` 个边界与 `boxes2` 中第 `j` 个边界之间的 IoU 值。 通过上述方法,可以有效地计算预测边界真实边界之间的 IoU 值,这在目标检测任务中常用于评估模型的性能[^4]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值