本人在github上的YOLOv3(pytorch版本)的后处理过程中,使用DIOU NMS代替常规的NMS过程(即IOU的计算替换为DIOU),实际差别如下(数据集仅有一个类别,内河航道船舶):
NMS:
Average Precisions:
+ Class '0' (boat) - AP: 0.9324305962764635
mAP: 0.9324305962764635
DIOU NMS:
Average Precisions:
+ Class '0' (boat) - AP: 0.9284645071187682
mAP: 0.9284645071187682
实际来看DIOU NMS效果不如常规NMS。因此在实际使用过程中,需要具体问题具体分析。
ps:感觉DIOU NMS的实现应该就是把IOU换为DIOU吧…不太确定,上面的结果是按照这种思路来的。
IOU和DIOU代码:
def bbox_iou(box1, box2, x1y1x2y2=True, diou=False):
"""
Returns the IoU of two bounding boxes
"""
if not x1y1x2y2:
# Transform from center and width to exact coordinates
b1_x1, b1_x2 = box1[:, 0] - box1[:, 2] / 2, box1[:, 0] + box1[:, 2] / 2
b1_y1, b1_y2 = box1[