目标检测-yolo2 锚框(先验框)predefined anchors(anchors box) 作者:马育民 • 2020-10-13 10:27 • 阅读:10790 # 介绍 ### YOLOv1 输入图片最终被划分为 `7x7` 网格,每个单元格预测2个边界框。YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比(scales and ratios)的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。 ### YOLOv2 借鉴了Faster R-CNN中RPN网络的先验框(anchor boxes,prior boxes,SSD也采用了先验框)策略 当经过 darknet19,输出是 `13x13` 的特征图,每个点,都有以该点为中心的5个anchor box,相当于备选框,如下图: [![](https://www.malaoshi.top/upload/pic/deeplearning/QQ20201013143302.png)](https://www.malaoshi.top/upload/pic/deeplearning/QQ20201013143302.png) ### 预测 [![](https://www.malaoshi.top/upload/pic/deeplearning/QQ20201013152029.png)](https://www.malaoshi.top/upload/pic/deeplearning/QQ20201013152029.png) 预测的是 **目标** 与 anchor boxes 的偏差 ### 输入图片大小 在检测模型中,YOLOv2不是采用 `448x448` 图片作为输入,而是采用 `416x416` 大小。因为YOLOv2模型下采样的总步长为 `32` ,对于 `416x416` 大小的图片,最终得到的特征图大小为 `13x13` ,**维度是奇数**,这样特征图恰好只有 **一个中心位置**。 对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点去预测这些物体的边界框相对容易些。 所以在YOLOv2设计中要保证最终的特征图有奇数个位置。 YOLOv2使用了anchor boxes之后,每个位置的各个anchor box都单独预测一套分类概率值 # anchor boxes 宽高 anchor boxes的宽高往往是手动设置的,在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的边框(bounding boxes)。 但是,如果一开始就选取 更合适的 anchor boxes宽高,那么模型就更容易学,更好的预测位置。 ### K-means 聚类方法 anchor boxes 的 宽高 也是通过 K-means 聚类方法得出,是与数据集相关 - COCO: `(0.57273, 0.677385), (1.87446, 2.06253), (3.33843, 5.47434), (7.88282, 3.52778), (9.77052, 9.16828)` - VOC: `(1.3221, 1.73145), (3.19275, 4.00944), (5.05587, 8.09892), (9.47112, 4.84053), (11.2364, 10.0071)` 数据来源: https://github.com/pjreddie/darknet/tree/master/cfg # anchor boxes 数量 作者使用了K-means聚类方法,对 **训练集** 中的边界框做了聚类分析,可以自动找到更好的boxes的 数量 和 宽高。 [![](https://www.malaoshi.top/upload/0/0/1EF5EvEqVG8X.png)](https://www.malaoshi.top/upload/0/0/1EF5EvEqVG8X.png) 从上图可知,平衡复杂度和IOU之后,最终得到k值为5,作者选择了5种大小的box维度来进行定位预测。 原文出处:http://malaoshi.top/show_1EF6Qtvrumck.html