边缘计算要求目标检测算法在算力仅为几 TOPS 的嵌入式设备上实现实时推理,这给算法设计带来了根本性约束。传统两阶段检测器虽然精度较高,但需要先生成候选区域再进行分类和回归,计算流程复杂,难以满足边缘实时性要求。YOLO 系列算法将目标检测视为一个回归问题,在单次前向传播中直接输出目标的位置和类别,天然契合边缘场景对速度的追求。近年来,YOLO 在保持高速的同时,通过结构改进和训练策略优化不断提升精度,并通过模型压缩算法进一步适配边缘硬件。本文从算法原理和优化方法两个层面,深入剖析面向边缘计算的 YOLO 目标检测算法。
YOLO 的核心思路非常直接:把目标检测当作一个回归问题来处理。输入一张图像,模型直接输出每个目标的位置和类别,不需要中间步骤。具体做法是将图像划分成均匀的网格,每个网格负责预测中心点落在自己区域内的目标。对于每个网格,模型输出若干组预测值,每组包含边界框的位置信息、一个置信度分数以及该目标是各个类别的概率。
这种设计的好处是速度极快。因为所有预测在一次计算中完成,没有反复的区域提议和二次分类。对于边缘设备来说,这意味着更低的延迟和更高的吞吐量。置信度的作用很重要,它表达了模型对“这个框里确实有目标”以及“框的位置准确”的综合判断。推理时,置信度与类别概率相乘,得到每个框属于某个类别的最终得分,再通过非极大值抑制去除重叠的冗余框。
早期的 YOLO 版本需要预先定义一组锚框,这些锚框是不同尺寸和长宽比的参考框。模型预测的是相对于这些锚框的偏移量,而不是直接预测框的位置。锚框的尺寸通常需要通过在训练集上运行聚类算法来确定,换一个数据集可能就需要重新调整,这增加了调参负担。
现代 YOLO 算法全面转向了 anchor-free 的方式。检测头不再依赖任何预设的锚框,而是直接回归目标中心点到边界框四条边的距离。模型输出四个值,分别代表中心点到左、上、右、下边界的距离,由此可以直接还原出边界框的位置和大小。这种设计消除了锚框相关的超参数,简化了训练和后处理流程,同时让模型对不同尺度和长宽比的目标更加灵活。
为了配合 anchor-free 回归,现代 YOLO 还引入了分布焦点损失。这个损失函数的思路是:边界框的位置不是被当作一个确定的值来回归,而是被建模成一个概率分布。模型学习的是位置的可能性分布,训练时鼓励概率分布集中在真实位置附近。这样做的好处是定位更加精细,尤其在边界模糊或者目标被部分遮挡时,模型能够表达不确定性。
YOLO 在多个不同分辨率的特征图上进行预测。以常见的输入尺寸为例,模型会输出三种尺度的预测网格,分别对应高分辨率、中分辨率和低分辨率。高分辨率的特征图保留了更多的细节信息,感受野较小,适合检测小目标;低分辨率的特征图感受野大,语义信息强,适合检测大目标。每个网格位置在各自尺度上预测边界框,最后合并所有尺度的结果。这种多尺度设计让 YOLO 能够在同一张图像中同时捕捉到大小不同的目标,缓解了小目标容易漏检的问题。
骨干网络负责从输入图像中提取多尺度特征。YOLO 采用的骨干网络基于 CSPDarknet,其中最关键的设计思想是跨阶段部分连接。简单来说,就是把输入特征在通道维度上分成两部分:一部分经过一系列卷积和瓶颈单元的变换,另一部分直接绕过这些变换,最后把两部分在通道维度上拼接起来。这样做的好处是减少了计算冗余,因为不是所有特征都需要经过全部变换;同时,跨层连接增强了梯度的流动,让深层网络训练更稳定。
现代 YOLO 进一步将这种思想发展为 C2f 模块。C2f 模块的流程是:输入特征先经过一次卷积,然后分成多个分支,每个分支依次经过若干个瓶颈单元,所有分支的输出与最初的输入特征在通道维度上拼接,最后再经过一次卷积进行融合。C2f 中的瓶颈单元由卷积、批归一化和 SiLU 激活函数组成。SiLU 激活函数的特点是平滑且具有非饱和性,有利于深层网络的训练。
C2f 模块的核心优势在于:它在几乎不增加参数量的情况下,通过增加特征重用的路径数量,提升了特征的表达能力和梯度传播效率。对于边缘场景下的轻量模型来说,这一点非常关键,因为轻量模型的通道数有限,必须让每一层特征都得到充分利用。
颈部网络负责把骨干网络提取的不同尺度特征进行融合。YOLO 采用路径聚合网络与特征金字塔网络相结合的结构。特征金字塔网络通过自顶向下的路径,把深层的强语义信息传递给浅层特征图,帮助小目标获得更丰富的语义表达。路径聚合网络则增加了一条自底向上的路径,把浅层的强定位信息传递给深层特征图,增强大目标的定位精度。两条路径的特征通过相加或拼接进行融合,最终输出多个尺度的特征图供检测头使用。
在算法层面,颈部网络的关键在于融合路径的设计。自顶向下路径使用上采样和横向连接,自底向上路径使用下采样和横向连接。YOLO 在颈部同样大量使用 C2f 模块,使得融合后的特征得到进一步提炼。这种双向融合让每个尺度的特征图都同时具备高层语义和底层细节,是提升检测精度的关键。
传统 YOLO 的检测头在同一个特征图上同时完成分类和定位两个任务,两者共享卷积参数。现代 YOLO 将检测头解耦:分类分支和回归分支各自拥有独立的卷积层,分别输出类别概率和边界框参数。
解耦设计的动机在于两个任务对特征的需求存在差异。分类任务更关注“是什么”,需要较强的语义特征;定位任务更关注“在哪里”,需要较强的空间细节特征。如果共享参数,两个任务可能会相互干扰,影响各自的学习效果。解耦后,每个分支可以独立学习最适合自身任务的特征变换,从而提升收敛速度和最终精度。对于边缘场景,解耦头虽然略微增加了计算量,但通常能带来可观的精度提升,值得付出这个代价。
YOLO 的回归损失经历了从简单的距离损失到 IoU 系列损失的演变。现代 YOLO 采用 CIoU 损失。CIoU 的设计思路是:不仅考虑预测框与真实框的重叠面积,还考虑两者中心点的距离和长宽比的一致性。如果两个框完全不重叠,单纯的 IoU 无法提供有效的梯度信号,CIoU 通过引入中心点距离和长宽比项,让模型在框不重叠时也能学到正确的回归方向。这样训练出来的模型定位更加准确和稳定。
此外,分布焦点损失被引入用于 anchor-free 回归。它不是直接回归一个确定的位置值,而是让模型输出一个位置的概率分布。训练时,通过扩大真实位置附近两个相邻位置的概率值,让模型快速聚焦到目标位置的邻近区间。这种做法的好处是定位更加精细,能够表达边界的不确定性,在遮挡或边界模糊的场景下表现更好。
分类损失通常采用二值交叉熵。对于每个网格位置和每个类别,模型输出一个独立的概率值,用二值交叉熵来监督。置信度损失衡量预测框包含目标的可信程度,同样使用二值交叉熵。在现代 YOLO 中,置信度的监督信号来自标签分配的结果:被分配为正样本的预测框,其置信度目标为 1;负样本的置信度目标为 0。
训练时如何决定哪些预测框是正样本、哪些是负样本,直接影响模型的收敛质量。传统方法使用静态规则,比如 IoU 超过某个阈值就视为正样本,否则视为负样本。这种静态方法不够灵活,可能错过一些高质量的预测。
现代 YOLO 采用动态标签分配算法,以 TaskAlignedAssigner 为代表。核心思想是:一个好的预测框应该同时具有较高的分类得分和较高的定位质量。算法为每个真实框计算一个对齐度量,这个度量综合考虑分类得分和 IoU,通过加权组合得到。然后对于每个真实框,选择对齐度量最高的若干个预测框作为正样本,其余作为负样本。
这种动态分配方式使训练过程更加关注那些“分类准且定位准”的预测,抑制了低质量预测的干扰。它不依赖固定的阈值,而是根据每个真实框周围的预测质量动态决定正样本数量,提升了训练效率和最终精度。
YOLO 的训练依赖强大的数据增强策略来提升模型的泛化能力。常用的增强方法包括:
多尺度训练在训练过程中随机改变输入图像的分辨率,让模型学习到尺度不变的表示。对于边缘部署来说,这一点很有价值,因为边缘设备可能使用与训练时不同的输入分辨率来适配算力。
混合精度训练利用半精度和单精度的混合进行前向和反向传播。在几乎不损失精度的前提下,它可以加速训练并降低显存占用。更重要的是,经过混合精度训练的模型在部署时更容易迁移到半精度推理,这正好契合边缘设备上常见的 FP16 加速。
边缘设备的算力和内存限制要求 YOLO 模型在算法层面进行针对性压缩和加速。以下算法可以单独或组合使用。
YOLO 系列通过统一的缩放规则生成不同规模的模型。缩放算法同时调整网络的深度(层数)、宽度(通道数)和输入分辨率。深度缩放系数控制骨干和颈部中 C2f 模块的数量,宽度缩放系数控制各层卷积的通道数。三个维度的缩放遵循一定的比例关系,以保持计算量与参数量的均衡增长。
轻量级版本通过大幅缩减深度和宽度,将参数量控制在几百万级别,同时保持可用的检测精度。这种缩放策略本身就是一种算法设计,因为缩放后的网络结构需要重新训练,而且不同维度的缩放系数需要精心选择,以在精度和速度之间找到最佳平衡。
深度可分离卷积将标准卷积分解为两步:第一步是逐通道卷积,对每个输入通道独立应用一个卷积核,不进行通道间的信息混合;第二步是逐点卷积,用 1×1 卷积把逐通道卷积的输出在通道维度上进行混合。标准卷积同时完成空间滤波和通道混合,计算量较大;深度可分离卷积把这两个任务拆开,计算量大幅下降。
具体来说,当输出通道数较多时,深度可分离卷积的计算量大约可以减少到原来的八分之一到九分之一。将 YOLO 骨干中的部分标准卷积替换为深度可分离卷积,可以在精度损失很小的情况下大幅降低计算量,非常适合边缘部署。很多轻量级 YOLO 变体都采用了这种替换策略。
剪枝算法通过移除冗余的权重或神经元来压缩模型。面向边缘硬件的剪枝通常采用结构化剪枝,即删除整个卷积通道或卷积核。这样剪枝后的模型可以直接在标准硬件上加速,不需要特殊的稀疏计算支持。
结构化剪枝的一般流程是:首先评估每个通道或卷积核的重要性,常用的指标包括权重的范数、批归一化层的缩放因子、梯度信息等。然后根据重要性分数和预设的剪枝比例,删除重要性最低的通道。最后对剪枝后的模型进行微调,以恢复精度。
对于 YOLO 的剪枝,通常针对骨干和颈部中的 C2f 模块和卷积层。剪枝比例可达三成到五成,在边缘设备上可以获得显著的推理加速,同时通过微调将精度损失控制在很小的范围内。
量化将浮点型的权重和激活值转换为低精度表示,如半精度、8 位整数甚至更低。量化的好处是减少了内存占用,并且可以利用硬件上的低精度加速单元。
量化算法分为两类。训练后量化不需要重新训练,只需要少量校准数据来统计激活值的范围。这种方法实现简单,但精度损失可能较大。量化感知训练则在训练过程中模拟量化误差,让模型参数适应低精度表示,精度损失更小,但需要重新训练。
对于 YOLO 的 8 位整数量化,通常采用逐通道量化权重和逐张量量化激活。校准过程使用 KL 散度或最小化均方误差来确定量化参数。量化后,模型大小缩小约四倍,推理速度提升明显,精度下降通常在一个百分点以内。半精度量化几乎没有精度损失,适合支持半精度的 GPU 和 NPU。
知识蒸馏利用一个较大的教师模型来指导轻量学生模型的训练。对于 YOLO 的蒸馏,常用的蒸馏位置包括特征图、分类输出和回归输出。特征图蒸馏让学生模型在某些层的特征表示与教师模型对齐;输出蒸馏让学生模型的预测结果接近教师模型的输出。
蒸馏可以提升轻量模型几个百分点的平均精度,尤其在边缘场景标注数据有限时,蒸馏能够有效利用大规模预训练教师模型的知识,让小模型学到更丰富的特征表示。
神经架构搜索通过自动化搜索来设计最优的网络结构。对于边缘场景,搜索算法将推理延迟、参数量或计算量作为约束条件,在搜索空间中寻找精度最高的网络结构。搜索空间可以包括卷积类型、通道数、层数、连接方式等。自动搜索发现的轻量结构往往比人工设计的网络更高效,但搜索过程计算成本较高。
动态推理让模型能够根据输入复杂度或设备状态自适应调整计算量。例如:
这些算法在边缘设备上可以在保证精度的同时降低平均功耗,特别适合负载波动较大的场景。
边缘设备通常使用较低分辨率的输入以节省算力,但这会加剧小目标检测的困难。算法层面的改进包括:在更浅的层增加检测分支,利用高分辨率特征图提升小目标的召回率;使用空洞卷积或注意力机制在不增加太多计算量的前提下扩大感受野;在损失计算中对小目标赋予更高的权重,让训练更加关注小目标。
目标密集时,标准的非极大值抑制可能因为迭代计算量大而成为推理瓶颈。算法层面可以采用更高效的抑制策略,例如 Fast NMS 通过并行化计算减少迭代次数,Matrix NMS 利用矩阵运算一次性完成抑制,Soft-NMS 则通过衰减分数而非硬性剔除来保留更多有效检测。这些改进在不牺牲太多精度的前提下,显著提升了密集场景下的后处理速度。
YOLO 算法以其单阶段回归范式、anchor-free 检测机制、解耦检测头和动态标签分配等设计,在边缘计算场景中展现出独特的优势。面向边缘的轻量化与优化算法,包括模型缩放、深度可分离卷积、结构化剪枝、量化、知识蒸馏和神经架构搜索,进一步拓展了 YOLO 在资源受限设备上的应用边界。通过算法层面的持续改进,YOLO 在精度与速度之间找到了良好的平衡,成为边缘视觉智能的核心算法之一。随着算法与边缘硬件的协同演进,YOLO 目标检测将在更多实时智能系统中发挥不可替代的作用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。