介绍
YOLOv1
输入图片最终被划分为 7x7
网格,每个单元格预测2个边界框。YOLOv1最后采用的是全连接层直接对边界框进行预测,其中边界框的宽与高是相对整张图片大小的,而由于各个图片中存在不同尺度和长宽比(scales and ratios)的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的,这也导致YOLOv1在精确定位方面表现较差。
YOLOv2
借鉴了Faster R-CNN中RPN网络的先验框(anchor boxes,prior boxes,SSD也采用了先验框)策略
当经过 darknet19,输出是 13x13
的特征图,每个点,都有以该点为中心的5个anchor box,相当于备选框,如下图:
预测
预测的是 目标 与 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的 数量 和 宽高。
从上图可知,平衡复杂度和IOU之后,最终得到k值为5,作者选择了5种大小的box维度来进行定位预测。