检测中计算IOU

    xiaoxiao2022-07-12  161

    在实际的检测任务中,经常有多个Ground Truth框,实际检测到的框Box需要和所有GT框Boxes计算IOU。

    另外在训练检测模型时,需要得到负样本,在选取负样本时,也要保证当前框和所有GT框计算IOU,在所有的IOU值中,找到最大的IOU,并且最大IOU值要小于设置的阈值,这样得到的样本才是符合要求的负样本。

    下面是计算一个框和多个GT框IOU值 的Python代码:

    def IoU(box, boxes): """Compute IoU between detect box and gt boxes Parameters: ---------- box: numpy array , shape (5, ): x1, y1, x2, y2, score input box boxes: numpy array, shape (n, 4): x1, y1, x2, y2 input ground truth boxes Returns: ------- ovr: numpy.array, shape (n, ) IoU """ box_area = (box[2] - box[0] + 1) * (box[3] - box[1] + 1) area = (boxes[:, 2] - boxes[:, 0] + 1) * (boxes[:, 3] - boxes[:, 1] + 1) xx1 = np.maximum(box[0], boxes[:, 0]) yy1 = np.maximum(box[1], boxes[:, 1]) xx2 = np.minimum(box[2], boxes[:, 2]) yy2 = np.minimum(box[3], boxes[:, 3]) # compute the width and height of the bounding box w = np.maximum(0, xx2 - xx1 + 1) h = np.maximum(0, yy2 - yy1 + 1) inter = w * h ovr = inter / (box_area + area - inter) return ovr

     

    最新回复(0)