YOLOv3模型原理解析


前言

YOLO v3 通过多尺度检测(利用 FPN 结构在 13×13、26×26、52×52 三个特征图上分别检测大、中、小目标,每个尺度 3 种锚框共 9 种)、更强的 Darknet-53 骨干网络(53 层卷积 + 残差连接)、多标签分类(二元逻辑回归替代 softmax)、灵活输入尺寸(默认 416×416)以及优化的损失函数(边界框回归用 MSE,类别和置信度用二元交叉熵),显著提升了多尺度目标检测能力,在 COCO 数据集上 mAP@0.5 达 57.9%,兼顾精度与实时性(22ms / 帧,30 FPS 以上),成为当时主流的实时目标检测算法。

一、yolo-v3与其他网络的对比

在这里插入图片描述

二、yolo-v3核心机制

1、v3先验框的改进

yolo-v3最大的改进就是网络结构,使其更适合小目标检测特征做的更细致,融入多持续特征图信息来预测不同规格物体与yolo-v2不同的是先验框更加丰富了,同样基于k-means聚类,但针对不同尺度的特征图(13×13、26×26、52×52)分配不同尺寸的锚框,每个尺度分配3种锚框,分别对应大、中、小目标的检测需求,yolo-v2有5个先验框,yolo-v3有9个先验框。
在这里插入图片描述
小的scale感受野更大,所以小scale对应大的特征图,大的scale对应小的特征图,中等的就对应中等的特征图。
在这里插入图片描述
从上图中网格的密集程度就可以观察出谁的感受野更大。

2、scale变换经典方法

图像金字塔;右图是单一的输入
为了应对不同尺寸的网络输入,把图像进行resize,改变分辨率后送入网络,这种显然不适合YOLO速度第一,MAP第二的思想
在这里插入图片描述
在这里插入图片描述
左图是对不同的特征图分别利用;右图是将不同的特征图融合后进行预测。

3、yolo-v3中的残差连接

