文章目录
参考(写的非常清晰) https://zhuanlan.zhihu.com/p/61485202
本文主要以yolov3和SSD为主,分析One-stage目标检测算法。(文中说的yolo普遍指yolo-v2或yolo-v3)
1. One-stage目标检测算法流程
输入:VOC数据集的一张图片(20个类别),输入尺寸设置为416×416,(SSD是300×300)
输出:一个特征图,对于416×416的输入,最后的输出为13×13×125(降采样了32倍,416/32=13)
【Attention】一般来说,如果数据集有c类,而模型有k个检测器(k是特征图上每个位置anchor的数量),那么网格需要有k×(4+1+c)个输出通道。
最后得到的13×13特征图可以看成是13×13个单元格,每个单元格都有5个独立的物体检测器(anchor=5),每个检测器都预测一个边界框。
关键点:检测器的位置是固定的,它只能检测中心点落在该单元内的物体(这一限制是为了保证检测器不发生混乱,所以加以约束)。每个检测器产生25个值:
- 20个值表征类别概率(使用softmax可以获取该检测器中目标所属的类别,也可以使用sigmoid进行多标签分类)
- 1个值表示置信度(表明该检测器包含目标的可能性,介于0-1之间)
- 4个值表示边界框坐标(中心x,中心y,宽度w,高度h)
由于每个单元格都有5个检测器,因此共有5×25=125个输出通道。
该模型总是预测固定数量的边界框:13×13个单元乘以5个检测器给出845个预测结果。显然,绝大多数这些预测都不会有用,毕竟大多数图像最多只包含少量物体,可以通过置信度来忽略掉一些预测框,使用NMS可以去除重叠框。
为什么要对检测器实施约束?
为了让模型更容易学习,将每个检测器分配到图像中的固定位置去学习,每个检测器只负责学习附近的物体,而不会预测较远的问题,是onet-stage目标检测算法的技巧。(如果没有这样的约束,所有检测器都会在整张图中去预测,很容易出现混乱)
2. anchor是什么,有什么用?
上面的分析可知,网格的划分对检测框的位置进行了约束,那么,是否可以对检测框的形状也进行约束呢?答案是肯定的。这就是anchor的任务。