[YOLO专题-5]:YOLO V2 - 网络结构、原理、改进的全新、全面、通俗、结构化讲解

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122203173


目录

前言:

第1章  YOLO V2应运而生

1.1 YOLO V1的不足

1.2 YOLO V2的出现

1.3 YOLO V2的优点

1.4 YOLO总体的网络结构

1.5 YOLO V2的总体网络架构:Darknet网络

第2章 YOLO V2网络的图片输入

2.1 输入图片的尺寸的改进

2.3 多尺度输入

2.4 图片的标签(用于Loss计算与反向网络训练)

2.5 输入图片的预处理

第3章 YOLO V2 前向特征提取网络: 卷积网络

3.1  Darknet特征提取骨干网

3.2 细粒度特征提取: Fine-Grained Features

3.3 Batch Nomalization(BN)

第4章 YOLO V2 前向输出网络:卷积层输出

4.1 YOLO V2的输出网络

4.2 YOLO V2对图片区域的切分

4.3 YOLO  V2对Bounding Box优化

4.4 先验框Anchor的引入

4.5 每个网格包含的结构化的信息

4.6 每个域的含义

4.7 所有网格,所有Bounding Box

第5章 前向输出(预测阶段)后处理:NMS非极大值抑制处理

第6章 YOLO V2 反向Loss计算与网络优化训练

6.1 Loss函数的设计(核心、核心、核心)

6.2 优化算法

第7章 YOLO V2的不足与改进

参考视频:



前言:

本文重点讲解YOLO V2对YOLO V1的改进,而不是介绍整个V2网络的所有算法细节。

解读本文时,请先参考YOLO V1版本的解读,V1是YOLO所有后续版本的基础:

https://blog.csdn.net/HiWangWenBing/article/details/122156426https://blog.csdn.net/HiWangWenBing/article/details/122156426

第1章  YOLO V2应运而生

1.1 YOLO V1的不足

(1)每张图片能够进行分类数量太少,只有20种物体分类。

(2)检测的目标的数量太少,一张图只能检测 7 * 7 = 49个目标。

YOLO V1只有 7 * 7 = 49个网格,每个网格只能检测一个目标,整张图,最大只能检测49个目标。

如下的情形,YOLU V1就傻眼了。

 (3)对重叠在一起的物体检测性不好

YOLO V1每个网格只能检测一个目标,当两个物体的中心点,落在同一个网格时,就会丢掉一个物体。

(4)YOLO对小目标的检测效果不好。

YOLO V1每个网格,只提供了2个先验框,当多种不同尺寸的物体,同时出现在同一个图片上时,YOLO对小目标的检测就不尽如人意。YOLO没有足够多的先验框去适配不同尺度的物体。

另一方面,多个小目标,很可能落在同一个网格内,而YOLO V1,一个网格只能检测一个目标,这就导致,大量的小目标就丢失掉了,无法检测。如下图所示,两只小麻雀落在同一个网格内,就只能当一个目标来检测了。

另外,YOLO V1对小目标和大目标的Loss值,是组合在一起进行计算的,然后,相同的数值偏差,对小图片和大图片影响是不一样的,这种方法,对于小图片检查的准确性造成了很大的影响,虽然已经采用了根号的方式,降低大目标与小目标数值上的差异,但并未消除。如果能够使用相对误差,或许对小图更加的公平。

YOLO V2要尝试解决上述问题。

1.2 YOLO V2的出现

(1) YOLO V2相对于YOLO V1版本,也不过就是一年的时间 

(2)YOLO V2在整个目标检测中的位置

  

1.3 YOLO V2的优点

这是YOLO V2的宣传页面,可以看出YOLO V2相对于YOLO V1带来如下效果或性能上的改进。

(1)更好Better:更好的功能带来更好的精度提升。

  

更好的功能,带来更好的mAP精度提升。

YOLO V1 mAP只有63.4, 经过YOLO V2各项改进后,YOLO V2的mAP高达78.6, 如下图所示:

(2)更快Faster: 计算量减少,每秒处理的帧更多

速度的提升,主要是靠更换骨干网络来实现的, 把V1的Resnet网络更换成了Darknet19.

Darknet19的计算量只有5.58 Bn,计算速度得到了极大的提升。 

  • 处理288 * 288图片(低分比率)时,FPS高达91
  • 处理416 * 416图片(中分辨率)时,FPS高达67
  • 处理544 * 544图片(高分辨率)时,FPS高达40

在相同精度的情况下,  相对于其他算法(包括YOLO V1), YOLO V2的速度是最快的。

在相同速度的情况下,  相对于其他算法(包括YOLO V1), YOLO V2的精度是最高的。

YOLO V2,无论在速度和精度上,都超过R-CNN系列算法。

YOLO V1,  只在速度上超过R-CNN系列算法, 而精度上不如R-CNN系列算法。

(3)更强Stronger: YOLO 9000分类

YOLO V2宣称能进行9000种分类,实际应用中,需要这么多种分类的场合也不多。

总之,相对于V1, V2的改进力度还是很大的。

