简介
IOU计算一直是目标检测中最重要的一个环节。虽然iou在数学上定义很简单,但是想大规模计算还是有点复杂,我自己利用numpy和torch库仔细写了一下iou算法,从而加深对iou计算的印象。
Numpy 版本
import numpy as np
def get_iou(a_boxs,gt_boxs):
'''
Args:
a_boxs (N, 4): predicted boxes.
gt_boxs (N, 4): ground truth boxes.
Returns:
iou (N): IoU values.
'''
k = gt_boxs.shape[0]
iou = []
# 由于一张图像的gt_boxs数量远小于anchors,故遍历gt_boxs
for i in range(k):
iou.append(iou_ab(a_boxs,gt_boxs[i][np.newaxis,:]))
iou = np.array(iou)
print(iou)
def iou_ab(a_boxs,gt_box,eps=1e-5):
'''
Args:
a_boxs (N, 4): predicted boxes.
gt_box (1, 4): ground truth boxe.
eps: a small number to avoid 0 as denominator.
Returns:
iou (N): IoU value.
'''
top_left = np.maximum(a_boxs[...,:2],gt_box[...,:2])
# 将小于0 的转为 0
bottom_right = np.minimum(a_boxs[...,2:],gt_box[...,2:])
hw = np.clip(bottom_right-top_left,a_min=0,a_max=None)
over_lap =

本文介绍了IOU在目标检测中的关键作用,详细阐述了使用Numpy和PyTorch实现IOU计算的过程,包括基本版本和优化版,旨在通过实践加深对IOU的理解。
最低0.47元/天 解锁文章
1871

被折叠的 条评论
为什么被折叠?



