IOUは、交差点オーバー連合(交差点オーバー連合)が目標検出に使用される概念であるであることを、生成された候補フレームの重複率(候補者が拘束さ)と、元のラベルのフレーム(グランドトゥルースがバインド)で、その交差点と和集合。比率。理想的な状況は完全なオーバーラップです。つまり、比率は1です。マルチターゲットトラッキングでは、トラッキングフレームとターゲット検出フレームの類似性を判断するために使用されます。
IoUは、2つの領域の共通部分を2つの領域の合計で割った結果です。
from __future__ import print_function
from numba import jit
import numpy as np
# 计算IOU
@jit
def iou(bb_test, bb_gt):
"""
计算预测框和目标框的交并比
:param bb_test:表示预测框的左上角和右下角的坐标 [x1, y1, x2, y2]
:param bb_gt: 表示目标框的左上角和右下角的坐标 [x1, y1, x2, y2]
:return:
"""
# 交集区域左上角坐标的最大值
xx1 = np.maximum(bb_test[0], bb_gt[0])
yy1 = np.maximum(bb_test[1], bb_gt[1])
# 交集区域右下角坐标的最大值
xx2 = np.maximum(bb_test[2], bb_gt[2])
yy2 = np.maximum(bb_test[3], bb_gt[3])
# 交集区域的宽
w = np.maximum(0, xx2 - xx1)
# 交集区域的高
h = np.maximum(0, yy2 - yy1)
# 交集区域的面积
hw = h * w
# 并集的面积
s = (bb_test[2] - bb_test[0]) * (bb_test[3] - bb_test[1]) + (bb_gt[2] - bb_gt[0]) * (bb_gt[3] - bb_gt[1]) - hw
return hw/s
if __name__ == '__main__':
print(iou([133, 59, 310, 213], [182, 94, 327, 248]))
print(iou([182, 94, 327, 248], [133, 59, 310, 213]))