1.4 YOLO总体的网络结构

(1) YOLO的核心算法体现在:

  • 结构化的输出定义
  • 损失函数的设计

(2)与目标检测配套的地方体现在:

  • 输入图片的标签:定位目标的手工定位信息 + 目标的分类类型
  • 输出图片:原始图片 + 添加的额外信息(目标预测定位信息 + 目标类型 + 可能性大小)

1.5 YOLO V2的总体网络架构:Darknet网络

 与YOLO V1不同的是:

  • 特征提取网络结构不同:V1采用的ResNet骨干网,V2采用的是Darknet-19骨干网。
  • 目标定位网络结构不同:V1采用的全连接层FC,    V2采用卷积层。

Darknet骨干网是YOLO的作者为YOLO独创的骨干网。

关于Darket网络,请参考相关文章 ,Darket本身不是本文的重点。

第2章 YOLO V2网络的图片输入

2.1 输入图片的尺寸的改进

图片的大小:V1 = 448 * 448 * 3,   V2416 * 416 * 3

2.2 高分辨率分类(仅仅使用于分类,而不是目标检测)

 改进前:

  • 使用Image Net原始的224 * 224图片,来训练YOLO V1的特征提取网络(骨干网络)。

ImageNet数据集包含大量的分类标准的图片,用该数据集,能够很好地训练出为进一步的分类或目标定位的特征提取网络。

  • 然后使用448 *448的目标检测的图片,进一步fine tunning骨干网络和训练目标识别网络。

改进后:

  • 先把Image Net原始的224 * 224图片,resize到448 * 448大小上。
  • 然后用resize之后的448 * 448的图片集,训练YOLO V2的骨干网络。 
  • 最后使用448 *448的目标检测的图片,进一步fine tunning骨干网络和训练目标识别。
  • 这样的改动,提升了性能,mAP直接提升3.5%

2.3 多尺度输入

由于没有了全连接层,YOLO V2除了支持标准的416 * 416 * 3尺度外,还支持其他尺度的输入。

为了能够使得网络的适应性更好,YOLO V2还定期采用其他尺度的图片进行训练,包括小尺寸的320 * 320和大尺寸的608 *608.

2.4 图片的标签(用于Loss计算与反向网络训练)

相对于V1, V2没有改进

2.5 输入图片的预处理

无特别的地方,与其他网络一致。

第3章 YOLO V2 前向特征提取网络: 卷积网络

3.1  Darknet特征提取骨干网

V2使用Darknet-19替代V1的RsetNet骨干网,进一步提升了YOLO V2的检测速度,Darknet-19的FLOPs只有5.58Bn,特别适合硬件算力低的平台。

3.2 细粒度特征提取: Fine-Grained Features

感受野反应了特征图上的一个点,能够感受到原始图像上像素点区域的大小,

越是接近输入端,特征图上的一个点的感受野越小,局部信息越多,宏观信息越少。

越是远离输入端,特征图上的一个点的感受野越大,局部信息越少,宏观信息越多。

YOLO V1的定位与分类,是基于最后的特征输出的信息,因此YOLO对宏观信息把控比较好,对局部的微观信息容易忽略,导致YOLO V1对小目标识别不是太理想,经常检测不到小目标。

为了能够克服YOLO V1对小目标识别能力弱这个特点,YOLO V2在在Darknet网络的基础之上增加了一个细粒度特征提取的功能, 并通过pass through来实现的。如下图所示:

 目标定位和分类的输入:

  • 高层的粗粒度的语义特征(适合大目标)
  • 底层的细粒度的像素特征(适合小目标)

这样的网络设计,同时兼顾大目标和小目标的检测。

3.3 Batch Nomalization(BN)

(1)增加BN网络,构成新的卷积单元Convolutional

在YoLOv2中,作者在每个卷积层后面都加上了BN(Batch Nomalization)层,它处于神经元与激活函数之间。对训练收敛有非常大的帮助,同时也减少了所需使用的正则化处理,且可以移除dropout操作(解决过拟合)

增加了BN层后,卷积网络的基本单元变成如下形式:

(2)目的与解决的问题

  • 远离激活函数的饱和区,改善梯度,防止梯度消失、加快收敛

 Nomalization通过规范化处理的函数,使得原先离散、发散的数据,根据的规范化和集中化,向中心点处集中。

  • 与Dropout类似,防止过拟合,但不能与dropout同时使用。
  • 还能提升mAP 4%, 这是一个非常不错的改进

(3)Nomalization:规范化的基本概念

https://blog.csdn.net/HiWangWenBing/article/details/121215445

Nomalization的功能,使得上一级网络的输出,即下一级网络的输入的数据更加的规范化。如下图所示:

(4)Batch Nomalization:

Batch是在bach层面进行的Nomalization,而不是单张图片level进行Nomalization。

第4章 YOLO V2 前向输出网络:卷积层输出

4.1 YOLO V2的输出网络

YOLO V2的输出网络,由V1的全连接网络,直接更换成了V2的卷积网络。