在 YOLOv3 中,残差连接(Residual Connection)是一个核心设计,它通过跳跃连接(Skip Connection)将网络的输入直接添加到后续层的输出中。这种设计主要解决了深度神经网络中的梯度消失 / 爆炸和退化问题,并显著提升了模型的性能。

  • 解决梯度消失 / 爆炸问题在深度神经网络中,梯度在反向传播过程中会逐层传递和累积。当网络层数极深时,梯度可能变得极小(梯度消失)或极大(梯度爆炸),导致模型无法训练。残差连接的作用:通过直接连接输入和输出,梯度可以直接从后向前流动,形成 “短路” 路径,避免梯度在多层传递中衰减或爆炸。

  • 缓解退化问题退化问题:实验发现,当网络层数增加时,准确率可能先上升后饱和,甚至急剧下降。这并非由于过拟合,而是因为更深的网络难以学习到恒等映射(即 H(x) = x)。残差连接的优势:残差块可以轻松学习到恒等映射(只需将 F(x) 的权重参数趋近于 0,即 (F(x) 约等于 0),输出 (y近似于 x),从而保证网络性能不会因深度增加而退化。

  • 提升特征复用能力YOLOv3 的主要任务是目标检测,需要同时捕获图像的低级特征(如边缘、纹理)和高级语义特征(如物体类别)。残差连接的作用:通过跳跃连接,早期层提取的低级特征可以直接传递到后续层,与高级特征融合,帮助网络更好地定位和识别不同大小的物体。

  • 加速模型收敛残差网络通常比传统网络收敛更快,因为残差映射比直接学习完整映射更容易优化。在 YOLO-v3 中,更快的收敛意味着可以在更短的时间内训练出高性能模型。
    在这里插入图片描述
    残差连接是为了找到更好的特征,V3中也使用到了resnet残差的思想,堆叠更多的层进行特征提取。

4、核心网络架构

在这里插入图片描述
在这里插入图片描述

5、从输入映射到输出

9种尺度的先验框
YOLO3延续了K-means聚类得到先验框的尺寸方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
分配上,在最小的13x13特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的2626特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的5252特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。

在这里插入图片描述

6、先验框的设计

在这里插入图片描述
YOLO3延续了K-means聚类得到先验框的尺寸方法,为每种下采样尺度设定3种先验框,总共聚类出9种尺寸的先验框。在COCO数据集这9个先验框是:(10x13),(16x30),(33x23),(30x61),(62x45),(59x119),(116x90),(156x198),(373x326)。
分配上,在最小的1313特征图上(有最大的感受野)应用较大的先验框(116x90),(156x198),(373x326),适合检测较大的对象。中等的2626特征图上(中等感受野)应用中等的先验框(30x61),(62x45),(59x119),适合检测中等大小的对象。较大的52*52特征图上(较小的感受野)应用较小的先验框(10x13),(16x30),(33x23),适合检测较小的对象。
大的先验框在感受野大的特征图中检测.
COCO数据集的介绍:https://blog.csdn.net/qq_44554428/article/details/122597358
在这里插入图片描述

7、Logistic分类器

YOLOv3用多个独立的Logistic分类器替代了传统目标检测模型中常用的Softmax分类层。
Softmax函数将神经网络的输出转换为概率分布,所有类别的概率之和为1。然而,Softmax函数的是每个样本只属于一个类别。但在更复杂的目标检测场景中,一个物体可能同时属于多个类别,例如一个人可能同时被标记为“人”和“行人”。这种情况下,Softmax函数就不再适用,因为它会强制每个样本只属于一个类别。
在这里插入图片描述
在Logistic分类器(逻辑回归)中,每个类别的预测是独立进行的。对于输入样本,分类器会为每个类别计算一个概率值,表示该样本属于该类别的可能性。

Logistic分类器通常使用Sigmoid函数(也称为Logistic函数)作为激活函数。Sigmoid函数将神经网络的输出映射到(0, 1)区间,表示样本属于某个类别的概率。Sigmoid函数的数学表达式为如下图,其中,z是神经网络的原始输出。
在这里插入图片描述
假设有一个图像分类任务,需要识别图像中是否包含“猫”、“狗”和“鸟”三种动物。使用Logistic分类器时,模型会为每个类别(猫、狗、鸟)分别计算一个概率值。例如:

  • 图像A:猫的概率=0.8,狗的概率=0.3,鸟的概率=0.1
  • 图像B:猫的概率=0.2,狗的概率=0.7,鸟的概率=0.6
    设定阈值为0.5,则:
  • 图像A会被标记为“猫”(因为猫的概率>0.5),而不会被标记为“狗”或“鸟”(因为它们的概率<0.5)。
  • 图像B会被标记为“狗”和“鸟”(因为它们的概率都>0.5),而不会被标记为“猫”(因为猫的概率<0.5)。

总结

YOLOv3通过Darknet-53主干网络、多尺度特征融合和高效的检测头设计,在保持实时性的同时大幅提升了检测精度。其实现流程可概括为:输入处理 → 2. 特征提取 → 3. 多尺度融合 → 4. 预测输出 → 5. 后处理。该架构在目标检测任务中兼顾速度与精度,至今仍是工业界和学术界的经典基准模型。

### YOLOv5 模型架构和工作原理详解 #### ### 一、YOLOv5模型概述 YOLOv5 是一种实时目标检测算法,继承并优化了YOLO系列的优点,在速度与精度之间取得了良好的平衡[^1]。 #### ### 二、YOLOv5网络结构组成 YOLOv5的网络结构主要由三部分构成:Backbone(骨干网),Neck(颈部), 和Head(头部)[^3]。 - **Backbone** Backbone采用的是CSPDarknet53变体。这种设计不仅减少了计算量还增强了特征提取能力。具体而言,它利用跨阶段局部网络(Cross Stage Partial Network, CSP) 结构来减少计算冗余,从而提升训练效率和推理速度。 - **Neck** Neck 部分采用了路径聚合网络(Path Aggregation Network, PAN) 来融合多尺度特征图。PAN能够有效地捕捉不同层次的空间信息,使得小物体检测更加精准。 - **Head** Head 负责最终预测边界框的位置以及类别概率分布。对于每个预定义的锚点(anchor box),都会输出三个维度的信息——位置偏移(offsets of location)、宽高比例(scale factors) 及分类得分(class scores)。 #### ### 三、YOLOv5工作流程解析 当输入图像进入YOLOv5后,会依次经过上述提到的各个模块处理: 1. 输入图片先被送入Backbone进行初步卷积运算得到多个分辨率下的特征映射; 2. 这些特征映射再传递给Neck中的PANet做进一步加工整合; 3. 经过加强后的特征会被送到Heads处完成最后的目标定位与识别任务;整个过程中使用到了诸如Mish激活函数这样的组件来改善梯度传播状况,并借助Focal Loss解决样本不平衡问题。 ```python import torch from models.experimental import attempt_load device = &#39;cuda&#39; if torch.cuda.is_available() else &#39;cpu&#39; model = attempt_load(&#39;yolov5s.pt&#39;, map_location=device) # 加载模型权重文件 imgsz = 640 # 图像尺寸调整参数 conf_thres = 0.25 # 置信度阈值设定 iou_thres = 0.45 # IOU交并比阈值设定 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值