大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用14-目标检测经典算法之YOLOv1-YOLOv5的模型架构与改进过程详解,便于记忆。YOLO(You Only Look Once)是一种目标检测深度学习模型。想象一下,传统的目标检测方法就像侦探一样,需要仔细观察整个场景,逐个研究每个细节来找出目标。但YOLO却跟超级英雄一样,只需要一眼扫过整个画面,就能立即捕捉到所有的目标。YOLO可以实现如此高效的目标检测,是因为它将目标检测问题转化为了一个回归问题。它通过一个神奇的神经网络,在一次前向传播中,直接从图像像素预测出目标的边界框和类别概率。这意味着,YOLO不仅快速,而且准确。它能够同时捕捉到不同大小、不同位置的目标,并且还能告诉你它们属于哪个类别。
无论是追踪移动的车辆,还是寻找行走的行人,YOLO都能在瞬间给你一个准确的答案。它的快速性和准确性使得YOLO成为许多计算机视觉应用中的首选方法,是目标检测领域的超级明星!
一、YOLO网络的详细介绍
1.设计思想:
传统的目标检测算法,如R-CNN系列,都采用了两步骤:首先生成候选区域,然后对这些区域进行分类。而YOLO则采取了"一次看完"的策略。它将目标检测任务看作一个回归问题,并直接在一个网络中完成边界框(bounding box)的预测和类别判断。
2.网络结构:
YOLO使用全卷积网络,并在最后引入全连接层进行预测。输入图像被分成SxS个网格,如果某个对象的中心落在网格内,则这个网格就负责预测这个对象。每个网格会预测B个边界框以及这些边界框含有对象的置信度,同时还会预测C个条件类别概率。
3.损失函数:
由于任务涉及到坐标回归和分类两部分,所以损失函数也由这两部分组成。坐标误差和置信度误差使用平方差损失计算;类别误差使用交叉熵损失计算。
4.优点:
速度快: 因为只需要运行一次前向传播即可得到结果。
泛化能力强:可以很好地处理新颜色、尺度、角度等变化。
5.缺点:
对小物体处理不佳、定位精度相对较低。
下面我将详细介绍从YOLOv1到YOLOv5的网络结构,并阐述每个版本相比前一版本所做的改进:
YOLOv1模型
YOLOv1是第一个引入端到端物体检测概念的模型,它在单个神经网络中实现了边界框预测和类别概率。
网络结构:使用了一个单一的卷积网络,最后接上2个全连接层和一个线性回归层。输入为448x448大小的图片,输出为7x7网格,每个网格预测2个边界框和20个类别概率。
模型改进方面
相比于以前需要多阶段处理过程才能完成目标检测任务的方法(例如R-CNN系列),YOLOv1显著地提高了速度,并且在处理图像中存在多目标、小目标以及模糊不清目标时表现出色。
YOLOv2模型
YOLOv2在保持高速度同时提高了准确性。它引入了Darknet-19作为基础架构,并添加"anchor boxes"来更好地处理不同形状和大小的对象。
网络结构:Darknet-19包含19层卷积层和5个maxpooling层。最后一层全连接被移除并用一个新卷积层替代,这样可以直接输出13x13网格结果。
模型改进方面
1.Batch Normalization算法实现:在卷积或池化之后,激活函数之前,对每个数据输出进行标准化。这样能够大大提高训练速度,提升训练效果。
2.引入"anchor boxes"解决了对不同形状与尺寸物体识别困难问题;
3.增加"multi-scale training"让模型能够适应各种分辨率;
4.新增"Darknet-19"架构使得模型更深,但计算效率仍然很高。
Darknet-19整体网络架构:
YOLOv3模型
YOLOv3通过使用三种不同尺度进行预测来改善对小物体的检测效果,并采用三种不同大小"anchor boxes"来更好地匹配真实对象大小。
网络结构:采用了Darknet-53,包含53层卷积层,增加了残差连接来改善训练过程。最后输出3个不同尺度(13x13, 26x26, 52x52)的预测。
模型改进方面
1.三种不同尺度的预测:
YOLOv3引入了三种不同尺度(13x13, 26x26, 52x52)的预测,每个尺度都会生成一组边界框。这是通过在网络中添加更多的特征图层并在不同层级上进行预测来实现的。这样做可以帮助模型更好地检测不同大小的物体。具体来说,小尺度(13x13)主要用于检测大物体,中等尺度(26x26)用于检测中等大小物体,大尺度(52x52)主要用于检测小物体。
2.使用三种不同大小"anchor boxes":
在每个预测尺度上,YOLOv3为每个网格单元使用了三个固定比例的"anchor boxes"。这些"anchor boxes"是根据训练集中所有真实边界框的宽高比例分布得出的。"Anchor boxes"可以帮助模型更好地匹配和预测真实对象大小。
3.Darknet-53网络结构:
YOLOv3采用了Darknet-53作为其骨干网络。Darknet-53包含53层卷积层,并且与ResNet-50相比,在相似性能下计算量减少近一半。它通过交替使用1×1卷积和3×3卷积提取特征,并利用连续块增加了网络深度以提取更复杂、抽象级别高的特征。
4.残差连接:
Darknet-53还引入了残差连接或者称之为shortcut connection或skip connection(类似ResNet)。这是一种典型技术,旨在解决深层神经网络训练过程中梯度消失和表示瓶颈问题。残差连接使得输入可以直接流向输出或者后面几层,从而保证信息能够有效传播,并有助于捕获低级别和高级别特征。
5.多标签分类:
在分类器部分,YOLOv3采用了sigmoid函数代替softmax进行多标签分类。这样做使得模型能够为一个物体预测多个类别,有助于处理一些复杂场景,如一个物体同时属于多个类别。
YOLOv4模型
YOLOv4在保持速度优势的同时,进一步提高了准确性。它引入了CSPDarknet53、PANet和SAM block等新技术。
网络结构:CSPDarknet53作为骨干网络,PANet用于特征融合,SAM block用于注意力机制。它还引入了Mish激活函数和CIOU loss等技术来提高性能。
改进引入了几种新技术:
1.CSPDarknet53:
CSPDarknet53作为骨干网络,是YOLOv4的主要组成部分。它基于Darknet53网络结构,并采用跨阶段部分连接(Cross Stage Partial connections, CSP)的策略来提高效率和性能。CSP策略可以有效地降低网络前向传播过程中的内存消耗,并且能够增加信息流动性以提升模型表现。
2.PANet:
PANet (Path Aggregation Network) 是用于特征融合的模块。通过自底向上和自顶向下两个路径进行信息交流和融合,PANet可以更好地利用各层次特征图之间的语义信息,从而提高目标检测精度。
3.SAM block:
SAM (Spatial Attention Module) block 是一个注意力机制模块。通过对输入特征图进行空间注意力调制,SAM block 可以强化有价值区域(即需要关注的目标位置)并抑制不重要区域的影响。
4.Mish激活函数:
Mish激活函数是一个新型非线性激活函数,在某些任务上表现出比ReLU和其他常见激活函数更好的效果。Mish激活函数能够保持正值区域内单调递增且平滑连续,在负值区域则有更大范围内接近零但非零输出,这使得神经元有更大可能在反向传播时保持活跃状态。
Mish激活函数的数学公式表示为:
Mish ( x ) = x ⋅ tanh ( softplus ( x ) ) \text{Mish}(x) = x \cdot \tanh(\text{softplus}(x)) Mish(x)=x⋅tanh(softplus(x))
其中, softplus ( x ) = log ( 1 + e x ) \text{softplus}(x) = \log(1+e^x) softplus(x)=log(1+ex)表示软正函数。
5.CIOU loss:
CIOU loss 是一种新型损失函数,相比于原始IoU损失、GIoU损失等方式具有更全面考虑因素包括形状、大小、位置等多方面差异性评估,并且在训练过程中具备较好稳定性。
以下是CIOU损失函数的数学公式表示:
CIOU = 1 − IoU + d ( g , p ) c 2 + α v \text{CIOU} = 1 - \text{IoU} + \frac{{\text{d}(g, p)}}{{\text{c}^2}} + \alpha v CIOU=1−IoU+c2d(g,p)+αv
其中, g g g表示ground truth目标框, p p p表示预测目标框, IoU \text{IoU} IoU表示交并比(Intersection over Union), d ( g , p ) \text{d}(g, p) d(g,p)表示目标框之间的距离, c \text{c} c表示对角线长度的归一化系数, α \alpha α是一个平衡项, v v v表示一个辅助项,用于惩罚预测框与真实框之间的偏移和尺度差异。
YOLOv5模型
YOLOv5是一种实时对象检测算法,虽然其名称包含"YOLO"(You Only Look Once),但并非由YOLO原作者Joseph Redmon开发,而是由一个开源社区推动的项目。尽管其名称为"v5",但实际上并没有显著创新或突破。主要是对模型结构进行了一些调整以优化速度和精度,并提供了一套完整的训练、检测、部署工具链。
网络结构方面,YOLOv5采用类似于YOLOv3/v4的设计,并在此基础上做出一些调整:
1.修改卷积块配置:
这个改动主要针对网络中的卷积层,通过修改各层的配置参数(如卷积核大小、步长等),可以改变网络结构,进而影响模型性能和计算复杂度。
添加PANet:PANet(Path Aggregation Network)是一种特征金字塔网络,它可以有效地聚合多尺度、多级别的特征信息。通过引入PANet,可以提高模型对于不同尺寸目标的识别能力。
2.微调优化速度和精度:
开发者对模型进行了大量微调操作以优化其运行速度和预测精度。这包括但不限于选择更适合任务需求的激活函数、损失函数;修改学习率策略;使用数据增强技术等。
提供全面且易于使用的工具链:这包括自动超参数搜索功能,用户只需要设定搜索范围和目标评价指标即可自动找到最佳超参数组合;模型剪枝功能,则可以帮助用户去除模型中冗余或效果不明显的部分以减小模型大小并提高运行速率。
3.Focus模块:
YOLOv5引入了Focus模块,它是一种轻量级的卷积结构,用于替代YOLOv4中的下采样操作。Focus模块可以在减少特征图尺寸的同时保留更多的信息,从而提高了小目标的检测性能和精度。