计算机视觉-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怎么计算?
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}")