API details.

bbox_iou[source]

bbox_iou(boxA, boxB)

from detection_nbdev.utils import random_bbox, visualize
import numpy as np

bboxA = random_bbox()
bboxB = random_bbox()
iou = bbox_iou(bboxA, bboxB)

print('label:', bboxA)
print('bbox:', bboxB)
print('IoU:', iou)

visualize(
    np.zeros((224,224,3)),
    [bboxA, bboxB],
    [0, 1],
    {0:'bboxA', 1:'bboxB'},
)
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
label: tensor([ 38,  11, 213, 215])
bbox: tensor([ 40, 111, 176, 193])
IoU: tensor(0.3152)

hungarian_loss[source]

hungarian_loss(boxesA, boxesB, loss_func=bbox_iou, maximize=True)

bboxesA = [random_bbox() for _ in range(2)]
bboxesB = [random_bbox() for _ in range(3)]

loss_iou = hungarian_loss(bboxesA, bboxesB, bbox_iou, maximize=True)

print('Hungarian IoU Loss:', loss_iou)
visualize(
    np.zeros((224,224,3)),
    bboxesA + bboxesB,
    [0]*len(bboxesA) +  [1]*len(bboxesB),
    {0:'bboxA', 1:'bboxB'},
)
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
tensor(False)
Hungarian IoU Loss: tensor(0.1669)