概述
YOLOv5的主要架构
Backbone(主干网络):负责提取输入图像的多层次特征
Neck(颈部网络):进行特征融合和多尺度特征处理,通常包含FPN(特征金字塔网络)和PAN(路径聚合网络)
Prediction(预测头):基于融合后的多尺度特征图进行目标预测,包括边界框回归、置信度预测和类别分类

关键组成总结
Backbone(主干网络)
- CSPNet:通过将特征图分为两部分,一部分直接传递,另一部分通过多个卷积层处理后再合并,减少了冗余计算,提升了模型效率
- Darknet:传统的YOLO系列采用Darknet作为主干,YOLOv5通过CSPDarknet优化了特征提取过程,进一步提高了性能
Neck(颈部网络)
- FPN:FPN通过自顶向下的路径,将高层次的语义信息传递到低层次特征图,增强了低层特征的表达能力,适用于检测不同尺度的目标
- PAN:PAN在FPN的基础上,加入了自底向上的路径,进一步聚合特征信息,增强了特征图之间的信息流动,提升了小目标的检测性能
- SPPF:SPPF模块通过多次最大池化操作,提取不同尺度的特征,并进行拼接和卷积处理,增强了模型对多尺度特征的捕捉能力,同时保持了计算效率
Prediction(预测头)
- 预测层:每个尺度的特征图对应一个预测层,预测输出包括边界框坐标(x, y, w, h)、置信度和类别概率
- 锚框机制:每个预测层使用预定义的锚框(Anchor Boxes)进行目标检测,适应不同尺寸和形状的目标
损失函数总结
- 边界框回归损失
- 目标置信度损失
- 类别分类损失
训练流程总结
- 标注数据,训练和验证数据进行分类,同时进行数据增强进一步提高模型的泛化能力
- 模型初始化,选择合适的模型,然后加载权重加速收敛
- 前向传播,输入图像通过主干网络提取特征,通过颈部网络进行特征融合,在不同尺度特征图上进行目标检测
- 损失计算,根据正负样本匹配结果,计算定位损失、置信度损失和分类损失,最后得到总损失
- 反向传播与优化,反向传播计算梯度,使用优化器(如Adam、SGD)更新模型参数
- 模型评估和调整,定期评估模型验证集的性能,根据评估结果调整学习率,损失权重等信息
推理过程总结
- 输入处理:针对输入的图像进行预处理,匹配模型输入要求
- 前向传播:图像通过主干网络、颈部网络进行特征提取和融合,从而实现在不同尺度上进行目标检测
- 后处理:
- 阈值筛选:过滤低置信度的预测框
- 非极大值抑制(NMS):去除重叠度高的预测框,保留最优的检测结果
- 边界框解码:将预测的边界框参数转换为实际图像坐标
- 输出结果:返回检测到的目标类别、边界框坐标和置信度
输入端
Mosaic增强
Mosaic增强的主要目的在于将多张图片进行组合,从而增加训练数据的多样性和复杂性,使得YOLO模型在训练过程中可以更好的学习到不同场景、不同尺度和不同位置的目标特征。这不仅提升了模型的检测精度,还增强了其在实际应用中的鲁棒性和泛化能力
分析1:基本原理是什么

多图像拼接
- 首先从数据集中随机选择四张图像,然后对这四张图像进行随机缩放,从而适应拼接后的整体布局
- 将四张缩放后的图像按照特定的方式(通常是四个象限)拼接成一张新的大图。例如,将四张图像分别放置在左上、右上、左下和右下四个位置,参考上面图片
边界框的调整
- 调整位置,因为图像被拼接到新的位置,原图像中的边界框需要根据新的图像布局进行位置调整
- 调整尺寸,因为在将图像拼接到四宫格中的时候无法避免有些图片会进行缩放,那么边界的尺寸的也是需要进行相应调整从而匹配新的图像尺度
实现增强效果
- 多样性增加:通过将不同图像的目标组合在一张图中,模型能够学习到更多样化的目标分布和背景环境
- 上下文信息丰富:目标可能出现在不同的上下文中,这有助于模型更好地理解目标的环境和相互关系
- 小目标检测提升:拼接后的图像可能包含更多的小目标,这有助于模型提升对小目标的检测能力
分析:具体实现分析

