目标检测 | yolov5 原理和介绍
YOLOv5是YOLO系列中一个重要的版本,它在目标检测领域具有显著的性能提升和改进。Mosaic数据增强:YOLOv5在训练阶段采用了Mosaic数据增强技术,这种技术通过将四张图片随机缩放、裁剪并拼接成一张图片,增加了模型训练时的多样性,有助于提升模型对小目标的检测能力。自适应锚框计算:YOLOv5引入了自适应锚框计算方法,该方法使用K-means聚类对训练集中的边界框进行分析,并自动调整锚框
相关系列:
目标检测 | yolov1 原理和介绍
目标检测 | yolov2/yolo9000 原理和介绍
目标检测 | yolov3 原理和介绍
目标检测 | yolov4 原理和介绍
目标检测 | yolov5 原理和介绍
目标检测 | yolov6 原理和介绍
目标检测 | yolov7 原理和介绍
目标检测 | yolov8 原理和介绍
目标检测 | yolov9 原理和介绍
目标检测 | yolov10 原理和介绍
1. 简介
YOLOv5是YOLO系列中一个重要的版本,它在目标检测领域具有显著的性能提升和改进。以下是YOLOv5中的一些关键技术或模块:
- Mosaic数据增强:YOLOv5在训练阶段采用了Mosaic数据增强技术,这种技术通过将四张图片随机缩放、裁剪并拼接成一张图片,增加了模型训练时的多样性,有助于提升模型对小目标的检测能力 。
- 自适应锚框计算:YOLOv5引入了自适应锚框计算方法,该方法使用K-means聚类对训练集中的边界框进行分析,并自动调整锚框的大小和比例,以适应不同数据集的特点 。
- 自适应图片缩放:YOLOv5采用了letterbox自适应图片缩放技术,这种技术在保持图像宽高比的同时,将不同尺寸的图像缩放到网络输入所需的固定尺寸 。
- Focus结构:YOLOv5采用了Focus结构作为其Backbone的一部分,该结构通过对输入图像进行切片操作,实现了信息在通道维度上的扩展,有助于提高特征提取的效率 。
- CSPDarknet53主干网络:YOLOv5使用CSPDarknet53作为其主干网络,该网络通过Cross-Stage Partial connections结构减少了计算量,同时保持了特征提取的能力 。
- PANet(Path Aggregation Network):YOLOv5的Neck部分采用了PANet结构,这种自顶向下的特征融合方法有助于实现多尺度特征的融合和利用 。
- CIoU Loss:YOLOv5在训练过程中使用了CIoU(Complete Intersection over Union)损失函数,这种损失函数考虑了边界框的中心点距离、宽高比等因素,有助于提高检测精度 。
- 优化策略和训练过程:YOLOv5对优化器参数进行了精细控制,采用了不同的学习率和动量更新曲线,并在训练过程中使用了自动混合精度(AMP)来加速训练 。
- 推理和后处理过程:YOLOv5在推理阶段采用了非极大值抑制(NMS)来过滤冗余的检测框,并通过设置不同的阈值来平衡召回率和精确度 。
YOLOv5是Ultralytics公司开发的一个流行的开源目标检测模型,它虽然在GitHub上开源了代码,但并没有发布经过同行评议的论文 。YOLOv5的命名和发布在计算机视觉社区引起了一些争议,因为它并没有得到YOLO系列原始作者的官方认可,而且发布时缺少了同行评议的论文支持 。尽管如此,YOLOv5因其出色的性能和易用性,在目标检测领域得到了广泛应用。
YOLOv5的争议主要源于它与之前版本相比,并没有提供详细的技术论文来描述其技术细节和创新点 。与之相对,YOLOv4在开源时,其论文得到了发表并且经过了同行评议,技术升级和效果得到了计算机视觉社区的接受和认可 。YOLOv5的发布虽然缺少了论文,但Ultralytics公司在面对社区的争议时,通过博客等形式做出了回应,并提供了详细的项目介绍和使用说明 。
此外,YOLOv5的实现是首次使用PyTorch而不是Darknet编写的,这使得它能够受益于已建立的PyTorch生态系统,支持更简单的部署,并方便用户在不同设备上进行模型转换和部署 。尽管YOLOv5的论文可能由于公司利益原因并未发布,但它的代码库和社区支持仍然使其成为一个有价值的资源 。
其核心是,YOLOv5嵌入了跨阶段部分(CSP)网络[6],这是ResNet架构的一个变种。这种整合包括了CSP连接,提高了网络的效率并减少了计算需求。通过多个空间金字塔池化(SPP)块进一步优化了CSPNet,允许在不同尺度上进行特征提取。
架构的 Neck 特征采用了路径聚合网络(PAN)模块,并增加了上采样层以改善特征图的分辨率[7]。YOLOv5的 Head 是一系列卷积层,用于生成边界框和类别标签的预测。YOLOv5使用基于 Anchor 点的预测,将每个边界框与一组特定形状和大小的预定义 Anchor 框相连接。
损失函数计算涉及两个主要部分[8]。二进制交叉熵用于计算类别和目标性损失,而完整交并比(CIoU)用于衡量定位准确性。
最后yolov5没有论文,只有代码。
2. 网络结构
通过解析代码仓库中的 .yaml 文件中的结构代码,YOLOv5 模型可以概括为以下几个部分:
- 输入端:YOLOv5采用Mosaic数据增强技术,自适应锚框计算和自适应图片缩放功能。
- Backbone:YOLOv5的Backbone由Focus结构、CBL(Conv+BN+Leaky ReLU)结构、CSP(Cross Stage Partial Network)结构和SPP(Spatial Pyramid Pooling)结构组成。Focus结构是YOLOv5中新加入的,用于减小计算量同时保留原始图片信息;CSP结构用于减少计算量并增强特征提取能力;SPP模块用于增加特征图的接收范围。
- Neck:YOLOv5的Neck部分采用了FPN(Feature Pyramid Network)和PAN(Pyramid Attention Network)结构,用于从不同主干层对不同的检测层进行参数聚合,增强目标的位置和类别信息的保留。
- Head:使用了CIOU(Complete Intersection over Union)损失函数,用于更准确地预测边界框。
此外,YOLOv5的网络结构还包括了一些高级模块,如Conv(基础卷积模块)、C3(包含残差网络的模块)、SPPF(改进的SPP模块)、Upsample(上采样模块)、Concat(连接模块)和Detect(检测模块)。这些模块共同构成了YOLOv5的完整网络结构,使其能够有效地进行目标检测任务。
3. 训练和部署
增强的训练和部署:YOLOv5在其训练和部署 Pipeline 中引入了几项改进:
- 简化的训练流程: YOLOv5采用基于PyTorch的框架[9],这是广泛使用且文档齐全的。这使得研究行人和开发行人更容易理解、修改和扩展代码。训练流程设计得非常用户友好,清晰的文档和示例帮助用户快速入门。
- 与流行框架的集成: YOLOv5支持与TensorFlow、ONNX和其他框架[10]的集成。这增强了其多功能性,使其能够在各种应用和环境中被使用。能够将模型导出为不同格式确保了与各种部署平台的兼容性。
- 无缝部署: YOLOv5提供导出至ONNX、CoreML和TensorRT[11]的选项,便于在各种平台和硬件加速器之间部署。对于具有不同架构的边缘设备(如NVIDIA GPU[12]、Apple设备和其他专用硬件)来说,这一特性特别有价值。无缝部署能力确保模型能够轻松集成到生产环境中。
自动增强和马赛克增强: YOLOv5融入了先进的数据增强技术:
- 自动增强: 这种技术自动选择最佳的增强协议以提高模型的泛化能力。通过在训练期间实验不同的增强策略,自动增强帮助模型学习更鲁棒的特征,从而在未见数据上获得更好的性能[13]。这对于边缘应用尤为重要,因为模型可能会遇到各种环境和条件。
- 马赛克增强: 马赛克增强将四张训练图像组合成一张,使模型能够学习检测更小的物体,并提高其对不同尺度和长宽比的鲁棒性[14]。这种技术在处理包含多个物体的复杂场景时非常有用,这在现实世界的边缘应用中很常见。通过向模型展示一组多样化的训练示例,马赛克增强增强了其对新情况的泛化能力。
表1展示了在COCO数据集上各种YOLOv5模型的性能指标。YOLOv5模型用不同的字母(n、s、m、l和x)表示,代表它们的大小和复杂度。提供的指标包括输入大小、在不同IoU阈值下的平均精度(AP)、在CPU上的延迟、参数数量以及每秒浮点运算数(FLOPs)。
4. 创新点
4.1 自适应anchor
在训练模型时,YOLOv5 会自己学习数据集中的最佳 anchor boxes,而不再需要先离线运行 K-means 算法聚类得到 k 个 anchor box 并修改 head 网络参数。总的来说,YOLOv5 流程简单且自动化了.
4.2 自适应图片缩放
在常用的目标检测算法中,不同的图片长宽都不相同,因此常用的方式是将原始图片统一缩放到一个标准尺寸,再送入检测网络中。空白处填充灰色
4.3 Focus结构
Focus 结构可以简单理解为将 W × H W × H W×H 大小的输入图片 4 个像素分别取 1 个(类似于邻近下采样)形成新的图片,这样 1 个通道的输入图片会被划分成 4 个通道,每个通道对应的 WH 尺寸大小都为原来的 1/2,并将这些通道组合在一起。这样就实现了像素信息不丢失的情况下,提高通道数(通道数对计算量影响更小),减少输入图像尺寸,从而大大减少模型计算量。
以 Yolov5s 的结构为例,原始
640
×
640
×
3
640\times640\times3
640×640×3 的图像输入 Focus 结构,采用切片操作,先变成
320
×
320
×
12
320×320×12
320×320×12 的特征图,再经过一次 32 个卷积核的卷积操作,最终变成
320
×
320
×
32
320×320×32
320×320×32 的特征图。
4.4 四种网络结构
YOLOv5 通过在网络结构 yaml 中设置不同的 depth_multiple 和 width_multiple 参数,来创建大小不同的五种 YOLOv5 模型:Yolv5n、Yolv5s、Yolv5m、Yolv5l、Yolv5x。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)