Мне удалось заставить его работать.Сначала я вычислил IOU между всеми ограничивающими прямоугольниками и пометил их> 0,9 как ребро на моем графике.Однако эта реализация получает ошибку RecursionError: maximum recursion depth exceeded in comparison
с большим количеством ограничивающих прямоугольников.
Я использовал реализацию из https://medium.com/100-days-of-algorithms/day-41-union-find-d0027148376d для моего кода
def find(data, i):
if i != data[i]:
data[i] = find(data, data[i])
return data[i]
def union(data, i, j):
pi, pj = find(data, i), find(data, j)
if pi != pj:
data[pi] = pj
connections = []
for i in range(len(boxes)):
for j in range(i + 1, len(boxes)):
iou = compute_iou(boxes[i], boxes[j])
if iou >= 0.9:
connections.append((i,j))
# data is a representation of the bounding to make it
# possible to create Union-Find sets
data = [bb for bb in range(len(boxes))]
for i, j in connections:
union(data, i, j)