YOLO(You Only Look Once)系列算法原理
前言 :详细介绍了yolo系列目标检测算法的原理和发展过程。
系列:
【YOLO系列】YOLO.v1算法原理详解
【YOLO系列】YOLO.v2算法原理详解
【YOLO系列】YOLO.v3算法原理详解
【YOLO系列】YOLO.v4 & YOLO.v5算法原理详解
2. YOLO.v2
2.1 基本概述
论文参考:YOLO9000: Better, Faster, Stronger
yolo v1虽然简单便捷,但检测效果较差,相较于FRCNN和SSD,其性能有所不及。
而 yolo v2 作为 v1 的接续,在原有基础上,做出了很多改进,从而实现了更好、更快、更强悍的目标检测性能,开始迎头赶上FRCNN,SSD网络。
2.2 算法改进
2.2.0 网络架构
yolo v2整体网络架构如下所示
2.2.1 Batch Normalization
v1
- 使用了 dropout 技巧,防止过拟合
v2
- 删去 dropout,增加 Batch Normalization
- BN 操作增加在卷积之后,激活层之前。该操作大大增加收敛速度,防止过拟合、梯度消失。
Batch-Normalization
- 对批样本的输出特征量分别进行归一化处理,分别使得每个特征数据均值为0,方差为1。该步骤不需要引入任何额外参数。
- 对上一步输出做线性变换,即 Z ′ = α Z + β Z' = \alpha Z+\beta Z′=αZ+β。这里的 α , β \alpha ,\beta α,β 是可训练的参数。该步骤是尝试恢复原本信息。
说明
- BN操作现在已经成了目标检测网络的标配。
- 该方法使得mAP提升了2%。
2.2.2 High Resolution Classifier
v1
- 采用 224 × 224 224\times 224 224×224 图像训练网络,采用 448 × 448 448\times 448 448×448 图像进行检测
v2
- 采用 224 × 224 224\times 224 224×224 图像进行预训练,再使用 448 × 448 448\times 448 448×448 图像进行微调训练(10 epochs),最后使用 448 × 448 448\times 448 448×448 检测
说明
-
这里即是训练时候的一些细节。
可能考虑当时计算机算力低、图像标注样本太少等因素,存在了训练与测试图片分辨率不同的情况。这里不做深入讨论。
-
该方法使得 mAP 提升了4%。
2.2.3 Convolutional With Anchor Boxes
v1
- 一个方格 grid,有两个预测框 bounding box
框的总数量: 7 × 7 × 2 = 98 7\times 7\times 2 = 98 7×7×2=98 个
- 每个grid的两个框,只负责预测同一个物体
yolov1输出向量: S × S × ( C + B × 5 ) S\times S\times (C+B\times 5) S×S×(C+B×5)
- 最终是使用全连接层直接预测出框的坐标信息 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)
v2
-
每个 grid 预先设定一组不同大小和宽高比的先验框
gird num: 13 × 13 13\times 13 13×13
anchor num: 9 9 9
框总数量: 13 × 13 × 9 = 1521 13\times 13\times 9 = 1521 13×13×9=1521 -
每个 grid 中的九个框,各自独立,可预测不同物体
yolov2输出向量: S × S × B × ( C + 5 ) S\times S\times B\times (C+5) S×S×B×(C+5)
-
删去全连接层,删去一个池化层,增加了下采样操作(下述)
-
预测框输出 为 先验框的微调偏移量
更快收敛,更好训练
说明
- 该方法使得 mAP 降低 0.2%,召回率 recall 提升 7%。
2.2.4 Dimension Cluster
关于聚类算法原理参见: 机器学习之聚类
v1
- None
- Faster R-CNN 中,RPN 网络是手动规定 anchor 尺寸和大小
v2
- 使用聚类算法获得先验框的尺寸大小
说明
-
可以得到更符合样本特点的先验框尺寸,减少网络微调的复杂度
-
该方法使得 mAP 提升了4.8%。
2.2.5 Direct Location Prediction
v1
-
None
-
Faster R-CNN 中,RPN 从偏移量得到预测框坐标计算方式如下
该种计算方法下,训练值(即偏移量 t x , t y t_x, t_y tx,ty ) 无限制范围,因此预测框中心坐标可以为任意位置。这样会导致预测框训练过程中非常不稳定,从而导致模型不稳定。
v2
-
预测(x,y,w,h):调整新的计算方法,限制预测框范围
1.方格 grid cell 大小被归一化为1*1
2. σ ( x ) \sigma(x) σ(x)函数范围在 [ 0 , 1 ] [0,1] [0,1]
3. e x e^x ex 函数范围在 [ 1 , + ∞ ] [1,+\infty] [1,+∞]
-
预测 c
说明
- 该方法使得 mAP 提升了 5%。
σ ( t 0 ) = P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) \sigma(t_0) = Pr(object)*IOU(b, object) σ(t0)=Pr(object)∗IOU(b,object)
2.2.6 Fine-Grained Feature
网络使用了下采样,输入从416*416变成了13*13,下采样了32倍。
对于小目标来说,如此下采样可能导致其特征完全丧失。
因此需要一些手段来保留小目标特征。
v1
- None
- Faster R-CNN 和 SSD 使用不同 feature maps 的 Proposal Networks 解决多尺度目标识别问题
v2
- 使用 passthrough 层方法
引申 yolov5 Focus 结构
说明
- 该方法使得 mAP 提升了 1%。
2.2.7 Multi-Scale Training
v1
- 输入尺寸被限制在 448*448*3
v2
- 输入尺寸没有严格限制,但因使用下采样,且下采样倍数为 32,因此通常输入尺寸为 32 的倍数。
- 通过改变输入图像尺寸,使用多尺度图像进行训练
说明
- 该方法使得 mAP 提升了 1.4%。
2.3 细节实现
2.3.1 卷积网络结构(DarkNet-19)
从2.2.0 节知道,论文所用卷积神经网络结构,即Backbone 是基于 DarkNet。
完整 DarkNet 网络如下所示
yolo v2 使用了图中蓝色框选位置的结构,对应与 2.2.0 节蓝色框选位置。
2.3.2 损失函数
标签示意如下:
- 每个 grid 共有 B 个 anchor box
- 每个anchor box 都有如上图所示的
(
5
+
C
)
(5+C)
(5+C) 个值
yolo v1中是每个 grid 有 ( B × 5 + c ) (B\times 5+c) (B×5+c) 个值
yolo v2中损失函数共包含三项,即
- 坐标预测损失
- 置信度预测损失
- 类别预测损失。
2.4 总结
yolo v2 相较于 yolo v1 使用的相关技巧及其提升如下: