关于yolov5融合wbf算法的一些事情

最近发现很多私信我的小伙伴会纠结于一件事情:将yolov5网络中的nms算法用wbf算法替换掉,以此来提升网络准确率。

那关于wbf算法是什么呢?

weighted boxes fusion(边界框融合算法)

既然已经到了要考虑替换nms的地步了,那我这里就默认大家已经熟悉了nms的流程,所以我就不多费口舌了,直接切入正题。(不知道nms如何工作的同学可以去c站搜nms,结果一箩筐)

wbf算法对于冗余预测框的处理,是将高于设定阈值的框全部利用起来。利用冗余检测框的坐标、类别、置信度,求平均数,得到处理之后的预测框。关于这一节的详细公式解释大家可以去看这位博主的解释,非常的容易懂。wbf算法详解

看完那位博主对于wbf的解释之后,大家肯定明白了wbf是如何融合多余的检测框的了,那么接下来就看看它与nms直接处理预测框的可视化图。

来看一下wbf算法官方给出的例子,大家一看就能明白wbf的效果如何。

官方给定了一个生成了多个预测框的图,分别使用了wbf和nms算法去处理冗余框,效果如下:

这一张是给定的生成的预测框的图,在这张图片上去展示wbf和nms两种算法的效果。

nms效果图

 wbf算法效果图

便于大家去看,我用黑线去圈出了两种算法之间处理结果的差异。

可以看到,wbf算法对于冗余的预测框的做法,非常的符合中国人的中庸之道,置信度高的框,也不会完全就信你的,置信度底的框,也不会完全就不信你的,我把你俩中和一下,两边都不得罪。而nms呢,只要你与我置信度最高的那个框的iou一旦超过阈值,就觉得你是个小舔狗,直接就扔了,非常的暴力、没人性(人工智能也是要讲人性的嘛)。所以在这两张效果图上可以看出,wbf算法比起nms算法更加的贴合人工智能的核心,也就是像人,这也是他的优点。

wbf缺点

既然wbf要比nms效果更好,为什么用它的人却不多呢?

首先是推理速度,wbf处理预测框的速度是nms速度的三倍以上(我假设你明白了wbf是如何工作的,所以我也就不多解释为啥了);

其次是工作量,对于我这种小白来说,如果想要求得比nms更好的后处理算法,我会选择nms的一系列变种,比如diou-nms和ciou-nms,代码易实现,推理速度也不会太让人急挠的,wbf我就不知道该怎么去实现了,费劲巴拉的,效果还没那么好;

最后,wbf是在nms处理之后的模型上研究出来的。

如何正确使用wbf

优点和缺点都已经介绍完了,那么我们该如何使用这个算法。在kaggle竞赛中,很多参赛者会使用wbf算法去处理多个模型的输出结果,使得处理之后的结果集百家之所长,达到从众多竞争对手中脱颖而出的效果。所以个人认为,如果你是在参加竞赛,要求准确率而对实时性要求不高,你可以将多个模型的推理结果送入wbf中去处理,这会取得不错的效果。但是如果你要用于模型创新中,wbf的结果可能会让你失望,我会推荐你选择nms的一系列变种,而不是使用wbf算法。

最后,有需要改yolo网络的同学们,请私聊我。

猜你喜欢

转载自blog.csdn.net/zqt321/article/details/122278972