摘要:本文将为初学者带详细分析如何进行YOLOv1 Testing的内容。
YOLOv1 Testing
进入testing阶段,我们已经得到98个bounding box和confidence还有Class probability map,接下来我们需要一些筛选bounding box的算法,我们开始引入NMS(Non-max suppression)非极大值抑制。
NMS非极大值抑制概述
非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的NMS算法(参考论文《Efficient Non-Maximum Suppression》对1维和2维数据的NMS实现),而是用于目标检测中提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。
NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D重建、目标识别以及纹理分析等。
YOLOv1中Testing过程
上篇博客中,我们已经介绍了LOSS函数,并且给出了置信度计算公式以及Class概率公式(图中粉框圈出),并且为已知数值。如下方途中公式二者相乘并化简,即可得到图中等式右方结果。
1. 二者相乘得出20×1个score,对于98个bounding box都进行此运算,得到98×20个score。
2. 获取第一组class of scores,假设为dog的scores,如图中框1标出的。
3. 通过一个thresh的筛选,将score<0.2(概率太低)的值置为0。如框2标出的。
4. 将修改后的scores进行降序排列。如框3标注的。
5. 使用NMS将重叠的框去除。如框4标注的。
NMS在YOLOv1中实现过程
如下图,我们假设按降序排列好的scores中,bounding box 47的score最大为0.8,第二高的为bounding box 20的score,为0.5。
1.取score最大的一个bounding box,将他保留。
2.找到他下面一个非零框,即score为0.5的bounding box。
3.计算他们两个的IOU交并比,如果大于0.5,说明他们两个重合度非常高,将score较小的bounding box的值置为0.
4.再按顺序取下一个score,与score为0.8的bounding box计算交并比。如果交并比小于0.5就保留这个值。
5.当score=0.8的bounding box与其他bounding box都计算完毕后,取这些scores中比0.8小的最大的score,在进行上述操作,直到满足结束条件。
6.将第二到第二十个class也进行上述操作。
7.根据每个bounding box的score进行比较大小。取出这个bounding box中最大的数值。
8.如果有大于0的最大score,那么就画出这个score对应的框,并且把他当作这个class。直到遍历完所有的bounding box。