Magnets01 2021-10-28 17:11 采纳率: 100%

# YOLOv5计算IOU时的一点疑问

def bbox_iou(box1, box2, x1y1x2y2=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-7):
# Returns the IoU of box1 to box2. box1 is 4, box2 is nx4
box2 = box2.T

# Get the coordinates of bounding boxes
if x1y1x2y2:  # x1, y1, x2, y2 = box1
b1_x1, b1_y1, b1_x2, b1_y2 = box1[0], box1[1], box1[2], box1[3]
b2_x1, b2_y1, b2_x2, b2_y2 = box2[0], box2[1], box2[2], box2[3]
else:  # transform from xywh to xyxy
b1_x1, b1_x2 = box1[0] - box1[2] / 2, box1[0] + box1[2] / 2
b1_y1, b1_y2 = box1[1] - box1[3] / 2, box1[1] + box1[3] / 2
b2_x1, b2_x2 = box2[0] - box2[2] / 2, box2[0] + box2[2] / 2
b2_y1, b2_y2 = box2[1] - box2[3] / 2, box2[1] + box2[3] / 2

# Intersection area
inter = (torch.min(b1_x2, b2_x2) - torch.max(b1_x1, b2_x1)).clamp(0) * \
(torch.min(b1_y2, b2_y2) - torch.max(b1_y1, b2_y1)).clamp(0)

# Union Area
w1, h1 = b1_x2 - b1_x1, b1_y2 - b1_y1 + eps
w2, h2 = b2_x2 - b2_x1, b2_y2 - b2_y1 + eps
union = w1 * h1 + w2 * h2 - inter + eps

iou = inter / union
if GIoU or DIoU or CIoU:
cw = torch.max(b1_x2, b2_x2) - torch.min(b1_x1, b2_x1)  # convex (smallest enclosing box) width
ch = torch.max(b1_y2, b2_y2) - torch.min(b1_y1, b2_y1)  # convex height
if CIoU or DIoU:  # Distance or Complete IoU https://arxiv.org/abs/1911.08287v1
c2 = cw ** 2 + ch ** 2 + eps  # convex diagonal squared
rho2 = ((b2_x1 + b2_x2 - b1_x1 - b1_x2) ** 2 +
(b2_y1 + b2_y2 - b1_y1 - b1_y2) ** 2) / 4  # center distance squared
if DIoU:
return iou - rho2 / c2  # DIoU
elif CIoU:  # https://github.com/Zzh-tju/DIoU-SSD-pytorch/blob/master/utils/box/box_utils.py#L47
v = (4 / math.pi ** 2) * torch.pow(torch.atan(w2 / h2) - torch.atan(w1 / h1), 2)
alpha = v / (v - iou + (1 + eps))
return iou - (rho2 / c2 + v * alpha)  # CIoU
else:  # GIoU https://arxiv.org/pdf/1902.09630.pdf
c_area = cw * ch + eps  # convex area
return iou - (c_area - union) / c_area  # GIoU
else:
return iou  # IoU

• 写回答

#### 1条回答默认 最新

• 对象被抛出 2021-10-28 17:15
关注

为了避免0值加上去的, 否则后续用做分母的话可能导致INF或者NAN值

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

• 系统已结题 9月2日
• 已采纳回答 8月25日
• 创建了问题 10月28日

#### 悬赏问题

• ¥15 华为ensp使用基本ACL限制公司网络访问
• ¥15 帮我做下照片上的PLC题
• ¥15 labview2022 使用modbus报缺少依赖？
• ¥15 谷歌地图是不是不开通结算功能，api会使用不了哦
• ¥15 unity腾讯云对象存储机型适配
• ¥15 求全国交通咨询模拟代码，要求如下，可以完全在dev c++运行
• ¥15 根据要求修改程序编码
• ¥15 用 Python 做一个用 Excel 表导入的答题系统
• ¥15 使用微信开发者工具实现一个“婚博会”小程序
• ¥15 ros的rviz仿真机器人