原因:

mask是在bbox内部提取,mask边缘像素被bbox边占用,导致2个像素左右黑边。

解决:在/segment/predict.py中的以下位置masks = ops.process_mask_native 或者ops.process_mask进入,找到以下图片中crop_mask函数中的红色框位置:

因为mask是在bbox内部提取,如果把bbox去掉则会导致背景误识别。

return masks * ((r >= x1-2) * (r < x2+2) * (c >= y1) * (c < y2))

elif self.args.retina_masks:
            pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)
            masks = ops.process_mask_native(proto, pred[:, 6:], pred[:, :4], orig_img.shape[:2])  # HWC
        else:
            masks = ops.process_mask(proto, pred[:, 6:], pred[:, :4], img.shape[2:], upsample=True)  # HWC
            pred[:, :4] = ops.scale_boxes(img.shape[2:], pred[:, :4], orig_img.shape)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