You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
28 lines
793 B
28 lines
793 B
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
|
|
"""
|
|
Model validation metrics
|
|
"""
|
|
import numpy as np
|
|
|
|
|
|
def bbox_ioa(box1, box2, eps=1e-7):
|
|
"""Returns the intersection over box2 area given box1, box2. Boxes are x1y1x2y2
|
|
box1: np.array of shape(4)
|
|
box2: np.array of shape(nx4)
|
|
returns: np.array of shape(n)
|
|
"""
|
|
|
|
# Get the coordinates of bounding boxes
|
|
b1_x1, b1_y1, b1_x2, b1_y2 = box1
|
|
b2_x1, b2_y1, b2_x2, b2_y2 = box2.T
|
|
|
|
# Intersection area
|
|
inter_area = (np.minimum(b1_x2, b2_x2) - np.maximum(b1_x1, b2_x1)).clip(0) * \
|
|
(np.minimum(b1_y2, b2_y2) - np.maximum(b1_y1, b2_y1)).clip(0)
|
|
|
|
# box2 area
|
|
box2_area = (b2_x2 - b2_x1) * (b2_y2 - b2_y1) + eps
|
|
|
|
# Intersection over box2 area
|
|
return inter_area / box2_area
|