- 随机选择四张图像: 从训练数据集中随机选取四张不同的图像
- 调整图像尺寸: 对每张图像进行随机缩放,确保它们在拼接后能够合理地填充到新的大图中
- 确定拼接位置: 设定一个新的大图的尺寸(例如,原图的两倍),并确定每张图像在新图中的位置(左上、右上、左下、右下)
- 拼接图像: 将四张缩放后的图像按照预定的位置拼接成一张新的大图
- 调整和合并边界框: 根据每张图像在新图中的位置,调整各自的边界框坐标,并合并到新图中
- 在进行上述步骤后还是可以对图像进一步的增强,以增强数据的多样性
分析:拼接后的画布大小是实现预设好的吗?
拼接后的整体布局大小通常是预先设定好的。在 Mosaic 增强中,通常会设定一个固定的输出图像尺寸,例如原图的两倍(如 640x640 像素)。这个固定尺寸确保了拼接后的图像在模型训练过程中保持一致性,有助于模型更好地学习和泛化
也就是说,YOLO的实现中会定义一个固定的网格和画布尺寸,然后将四张图像按照指定的位置缩放填充到这个画布上,这样做的好处是确保所有拼接后的图像具有相同的输入尺寸,便于批量处理和加速训练过程
分析:不同照片进行拼接一定会导致留白区域,这些区域的处理方式如何
根据其处理步骤,首先对选中的图像进行随机缩放,然后将图片放到四宫格中,每个象限的具体位置和大小都是预先设计好的
那么处理留白区域的时候,在缩放和定位过程中,可能会出现某些区域的留白。这些留白通常会被填充为黑色(即像素值为0),或者采用与图像边缘相邻的颜色进行填充。留白区域虽然存在,但由于模型在训练过程中会见到各种组合和背景,通常不会对最终的检测性能造成显著影响
经查找YOLOv5源码,YOLOv5中默认使用的是114灰色
# 创建一张空白的大图像(画布)
mosaic_img = np.full((h, w, 3), fill_value=114, dtype=np.uint8)
分析:输入的使用使用四张图片合成一张图片,最后训练的是五张图吗?
结论:最后输入神经网络的图片不是五张,而是一张拼接后的Mosaic图像,四张原始图像被随机选取、缩放和拼接后,形成了一张新的综合图像(即 Mosaic 增强后的图像),这张综合图像作为最终的输入传递给神经网络
分析:通过Mosaic增强会导致数据减少吗?
不会导致数据减少,反而会导致数据增加从而被高效且多样化的利用,最终提高了训练样本的有效性和泛化能力
- 按批次加载数据
- 每一轮训练(epoch)都会将数据分成多个批次(batch),每个批次都有一组照片,假如我们总有10000张照片,那么每个批次的大小为16,那么总批次就是

- Mosaic增强数据(重点)
- 在每次加载一个批次的时候,从数据集中随机取出4张照片,然后将它们拼成一张Mosaic图像
- 那么当batch_size = 16的时候,也就是16张Mosaic图像,又因为每一张Mosaic图像都是由4张原始图像拼接而成,所以实际是又64张原始照片
- 随机选取4张照片组成
- 即使在第一个 epoch 没有完全遍历所有图片,后续的 epoch 会随机再次选取这些未被用到或未完全利用的图片
- 每张图片通过不同的 Mosaic 拼接组合,最终会多次出现在训练中,且背景、位置等都会变化
- 随机选取结合 shuffle,经过多个 epoch 后,每张图片都至少会被选中一次,同时还会出现在不同的 Mosaic 图像组合中
- 总结,随机选取是一定可以选取到全部的图片
综上所述,Mosaic 增强并不是减少了训练数据,而是多次动态组合训练数据。
自适应锚框
学习Yolov3原理时,也有类似于的预设锚框,该处主要解决自己针对于Yolov4自适应锚框的一些疑问
分析:YOLOv3的锚框和YOLOv5锚框的区别
首先从锚框计算角度分析
- YOLOv3
- YOLOv3 的锚框是手动预设的固定值,基于 COCO 数据集上目标框的尺寸统计结果。换句话说,YOLOv3 的默认锚框是开发者在训练前人为选择的一组固定尺寸
- 如果想要适配新的数据集,那么就需要手动统计目标框的尺寸然后重新设计尺寸,没有自动化的过程,从而增加了数据适配的复杂性
- YOLOv5
- YOLOv5 引入了 自
YOLOv5原理全面解析

最低0.47元/天 解锁文章
23万+





