赞
踩
R-CNN由Ross Girshick于2014年提出,R-CNN首先通过选择性搜索算法Selective Search从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到CNN模型(经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将提取出的特征送入到SVM分类器来预测该对象框中的图像是否存在待检测目标,并进一步预测该检测目标具体属于哪一类。
虽然R-CNN算法取得了很大进展,但缺点也很明显:重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。
为了减少大量重叠框带来的冗余计算,K.He等人提出了SPPNet。
SPPNet 提出了一种空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是对于一副图像分成若干尺度的图像块(比如一副图像分成1份,4份,8份等),然后对每一块提取的特征融合在一起,从而兼顾多个尺度的特征。SPP使得网络在全连接层之前能生成固定尺度的特征表示,而不管输入图片尺寸如何。当使用SPPNet网络用于目标检测时,整个图像只需计算一次即可生成相应特征图,不管候选框尺寸如何,经过SPP之后,都能生成固定尺寸的特征表示图,这避免了卷积特征图的重复计算。
相比于RCNN算法,SPPNet在Pascal-07数据集上不牺牲检测精度(VOC-07, MAP=59.2%)的情况下,推理速度提高了20多倍。
和RCNN一样,SPP也需要训练CNN提取特征,然后训练SVM分类这些特征,这需要巨大的存储空间,并且多阶段训练的流程也很繁杂。除此之外,SPPNet只对全连接层进行微调,而忽略了网络其它层的参数。
为了解决以上存在的一些不足,2015年R.Girshick等人提出Fast RCNN
Fast RCNN 网络是RCNN和SPPNet的改进版,该网络使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域RO1,之后再RO1上运用RO池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmaxi和线性回归层同时返回边界框。
Fast RCNN 在VOC-07数据集上将检测精度MAP从58.5%提高到70.0%,检测速度比RCNN提高了200倍。
Fast RCNN 仍然选用选择性搜索算法来寻找感兴趣的区域,这一过程通常较慢,与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒,但是在大型真实数据集上,这种速度仍然不够理想。那么问题来了:“我们可以使用CNN模型来直接生成候选框吗?",基于此,Faster RCNN的提出完美回答这一问题。
Faster RCNN 是第一个端到端,最接近于实时性能的深度学习检测算法,该网络的主要创新点就是提出了区域选择网络用于生成候选框,能极大提升检测框的生成速度。该网络首先输入图像到卷积网络中,生成该图像的特征映射。在特征映射上应用Region Poposal Network,返回object proposals和相应分数。应用Rol池化层,将所有proposals修正到同样尺寸。最后,将proposals传递到完全连接层,生成目标物体的边界框。
虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。
将输入的图像分为S*S的格子,对于每个格子为中心给出两个先验框,对于置信度高的格子(即位于物体中心的格子)通过回归任务将两个先验框调整至合适的大小,然后选择IOU指标较大的框作为预测结果。
注:关于 7×7×30的预测结果,是指将图像分为7*7的网格,同时在30中,1~5代表第一个先验框的(x,y,w,h)以及置信度c,6~10代表第二个先验框,11~30代表对应20个类别的预测概率。
总的来说,将网格数量定义为S*S,定义B个先验框,预测C个类别,那么输出结果即为S×S×(5×B+C)的矩阵向量
损失函数主要分为三部分:坐标预测损失、置信度预测损失、类别预测损失。
坐标损失:
坐标损失也分为两部分,坐标中心误差和位置宽高的误差,可以看到,对于中心点的损失直接用了均方误差,但是对于宽高为什么用了平方根呢?这里是这样的,我们先来看下图:
上图中,蓝色为bounding box,红色框为真实标注,如果W和h没有平方根的话,那么bounding box跟两个真实标注的位置loss是相同的。但是从面积看来B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不应该有相同的loss。
如果W和h加上平方根,那么B对A的位置loss约为3.06,B对C的位置loss约为1.17,B对A的位置loss的值更大,这更加符合我们的实际判断。所以,算法对位置损失中的宽高损失加上了平方根。而公式中的 为位置损失的权重系数,在pascal VOC训练中取5。
置信度损失:
置信度也分成了两部分,一部分是包含物体时置信度的损失,一个是不包含物体时置信度的值。
其中前一项表示有无人工标记的物体落入网格内,如果有,则为1,否则为0.第二项代表预测框bounding box和真实标记的box之间的IoU。值越大则box越接近真实位置。
confidence是针对预测框bounding box的,由于每个网格有两个bounding box,所以每个网格会有两个confidence与之相对应。
从损失函数上看,当网格i中的第j个预测框包含物体的时候,用上面的置信度损失,而不包含物体的时候,用下面的损失函数。对没有物体的预测框的置信度损失,赋予小的loss weight, 记为在pascal VOC训练中 取0.5。所有物体的预测框的置信度损失和类别的loss的loss weight正常取1。
类别损失:
类别损失这里也用了均方误差。其中 表示有无物体的中心点落到网格i中,如果网格中包含有物体object的中心的话,那么就负责预测该object的概率。
优点:
缺点:
YOLOv2采用Darknet-19 作为特征提取网络,Darknet-19 的整体结构如下:
Darknet-19
VGG-16 | YOLOv1 | Darknet-19 |
大多数检测网络框架都是以VGG-16作为基础特征提取器,它功能强大,准确率高,但是计算复杂度较大,所以速度会相对较慢。因此YOLOv2的网络结构将从这方面进行改进。 | 基于GoogLeNet的自定义网络(具体看上周报告),比VGG-16的速度快,但是精度稍不如VGG-16。 | 速度方面,处理一张图片仅需要55.8亿次运算,相比于VGG306.9亿次,速度快了近6倍。精度方面,在ImageNet上的测试精度为:top1准确率为72.9%,top5准确率为91.2%。 |
YOLO v2使用DarkNet19作为特征提取网络,该网络比YOLO v2所使用的VGG-16要更快。
1、在卷积或池化之后,激活函数之前,对每个数据输出进行标准化。
Batch Normalization 简称 BN ,意思是批量标准化。2015年由 Google 研究员在论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》中提出。
BN 对数据进行预处理(统一格式、均衡化、去噪等)能够大大提高训练速度,提升训练效果。基于此,YOLOv2 对每一层输入的数据都进行批量标准化,这样网络就不需要每层都去学数据的分布,收敛会变得更快。
2、引入 Anchor Box 机制:在YOLOv1中是直接对边界框的位置(x, y, w, h)进行预测,这会导致网络在前期训练时非常困难,很难收敛。YOLOv2引入了 Anchors box 机制,希望通过提前筛选得到的具有代表性先验框Anchors,使得网络在训练时更容易收敛。
3、Convolution With Anchor Boxes:YOLOv1 有一个致命的缺陷就是:一张图片被分成7×7的网格,一个网格只能预测一个类,当一个网格中同时出现多个类时,就无法检测出所有类。针对这个问题,YOLOv2做出了相应的改进:
4、使用聚类方法选择Anchors:YOLOv2 使用 K-means 聚类方法得到 Anchor Box 的大小,选择具有代表性的尺寸的Anchor Box进行一开始的初始化。
5、Fine-Grained Features:细粒度特征,可理解为不同层之间的特征融合。YOLOv2通过添加一个Passthrough Layer,把高分辨率的浅层特征连接到低分辨率的深层特征(把特征堆积在不同Channel中)而后进行融合和检测,以此来提高对小目标的检测能力。
6、【不足】YOLO v2算法只有一条检测分支,且该网络缺乏对多尺度上下文信息的捕获,所
以对于不同尺寸的目标检测效果依然较差,尤其是对于小目标检测问题。
YOLOv3 借助残差网络的思想,YOLOv3 将原来的 darknet-19 改进为darknet-53。其中darknet-53主要由1×1和3×3的卷积层组成,每个卷积层之后包含一个批量归一化层和一个Leaky ReLU,加入这两个部分的目的是为了防止过拟合。卷积层、批量归一化层以及Leaky ReLU共同组成Darknet-53中的基本卷积单元DBL。因为在Darknet-53中共包含53个这样的DBL,所以称其为Darknet-53。
与darknet-19对比可知,darknet-53主要做了如下改进:
YOLOV4组成结构 | CSPDarknet53(主干网络) | 将原来的Darknet53与CSPNet进行结合。 使用MIsh激活函数代替了原来的Leaky ReLU。 |
SPP附加模块(颈) | SPP来源于这篇论文:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition,在YOLOv4中,作者引入SPP,是因为它显著地增加了感受野,分离出了最重要的上下文特征,并且几乎不会降低的YOLOv4运行速度。 | |
PANet路径聚合(颈) | 使用PANet代替YOLOv3中的FPN作为参数聚合的方法,针对不同的检测器级别从不同的主干层进行参数聚合。并且对原PANet方法进行了修改, 使用张量连接(concat)代替了原来的捷径连接(shortcut connection)。 | |
YOLOv3(检测头) | 继承了YOLOv3的Head进行多尺度预测,提高了对不同size目标的检测性能。 |
YOLO v4在输入端,引入了Mosaic数据增强、cmBN、SAT自对抗训练
与其它先进的检测器相比,对于同样的精度,YOLOv4更快(FPS);对于同样的速度,YOLOv4更准(AP)。
YOLOv4能在普通的GPU上训练和使用,比如GTX 1080Ti和GTX 2080Ti等。
论文中总结了各种Tricks(包括各种BoF和BoS),给我们启示,选择合适的Tricks来提高自己的检测器性能。
YOLOv5官方代码中,一共给出了5个版本,分别是 YOLOv5n、YOLOv5s、YOLOv5m、YOLOv5l、YOLO5x 五个模型。
Yolov5s网络是Yolov5系列中深度最小,特征图的宽度最小的网络。后面的3种都是在此基础上不断加深,不断加宽。YOLOv5s 和YOLOv4一样,对输入的图像进行Mosaic数据增强。
骨干网路部分主要采用的是:Focus结构、CSP结构。其中 Focus 结构在YOLOv1-YOLOv4中没有引入,作者将 Focus 结构引入了YOLOv5,用于直接处理输入的图片。
在网络的颈部,采用的是:FPN+PAN结构,进行丰富的特征融合,这一部分和YOLOv4的结构相同。
对于网络的输出,遵循YOLO系列的一贯做法,采用的是耦合的Head。并且和YOLOv3、YOLOv4类似,采用了三个不同的输出Head,进行多尺度预测。
Yolov5的作者将获取数据集的最佳anchors这一步骤嵌入到整体代码中,每次训练时,自适应的计算不同训练集中的最佳锚框值。
YOLOv5为了避免将原图直接resize成统一大小,造成目标变形,采用了灰度填充的方式统一输入尺寸。
YOLOv5定位部分的损失函数使用了GIOU函数。
参考文献
YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。