文章目录[隐藏]
背景
在目标检测中,不论是一阶段还是二阶段检测器,似乎都绕不开一个东西就是anchor。所谓anchor就是预设一组或几组不同尺度不同长宽比的固定参考框,每个参考框负责检测与其交并比大于阈值(预设值0.5或0.7)的目标。在anchor之前,一般是采用金字塔多尺度+遍历滑窗的机制,耗费时间效果也差强人意。如2016ECCV提出的yolo,或者说是yolov1就采用的是这种全局回归的方法, 难以解决目标的类别不确定、数量不确定、位置不确定、尺度不确定等问题。在yolov2中采用了anchor机制,网络的召回率得到了很好的提升,后续的yolo系列都延续了这一做法。
什么是先验anchor?
YOLO2已经开始采用K-means聚类得到先验框的尺寸,YOLO3延续了这种方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:
(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
在最小的13 * 13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。
中等的26 * 26特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。
较大的52 * 52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。
下图为先验框的直观展示,下图中蓝色框为聚类得到的先验框。黄色框式ground truth,红框是对象中心点所在的网格。实际中特征图中的每个点都会对应3个先验框。
先验anchor如何起作用?
先验框anchor将目标检测转换为这个固定参考框中有没有认识的目标,目标框偏离参考框多远的问题。我们先要给出这些先验框的类别信息,才能让模型学着去预测每个先验框是否对应着一个目标物体。这些先验框中有很多是和图片中我们要检测的目标完全没有交集或者有很小的交集,做法是,设定一个IoU阈值,例如iou=0.5,与图片中目标的iou<0.5的先验框,这些框我们将其划分为背景,Iou>=0.5的被归到目标先验框,通过这样划分,得到供模型学习的ground truth信息,如
我们根据anchor与ground truth在图像中的位置来分析这些标注的类别。首先,在所有的“anchor—ground truth”的配对中,anchor 4与猫的 ground truth的交并比最大,因此anchor 4的类别标注为猫。不考虑anchor 4或猫的 ground truth,在剩余的“anchor—ground truth”的配对中,最大交并比的配对为 anchor 1和狗的ground truth,因此 anchor 1的类别标注为狗。接下来遍历未标注的剩余3个anchor:与 anchor 0交并比最大的 ground truth的类别为狗,但交并比小于阈值(默认为0.5),因此类别标注为背景;与anchor 2交并比最大的 ground truth的类别为猫,且交并比大于阈值,因此类别标注为猫;与 anchor 3交并比最大的 ground truth的类别为猫,但交并比小于阈值,因此类别标注为背景。
我们不是直接预测目标框,而是回归对于anchor要进行多大程度的调整,才能更准确的预测出边界框的位置。那么我们的目标就是需要找一种方法来量化计算这个偏差。
同一张图片的先验框是不变的。
对于一只狗的目标边界框和先验框的示例如下图所示:
我们的模型要预测anchor与目标框的偏移,并且这个偏移会进行某种形式的归一化,这个过程我们称为边界框的编码。
这里我们使用的是与SSD完全一致的编码方法,具体公示表达如下:
模型预测并输出的是这个编码后的偏移量(gcx,gcy,gw,gh),最终只要再依照公式反向进行解码,就可以得到预测的目标框的信息。
在测试时可能会一个目标多个框的现象,这时采用NMS非极大值抑制。
版权声明:本文为CSDN博主「Sweet Creature」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42762234/article/details/122116018
暂无评论