传统一对多分配机制无法避免的nms
最近发布的yolov10在推理过程中消除了非极大值抑制机制对部署推理延迟的不利影响,我们来看看他是怎么做的吧。
首先说一说非极大值抑制NMS,我们先来看一张图
图中有黄绿蓝三个框,但是只有一只检测主体猫,也就是一个GT(ground truth),这就是一对多的标签分配方式,一个物体对应了多个预测框。很显然我们需要去除其中的两个重叠框。
假设三个框对应的置信度分别为:黄色0.7,蓝色0.8,绿色0.9
nms第一步:根据置信度排序,设置置信度阈值为0.75,则将低于阈值的黄色框删除,剩下两个框
完成第一步后,已经将低置信度的框去除了,剩下的继续进行iou重叠筛选
第二步,设置候选框, 算法将剩余所有框中置信度最大的作为候选框(注意,一张图中剩余的框也可能包含不同类的框,本文仅以单个物体为例),图中候选框为绿色
第三步,设置一个iou阈值,然后计算候选框与其他框的iou,得到其他框相对于候选框的iou值,若某个框iou值大于设定的阈值,则大概率这个框跟候选框描述的是同一个物体,我们移除所有大于阈值的框,图中需要移除的是蓝色
第四步,对于多个目标的结果,第三步去除重叠框之后,还剩下其他目标框,我们继续重复选择候选框,去除重叠框的步骤,直到处理完所有候选框(没有其他目标框了),算法结束
以上就是nms的过程,去除低置信度的框--去除重叠框,这个算法最大的问题就是去除重叠框时,容易对真实重叠的物体造成误判。一般这个过程由cpu完成,所以造成推理延迟。
YOLOV10的双分配机制
说完了nms,我们来看看yolov10如何避开这个机制吧。
yolov10引入了一种双分配策略。
我们上面提到之前的yolo采用的一对多的分配策略,一个真实标签对应多个预测框,这种方式训练效果好但是无法避免nms机制
实际上还有一种分配策略,一对一分配,一个真实标签对应一个预测框,但是这种分配方式监督信号弱,容易导致收敛慢并且效果差
双分配策略就是在训练的时候构建两个预测头,同时使用两种分配策略进行训练,使用一致匹配度量来降低两个预测头的监督信号差距,使得一对一分配预测头也获得充足的监督信号
在推理的时候仅使用一对一分配预测头来进行推理,这样来避免nms机制,同时效果又比较好