def non_max_suppression(prediction, conf_thres=0.25, iou_thres=0.45, classes=None, agnostic=False, multi_label=False,
labels=(), max_det=300):

四.将所有的类别框当做一个类别进行nms

    c = x[:, 5:6] * (0 if agnostic else max_wh) # classes
    boxes, scores = x[:, :4] + c, x[:, 4] # boxes (offset by class), scores
    i = torchvision.ops.nms(boxes, scores, iou_thres) # NMS

agnostic参数 True表示多个类一起计算nms,False表示按照不同的类分别进行计算nms

按照每个类进行nms可能会出现一个目标多个类别框的情况
代码重点是在 '+c’这里的c就是偏移量
x[:, :4]表示box(从二维看第0,1,2,3列)
x[:, 4] 表示分数(从二维看第4列)
x[:, 5:6]表示类IDX(从二维看第5列)
max_wh这里是4096,这样偏移量仅取决于类IDX,并且足够大
 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