Open Wanghe1997 opened 2 years ago
作者,是不是将这段代码替换掉YOLOv5 general.py中同名的non_max_suppression函数就相当于使用了Cluster-NMS了呢?我使用的YOLOv5代码是5.0版本,默认的边框损失已经使用CIoU。这是第一个问题。
第二个问题是:
图中画圈的这个参数对应YOLOv5代码中的哪个参数呢?
第三个问题是:
我在YOLOv5 Evaluation过程(也就是运行test.py)中的策略是batchsize为16,不使用TTA。在这种策略下,使用您的Cluster-NMS替代原YOLOv5的NMS会提高mAP等参数吗?按您的经验,超参数应该如何设置效果最好?谢谢
这个代码是Batch mode Weighted Cluster-NMS,batch mode的意思便是在一个batch中统一执行NMS,否则需要循环处理每一张图片。鉴于torchvision NMS非常快,以及Batch mode Weighted Cluster-NMS需要一些预处理操作,因此在TTA开启时Batch mode Weighted Cluster-NMS的速度才可超过torchvision NMS。如果你不想用batch mode Cluster-NMS,可以使用https://github.com/Zzh-tju/ultralytics-YOLOv3-Cluster-NMS 不管你使用哪个,都要注意变量名可能会与最新YOLOv5有所出入,毕竟它一直在不断更新,所以简单替换未必能跑通。
weighted threshold指的是weights = (B*(B>0.8)
中的0.8这个阈值,它表示只挑选与被保留框IoU>0.8的相邻框进行坐标加权。
据YOLOv5作者说,YOLOv5的检测框已经预测得足够准了,因此NMS的坐标加权,DIoU-NMS之类可能提升有限。因此他出于速度的考虑,维持torchvision NMS (精度等同于Original NMS) 的使用。因此我的建议是,Cluster-NMS及其变体系列有可能可以获得精度提升,需要尝试几组参数,如weighted threshold,DIoU-NMS的中心点距离惩罚幅度,如果使用batch mode Cluster-NMS还可考虑max-box的参数,以求得速度-精度的权衡。当然,在开启TTA时,batch mode Cluster-NMS是最快的。值得一提的是,如果你重视召回率,那么DIoU-NMS必能提高recall。
您好,关于源代码实现计算ciou的小疑问,bboxes1 = torch.sigmoid(bboxes1),bboxes2 = torch.sigmoid(bboxes2),计算后面高宽的时候w1 = torch.exp(bboxes1[:, 2]),不是很明白为什么这里选择先对box激活。参考其他的一些iou实现源码都没有激活这个操作,反而是直接对box计算
作者您好,您的这篇论文中CIoU和Cluster-NMS的组合可以用在YOLOv5中吗?我在YOLOv5中该如何将torchvision原始的NMS替换为Cluster-NMS呢?谢谢