计算机视觉-IOU怎么计算?

计算机视觉-IOU怎么计算?

呐,IOU的应用及快速实现就在下面了,在实现时特别要注意两个bbox相离的情况的处理。

0. IOU的应用有哪些?

IOU(Intersection over Union)是目标检测任务中非常常见的,IOU在目标检测中应用有:

  • 进行NMS(非极大值抑制):当在图像中预测有多个proposals、pred bboxes时,因为预测的结果中可能存在高度冗余(即一个目标可能会被预测出多个目标检测框),因此需要过滤掉一些彼此间高度重合的结果。具体操作流程是先对各个bbox的score(分类)进行降序排序,再通过设置的IOU阈值,剔除掉与得分高的bbox有高重合度的低分框。IOU设置的越大,表示剔除难度越高,最后剩余的bbox越多,而IOU设置的越小,则表示剔除难度越小,剔除力度就越大,最后剩余的bbox就越少。
  • 计算mAP:得到检测算法的预测结果后,需要对pred bbox与gt一起评估检测算法的性能,最常用的指标就是mAP。这时候,IOU常常被用于计算pred bbox与gt之间的重合度以度量bbox位置预测的准确度得分,然后通过设置的一系列阈值,依据分数和阈值来划分TP和FP,并计算得到一系列阈值设置下的(precision,recall)对,进而计算出mAP。
  • IOU经过改良后,也可以用来计算loss,通过反传梯度的方式优化网络参数。

1. IOU怎么计算?

img

2. IOU怎么实现?


import numpy as np

def calculate_iou(pred_box, gt_box):
    
    x1, y1, x2, y2 = pred_box[0], pred_box[1], pred_box[2], pred_box[3]
    x1_g, y1_g, x2_g, y2_g = gt_box[0], gt_box[1], gt_box[2], gt_box[3]

    shadow_x1 = max(x1, x1_g)
    shadow_y1 = max(y1, y1_g)
    shadow_x2 = max(min(x2, x2_g), shadow_x1)
    shadow_y2 = max(min(y2, y2_g), shadow_y1)

    bbox_w = shadow_x2 - shadow_x1
    bbox_h = shadow_y2 - shadow_y1

    intersection = bbox_h * bbox_w
    union = (x2-x1)*(y2-y1) + (x2_g-x1_g)*(y2_g-y1_g) - intersection

    iou = intersection / union

    return iou

if __name__ == "__main__":
    pred_box = np.array([50,50,90,100])
    gt_box   = np.array([0,0,20,50])

    iou = calculate_iou(pred_box, gt_box)
    print(f"IOU is {iou}")
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值