4.2 YOLO V2对图片区域的切分

(1)网格的数量定义

YOLO V2把网格的数量从V1的7个,直接升格到V2的13个。

(2)网格的作用

与V1相同,每个网格负责检测:是否有物体(方框)的中心落在自己的网格内,如果有物体(方框)的中心点落在自己的网格范围内,这该网格负责检测该物体, 包括物体的尺寸 + 分类。

4.3 YOLO  V2对Bounding Box优化

(1)增加了Bounding Box的数量:增加到5个

YOLO V1中,每个网格有2个Bounding Box,到YOLO V2中,增加到了5个Bounding Box。

(2)增加了Bounding Box能力:独立进行物体分类

YOLO V1的两个Bounding Box是共享相同的分类器,也就是说,YOLO V1虽然有两个网格,两个网格时相互配合,分时复用相同的分类器,导致每个网格同时只能检测1个物体。

YOLO V2的5个Bounding Box拥有自己独立的分类器,即每个网格可以独立的检测物体,这就意味着YOLO V2的每个网格可以同时检测5个物体。

4.4 先验框Anchor的引入

(1)什么是先验框Anchor

先验框Anchor是为了更好的初始化和管理5个Bounding Box,先验框Anchor有如下几个作用:

  • 设定每个Bounding Box长度和宽度的初始值
  • 作为每个Bounding Box长度和宽度增长的基准,训练过程中,W,H值的变化是以Anchor框为基准偏移值,而Bounding Box长度和宽度并不是相对于0点的数值。
  • 训练的过程更容易收敛,训练的速度更快、更准。

备注:

  • Anchor是不包括Bounding Box的中心点的,因为物体在中心点的位置是任意的。
  • Anchor本身代表“先验框”,但它并不是用于预测的Bounding Box,而是Bounding Box的基准或初始值。

(2)Bounding Box与先验框Anchor的关系

网格的归一化:不管图片的实际size有多大,每个网格都会被归一化处理,每个网格的长度为1.

中心点:对Bounding Box的输出用sigmod函数进行了(0,1)区间限制,这就导致,无论如何调整W, B的参数,Bounding Box最终的中心点一定会与其对应的Anchor,被限定在同一个网格grid cell中。

长度与宽度:Bounding Box长度和宽度是相对于Anchor中心点的offset,而不是相对于起点0的offset,也不是相对于Grid Cell的offset。且经过指数放大,目的是使长度和宽度更加的敏感。

(3) 先验框的尺寸是如何设定的

 在Fast R-CNN中,先验框的尺寸是人为固定设计的:如1:1, 2:1, 4:1, 1:4, 1:2,人为设定的最大缺点是:实际物体的尺寸与人为设定的不一定一样。

然而,在YOLO V2以及后续的版本中,先验框的尺寸是根据数据集中的实际物体的标注框统计获得的,通过聚类算法自动学习获得的。如下图所示,通过Clusters聚类算法,分别获得了VOC和COCO数据集上5种不同的框的大小,其作为YOLO的Anchor Box,也作为5个Bounding Box的初始值或参考值。

(4)先验框的好处

4.5 每个网格包含的结构化的信息

YOLO V1:每个grid cell包含的定位信息是完整的,而每个Bounding Box包含的定位信息是不完整的,两个Boundding Box共享一个20分类输出信息,因此定位是基于grid cell的,一个grid cell只能定位一个目标。 

从YOLO V2开始:5个Bounding Cell,每个Bounding Box包含的信息是完整的定位信息,不尽包括定位框的坐标,长度,宽度,置信度,还包括20分类信息,因此每个grid cell可以同时进行5个目标的定位。

V1 V2
网格的总数 7 * 7 = 49个 13 * 13 = 169个
每个网格bounding Box数量 2个 5个
每个网格可定位的目标的数量 1个 5个
每张图可定位的目标的总数 49个 169 * 5 = 845个

4.6 每个域的含义

与YOLO V1含义相同

4.7 所有网格,所有Bounding Box

V1: 7 * 7 * 2 = 98个bounding Box

V2: 13 * 14 * 5 = 845个bounding Box,定位框的数量提升了9倍左右。

第5章 前向输出(预测阶段)后处理:NMS非极大值抑制处理

(1)V2与V1相同的地方

  • V2与V1对输出信息的流程相同
  • V2与V1的输出类别相同,都是20.

(1)V2与V1不相同的地方

  • 总的框的个数不同: 49 -> 845

第6章 YOLO V2 反向Loss计算与网络优化训练

6.1 Loss函数的设计(核心、核心、核心)

Loss函数的定义,直接反应了整个网络的输入与输出结构,

6.2 优化算法

YOLO并没有引入新的优化算法,梯度下降法等优化算法,也普遍适应于YOLO目标检测。

第7章 YOLO V2的不足与改进

(1)mAP有待进一步提升,以超过人眼


参考视频:

【精读AI论文】YOLO V2目标检测算法_哔哩哔哩_bilibili


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122203173

おすすめ

転載: blog.csdn.net/HiWangWenBing/article/details/122203173