参考文章:
https://blog.csdn.net/wjinjie/article/details/107509243
网络输入:448×448×3的彩色图片。
网络输出:7×7×30的预测结果。
模型结构:
YOLO v1将输入图像(448×448)均匀划分为 7×7的网格(grid cell),每个网格负责预测一定区域内的目标。这种划分实现了以下平衡:
• 精细度:7×7的网格(共49个单元)能在保持计算效率的同时,提供足够密集的空间覆盖,避免漏检小目标。
• 计算效率:更大的网格(如14×14)会增加计算量,而更小的网格(如3×3)会降低检测精度,7×7是一个经验性的折中。
虽然YOLO v1并未显式使用“anchor boxes”(这一概念在YOLO v2后才引入),但其设计思想类似:
• 每个网格预测2个边界框(Bounding Box):每个网格需要输出两个候选框的坐标(共4×2=8维)和置信度(2维),以及20类的概率(假设VOC数据集)。因此,总维度为 2×(4+1) + 20 = 30
,对应输出的30个通道。
• 7×7网格覆盖全局:49个网格的预测共同覆盖全图,通过非极大值抑制(NMS)合并冗余预测,最终得到检测结果。
为什么是30?因为有这些数据:
YOLO v1 的损失函数(Loss Function)是一个多任务损失函数 ,结合了边界框坐标回归、目标置信度预测和类别分类的误差。
总损失函数由5部分组成:
符号 | 含义 |
---|---|
网格总数(7×7=49) | |
每个网格预测的边界框数(B=2) | |
指示函数(第个网格的第个框负责预测目标时为1,否则为0) | |
指示函数(第个网格的第个框不负责预测目标时为1) | |
第个网格包含目标时为1 | |
预测边界框的中心坐标和宽高(相对网格的归一化值) | |
真实边界框的坐标和宽高 | |
预测框的置信度(目标存在的概率) | |
真实置信度(IoU值) | |
预测类别概率 | |
真实类别概率(one-hot编码) | |
坐标损失权重(默认=5) | |
负样本置信度损失权重(默认=0.5) |
YOLOv2(又称YOLO9000)是Joseph Redmon等人于2017年提出的目标检测模型,旨在解决YOLOv1召回率低、定位精度不足的问题。它在保持实时性的同时,通过多项创新改进,显著提升了检测精度和多尺度目标处理能力,成为目标检测领域的重要里程碑。
YOLOv2的核心改进集中在以下五个方面:
引入Anchor机制:借鉴Faster R-CNN的Anchor思想,通过K-means聚类生成先验框,提升召回率。YOLOv2 使用 K-means 聚类方法分析训练集中的真实边界框尺寸,自动聚类出 5 种最具代表性的边界框尺寸 ,作为默认的 Anchor 模板。YOLOv2 的输入为 416×416,经过多次下采样后,输出特征图尺寸为 13×13 ,每个网格预测 5 个 Anchor Box 。YOLOv2 的总体输出形状是 [13, 13, 125] , 也就是 [H, W, (B × (5 + C))] 。 B = 5:每个网格预测的 Anchor Box 数量 , 5:表示每个边界框包含的信息:(tx, ty, tw, th, confidence), C = 20:类别数量(以 VOC 数据集为例)。
坐标预测改进:使用Sigmoid函数约束边界框偏移量,确保预测稳定性。
在 YOLOv1 中,每个网格单元直接预测边界框的中心坐标 (x, y),这些值是相对于整张图像的比例值(0~1之间),但训练过程中容易出现不稳定。
YOLOv2 不再直接预测最终的 (x, y, w, h),而是: 使用预设的 Anchor Box(先验框)、 每个 Anchor 预测的是相对于这个先验框的 偏移量。
对于边界框的中心坐标偏移量 tx 和 ty,YOLOv2 并不直接输出它们的绝对值,而是:
bx = sigmoid(tx)
by = sigmoid(ty)
然后通过下面的方式还原出实际的坐标:
bx = sigmoid(tx) + Cx
by = sigmoid(ty) + Cy
Cx, Cy 是当前网格单元左上角的坐标(归一化后的值)
sigmoid(tx) 输出在 (0, 1) 区间,确保偏移量不会太大
最终得到的 bx, by 是边界框中心点的归一化坐标,并且一定落在该网格单元内。
下图为 Anchor box 与 bounding box 转换示意图,其中蓝色的是要预测的bounding box,黑色虚线框是Anchor box。
特征融合(Passthrough Layer):融合高分辨率浅层特征与深层语义特征,增强小目标检测能力。
多尺度训练:动态调整输入尺寸,适应不同尺度目标。
网络结构优化:采用轻量级Darknet-19,结合Batch Normalization加速收敛。
YOLOv2的损失函数沿用YOLOv1的多任务框架,但针对Anchor机制进行了调整:
这是最经典的了,属于是巅峰之作,在后续各家开发的单阶段目标检测里,基本都沿用YOLO v3的设计框架。
YOLOv3在YOLOv2的基础上进行了三大核心改进:
输出层 | 特征图尺寸 | Anchor尺寸 | 功能定位 |
---|---|---|---|
Y3 | 52×52 | 10×13, 16×30, 33×23 | 小目标检测 |
Y2 | 26×26 | 30×61, 62×45, 59×119 | 中目标检测 |
Y1 | 13×13 | 116×90, 156×198, 373×326 | 大目标检测 |
通过张量拼接(Concat)融合不同层级特征:
这里有个关键点,可以注意看一下 YOLO v3 的输出形状,在小目标尺度上输出形状是52x52x255,255是如何组成的?
每个 Anchor 的参数数量(85) YOLOv3 的每个边界框(Bounding Box)预测包含 5 个坐标参数 + 1 个置信度 + 80 个类别概率:
tx
, ty
(中心坐标偏移),tw
, th
(宽高缩放因子)总计:4 + 1 + 80 = 85
个参数/Anchor
每个网格预测的 Anchor 数量是3个
YOLOv3 在 小目标检测层(52×52 特征图)使用 3 种预设的 Anchor 模板(如 [10×13, 16×30, 33×23]
),每个网格基于这 3 个 Anchor 预测边界框。
总计:3 × 85 = 255
个参数/网格
YOLOv4 的设计不仅继承了 YOLO 系列“速度与精度兼顾”的特点,还通过以下核心创新实现了性能的飞跃:
引入 CSPNet(Cross Stage Partial Network) 结构,减少冗余梯度计算,提升特征表达能力。CSPNet全称是Cross Stage Partial Network,主要从一个比较特殊的角度切入,能够在降低20%计算量的情况下保持甚至提高CNN的能力。注意看下图,输入被分成两个张量(通常是通道上的划分),一部分直接传递(identity分支),另一部分经过一系列卷积操作(如残差块或DenseNet风格的模块),最后通过拼接(concatenate)融合这两个分支。
使用 Mish 激活函数 替代传统的 Leaky ReLU,增强非线性表达能力,提高模型收敛速度和精度。
激活函数 | 优点 | 缺点 | 使用场景 |
---|---|---|---|
Mish | 平滑、非单调、表现好 | 计算量稍大 | 图像分类、CNN |
GELU | 表现稳定、适合 NLP | 计算略复杂 | Transformer、NLP 大模型 |
Swish | 自门控、简单有效 | 有一定计算成本 | NAS 发现的优秀激活函数 |
多尺度特征融合策略 PANet + SPP
PANet(Path Aggregation Network):在 FPN 基础上引入 Bottom-up Path Augmentation,加强浅层特征传播,提升小目标检测能力。PANet 改进了 FPN 中的单向信息流(自上而下),引入了 双向路径传播。(下图是PANet论文的图)
SPP(Spatial Pyramid Pooling):通过不同尺度的最大池化操作扩大感受野,有效捕捉多尺度上下文信息。
强大的数据增强技术
优化的正则化与归一化策略
注意力机制与路径聚合改进
先进损失函数与后处理
各种损失: https://www.dong-blog.fun/post/246
YOLOv5 是基于单阶段目标检测框架设计的,其核心思想是将目标检测问题转化为端到端的回归任务。YOLOv5 提供了多个不同规模的模型(如 YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x),用户可以根据实际需求选择不同的模型以权衡速度和精度 。
创新度不够,基本这些是重点:
新颖的骨干网络设计:YOLOv5引入了Focus模块,这个模块可以从高分辨率图像中周期性地抽出像素点,并将它们重构到低分辨率图像中,以此来减少计算量同时保持模型性能 。(黑科技)
动态架构:YOLOv5采用了动态架构,可以选大的可以选小的,backbone大小就比较灵活,这在之后很多模型都这么操作了。
广泛的数据增强技术:为了提高模型泛化能力,YOLOv5使用了一系列数据增强方法,这些方法有助于模型学习到更加鲁棒的特征表示 。
很厉害的工程化:模型再好,不好训练也是完蛋,YOLOv5项目结构很好,让训练者只需要关心数据组织就可以完成目标检测训练,这一点也非常出色。
YOLOX结构:
YOLO v6 网络架构:
(1)重参化模块(RepVGG block也不是美团首创):重参化模块(RepVGG block)的作用在于通过结构重参数化技术,在训练阶段使用多分支卷积结构以提升模型表达能力,而在推理阶段将这些多分支结构融合转换为单路3×3卷积层,从而在保持高性能的同时减少计算复杂度。这种设计使得网络在训练时利用多分支的表达能力,在推理时简化为类似VGG的简单结构,提高了部署效率。具体实现上,RepVGG Block中的1×1卷积可以视为一种特殊的3×3卷积形式,而恒等映射则可被看作一个单位矩阵形式的卷积核,这些组件在推理阶段可以通过线性组合的方式合并为一个统一的3×3卷积核。
(2)标签分类策略。(YOLOX的身影)
标签分类策略在目标检测模型中起着至关重要的作用,它决定了如何将预测框(如Anchor框)与真实框(Ground Truth)进行匹配,从而分配正负样本标签以指导模型训练。传统的静态分配策略主要依赖于固定的规则,例如Max IoU策略,即将与某个Ground Truth具有最大交并比(IoU)的Anchor框负责预测该Ground Truth。然而,这种静态方法没有充分考虑到目标之间的复杂关系,可能导致次优的匹配结果。
YOLOX引入了一种动态标签分配策略SimOTA,通过优化传输分配算法简化了这一过程。SimOTA的核心思想是利用一种简化的动态规划方法来寻找最优匹配,而不是传统方法中的Sinkhorn-Knopp算法,这不仅减少了计算开销,还提高了训练效率和准确性。具体来说,SimOTA分为两个步骤:粗筛选和细筛选。首先,对Anchor框进行初步筛选,排除掉那些与任何Ground Truth都不够匹配的框;然后,在剩下的候选框中,基于一个代价矩阵(Cost Matrix)进行更精确的匹配,这个矩阵记录了每个预测框与所有Ground Truth之间的匹配成本。通过这样的两步筛选机制,SimOTA能够更准确地找到最优的标签分配方案,从而提升模型的检测性能。
此外,YOLOX还优化了置信度标签的计算方法,通过提出动态Anchor辅助标签计算,进一步提升了标签的准确度,使得模型能够在训练过程中更好地学习到物体边界框的真实分布。这些改进共同作用,使YOLOX在处理复杂场景下的目标检测任务时表现出色。
(3)Andchor Free + 解耦头(YOLOX的身影)
YOLOX 引入了 Anchor-Free 机制,摒弃了传统 YOLO 系列中依赖预定义锚框(Anchor)的方式,转而采用更直接的目标检测方法。该机制不再依赖聚类生成的先验框,而是根据特征图尺寸自动生成先验框,并通过解耦头直接预测边界框的位置信息,每个位置仅需预测一个边界框,减少了冗余计算,提升了检测效率和泛化能力 。同时,这种设计简化了模型结构,使得训练和解码阶段更加高效,且在不同尺度目标上的适应性更强 。
MCUNet、NanoDet针对CPU进行优化。
YOLOX、YOLOR针对GPU进行优化。
YOLOv7想全都要。
在结构上延续yolov4、yolov5风格,属于anchor based方法,对最后输出的特征需要进行nms处理。
backbone不再是cspdarknet53,而做了很多优化。
Neck部分采用SPPCSPC、FPN-PAN结构。 Head部分是单阶段目标检测任务头。
CSPVoVNet的体系结构还分析了梯度路径,使不同层能够学习更多样化的特征。上面描述的梯度分析方法还能使推理速度更快、模型更准确。
ELAN:如何设计一个高效的网络?”得出结论是:通过控制最短最长梯度路径,更深的网络可以有效地进行学习并更好地收敛。
E-ELAN:采用expand、shuffle、merge cardinality结构,实现在不破坏原始梯度路径的情况下,提高网络的学习能力。E-ELAN还可以指导不同的分组模块来学习更多样化的特性。
模型缩放[72,60,74,73,15,16,2,51]是一种放大或缩小已经设计好的模型,使其适合不同的计算设备的方法。模型缩放方法通常采用不同的缩放因子,如分辨率(输入图像的大小)、深度(层数)、宽度(通道数)、阶段(特征金字塔数),以达到在网络参数量、计算量、推理速度和精度方面的良好权衡。网络架构搜索(NAS)是常用的模型扩展方法之一。NAS可以自动从搜索空间中搜索合适的缩放因子,而不需要定义太复杂的规则。NAS的缺点是需要非常昂贵的计算来完成对模型缩放因子的搜索。在[15]中,研究者分析了缩放因子与参数量和操作量的关系,试图直接估计一些规则,从而得到模型缩放所需的缩放因子。查阅文献发现,几乎所有的模型标度方法都是独立分析单个标度因子的,甚至复合标度类的方法也是独立优化标度因子的。这是因为大多数流行的NAS体系结构处理的是不太相关的伸缩因素。我们观察到,所有基于连接的模型,如DenseNet[32]或V oVNet[39],当这些模型的深度缩放时,会改变某些层的输入宽度。由于所提出的体系结构是基于串联的,我们必须为该模型设计一种新的复合缩放方法。 基于连接的模型的模型缩放。从(a)到(b),我们观察到,当在基于串联的模型上执行深度缩放时,计算块的输出宽度也会增加。这种现象会导致后续传输层的输入宽度增大。因此,我们提出(c),即对基于级联的模型进行模型缩放时,只需要缩放计算块中的深度,传输层的其余部分进行相应的宽度缩放。 从上述现象可以推断,对于基于串联的模型,我们不能单独分析不同的缩放因子,而必须综合考虑。以缩放深度为例,这样的操作将导致转换层的输入通道和输出通道之间的比率发生变化,这可能会导致模型的硬件使用率下降。因此,对于基于拼接的模型,必须提出相应的复合模型缩放方法。当我们缩放计算块的深度因子时,我们还必须计算该块的输出通道的变化。然后,我们将对过渡层进行同样量的宽度因子缩放,结果如图3 (c)所示。我们提出的复合缩放方法可以保持模型在初始设计时的属性,并保持最佳结构。
接下来讨论标签分配的问题。在过去,在深度网络的训练中,标签分配通常直接指的是ground truth,并根据给定的规则生成hard label(未经过softmax)。然而近年来,以目标检测为例,研究者经常利用网络预测的质量分布来结合ground truth,使用一些计算和优化方法来生成可靠的软标签(soft label)。例如,YOLO使用bounding box预测和ground truth的IoU作为软标签。在本文中,作者将网络预测结果与ground truth一起考虑后再分配软标签的机制称为“标签分配器”。无论辅助头或引导头,都需要对目标进行深度监督。那么,‘’如何为辅助头和引导头合理分配软标签?”,这是作者需要考虑的问题。目前最常用的方法如图5(c)所示,即将辅助头和引导头分离,然后利用它们各自的预测结果和ground truth执行标签分配。本文提出的方法是一种新的标签分配方法,通过引导头的预测来引导辅助头以及自身。换句话说,首先使用引导头的prediction作为指导,生成从粗到细的层次标签,分别用于辅助头和引导头的学习,具体可看图5(d)和(e)。 这组软标签将作为辅助头和引导头的目标来训练模型。 这样做的目的是使引导头具有较强的学习能力,由此产生的软标签更能代表源数据与目标之间的分布差异和相关性。此外,作者还可以将这种学习看作是一种广义上的余量学习。通过让较浅的辅助头直接学习引导头已经学习到的信息,引导头能更加专注于尚未学习到的残余信息。 Coarse-to-fine lead head guided label assigner: Coarse-to-fine引导头使用到了自身的prediction和ground truth来生成软标签,引导标签进行分配。然而,在这个过程中,作者生成了两组不同的软标签,即粗标签和细标签,其中细标签与引导头在标签分配器上生成的软标签相同,粗标签是通过降低正样本分配的约束,允许更多的网格作为正目标(可以看下FastestDet的label assigner,不单单只把gt中心点所在的网格当成候选目标,还把附近的三个也算进行去,增加正样本候选框的数量)。原因是一个辅助头的学习能力并不需要强大的引导头,为了避免丢失信息,作者将专注于优化样本召回的辅助头。对于引导头的输出,可以从查准率中过滤出高精度值的结果作为最终输出。然而,值得注意的是,如果粗标签的附加权重接近细标签的附加权重,则可能会在最终预测时产生错误的先验结果。
介绍有人写的介绍论文:
https://arxiv.org/pdf/2408.15857
YOLO v8 的作者就是 YOLO v5 的作者,但似乎 YOLO v8 没有论文。
YOLOv8 在目标检测领域实现了重大进步,它在 YOLOv5 等早期版本的基础上进行了多项创新性改进,具体如下:
架构升级:YOLOv8 对目标检测架构进行了进一步优化,提升了模型的效率与准确性。通过引入改进版的 CSPDarknet 主干网络和 PANet++ 颈部结构,增强了特征提取与融合能力。这些改进有效解决了梯度冗余问题,并优化了特征金字塔网络,使模型更加高效流畅。
模型多样性:与 YOLOv5 类似,YOLOv8 提供了多种模型尺寸(nano、small、medium、large、extra-large),以满足不同硬件条件和应用场景的需求。其中最小的变体 YOLOv8n 特别适合部署在边缘设备和物联网平台上,在计算资源消耗极低的情况下仍能提供强大的目标检测能力。
训练方法创新:YOLOv8 在训练策略上进行了多项增强,例如引入更高效的马赛克数据增强(mosaic augmentation)和自适应锚框(anchor boxes),从而提升了对小目标的检测性能,并减少了对大规模数据集的依赖。此外,该模型采用了 16 位浮点精度的混合精度训练方式,显著缩短了训练时间并降低了内存占用。
性能与影响力:YOLOv8 实现了更高的 mAP 指标,同时保持较低的推理延迟,使其在实时目标检测任务中表现更为出色。继续基于 PyTorch 框架开发也确保了其能够被广大研究和开发社区所使用,促进了人工智能与计算机视觉领域的持续创新与协作。
作者是WongKinYiu,也就是YOLO v7的作者。
一些资料:
https://blog.csdn.net/weixin_43334693/article/details/136383022
https://blog.csdn.net/kabuto_hui/article/details/136383260
深度网络输入数据在逐层进行特征提取和空间变换时,会丢失大量的信息。
针对数据在传输时的信息丢失问题,研究问题如下:
(1)提出了可编程梯度信息(PGI)的概念,以应对深度网络实现多个目标所需的各种变化。
(2)网络结构特点
(3)损失函数与训练策略
代码和论文:
https://github.com/THU-MIG/yolov10
https://arxiv.org/pdf/2405.14458
结构:
指标:
工作主要两个:
YOLOv10 在保持实时检测高效性的同时,提出了多项创新性改进,显著提升了模型的精度与推理速度。其核心创新之一是无 NMS 训练策略,通过引入双重标签分配(dual label assignments) 和 一致匹配度量(consistent matching metric),在训练过程中结合“一对多”和“一对一”的标签分配方式,既保证了丰富的监督信号,又消除了传统 YOLO 所需的 NMS 后处理步骤,从而实现端到端的高效推理。
无 NMS 训练策略 的核心思想是:让模型自己学会“挑出最靠谱的答案”,而不需要额外的“人工筛选步骤”(也就是 NMS) 。
传统 YOLO 的问题:靠“人工筛答案”
传统 YOLO训练时 :一个目标(比如一只猫)会被分配多个“预测框”(模型可能在猫的位置附近画出多个框),相当于给模型很多次机会去“猜答案”。这样训练更充分,模型能学到更多细节。
传统 YOLO推理时 :模型会输出一堆框(可能重复),这时候就需要人工设计的 NMS(非极大值抑制) 来“删掉多余的框”,只保留最靠谱的那一个。但这个过程会拖慢速度,而且效果容易受参数影响(比如设置“删多少”)。
YOLOv10 的创新:让模型自己学会“挑答案”
YOLOv10 通过两个关键设计,直接让模型在推理时自动输出最靠谱的框 ,不需要 NMS:
(1)双重标签分配:训练时“广撒网 + 精准挑”
“一对多”分配 :和传统方法一样,一个目标分配多个预测框(广撒网),让模型充分学习,保证训练效果。 “一对一”分配 :额外再分配一个“最优框”(精准挑),让模型知道“哪个框最靠谱”。 训练时两者一起用 ,模型既能学到丰富的信息,又能记住“哪个框最准”。
(2)一致匹配度量:统一“挑框”的标准
无论是训练时的“一对多”还是“一对一”,都用同一个公式来衡量“框的好坏”(比如分类得分 × 框的准确度)。 这样,模型在训练时就知道:“最优框”必须和“一对多”里最好的框一致。 推理时 ,直接用“一对一”的分支输出结果,因为训练时它已经学会挑出和“一对多”里最匹配的那个框 ,不需要再靠 NMS 筛。
一对多分支 :沿用传统 YOLO 的标签分配方式,为每个真实目标分配多个预测框(正样本),通过密集监督帮助模型充分学习目标特征。
一对一分支 :新增一个轻量级分支,专门从一对多的候选框中筛选出唯一最优框 (Top-1),并通过独立的损失函数直接监督该最优框的分类和定位精度。
另一个重要创新是全局效率-精度驱动的模型设计,从模型结构层面全面优化计算资源的利用。YOLOv10 提出了轻量级分类头、空间-通道解耦下采样以及基于秩引导的模块设计来提升效率;同时引入大核卷积和部分自注意力模块(PSA)来增强模型表达能力,在几乎不增加推理成本的前提下提升了检测精度。这些改进使得 YOLOv10 在多个模型尺度上均实现了优于现有最先进方法的性能,兼顾了速度与精度的平衡。
YOLOv5 YOLOv8的作者
替代YOLOv8的C2f块,采用双小卷积(kernel=2)替代单大卷积,减少计算量22%的同时保持精度(COCO mAP提升1-2%)。 动态切换机制(c3k=True/False)支持灵活选择瓶颈结构或C3模块,适应不同计算需求。
在SPPF后引入并行空间注意力机制,通过特征图的空间池化增强关键区域聚焦能力,对小目标和遮挡物体检测效果显著(实验显示小目标mAP提升3.5%)。
PGI通过分阶段、渐进式地注入梯度,动态平衡不同层级和预测头的训练权重,具体实现方式:
分层梯度分配: 将网络划分为多个阶段(如浅层/中层/深层),每个阶段分配独立的辅助监督信号。 浅层:侧重定位细节(边缘、小目标)的梯度强化。 深层:侧重语义信息(大目标、类别)的梯度保留。 动态权重调整: 训练初期,优先加强浅层梯度(提升定位能力);随着训练进行,逐步提高深层梯度的权重(优化分类精度)。
首个以Attention为核心的YOLO框架问世
https://github.com/sunsmarterjie/yolov12
属于是卷不动了:
reshape
操作实现,避免复杂划分(如Swin Transformer的窗口划分)带来的计算开销。轻量化设计:
Conv2d + BN
替代 Linear + LN
,利用卷积的高效性加速推理。层级结构调整:
模型 | mAP | 速度 (ms/T4) | 相比基准 |
---|---|---|---|
YOLOv12-N | 40.6% | 1.64 | 比 YOLOv10-N 高 2.1% |
YOLOv12-S | 48.0% | - | 比 RT-DETR-R18 快 42%,计算量仅需 36% |
YOLOv12-X | 55.2% | - | 超过 RT-DETR-R101,参数量减少 22.2% |
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!