在目标检测领域,传统方法如 R-CNN 系列虽然精度高,但存在速度慢、流程复杂的问题。直到 2016 年,Joseph Redmon 等人提出 YOLO(You Only Look Once)算法,将目标检测问题转化为一个统一的回归任务,实现了端到端的单阶段实时检测,成为目标检测领域的里程碑之作。
本文将深入解析 YOLOv1 的核心思想、网络结构、预测机制和损失函数设计,帮助你从零理解这一经典模型的工作原理。
不同于传统的两阶段方法(如 Faster R-CNN),YOLO 将整个图像划分为 S × S 的网格单元(grid cell),每个单元格负责预测多个边界框(bounding box)及其类别概率。
每个 bounding box 包含 5 个参数:
类别概率:C 个类别的条件概率 P(class | object)
YOLOv1 使用了一个轻量级的卷积神经网络架构,灵感来源于 GoogLeNet。
层类型 | 输出大小 | 参数说明 |
---|---|---|
Conv + LeakyReLU | 7×7×1024 | 多层卷积提取特征 |
Max Pooling | - | 下采样操作 |
Fully Connected Layers | 7×7×30 | 最终输出层 |
Input: 448x448x3
Conv layers: 提取图像特征
Output: 7x7x1024
Flatten and FC layers:
Output: 7x7x30 → (7,7,30)
其中 30 = 2×5(两个 bbox)+ 20(类别数)
对于每个 bounding box:
中心坐标:
x = ( x cell + σ ( t x ) ) / S y = ( y cell + σ ( t y ) ) / S x = (x_{\text{cell}} + \sigma(t_x)) / S \\ y = (y_{\text{cell}} + \sigma(t_y)) / S x=(xcell+σ(tx))/Sy=(ycell+σ(ty))/S
宽高计算:
w = p w e t w , h = p h e t h w = p_w e^{t_w}, \quad h = p_h e^{t_h} w=pwetw,h=pheth
(其中 p w , p h p_w, p_h pw,ph 是预设的 anchor 宽高)
YOLOv1 的损失函数分为三个部分:
λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 + ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B}\mathbb{1}_{ij}^{\text{obj}}\left[(x_i - \hat{x}_i)^2 +(y_i - \hat{y}_i)^2 +(\sqrt{w_i} - \sqrt{\hat{w}_i})^2 +(\sqrt{h_i} - \sqrt{\hat{h}_i})^2\right] λcoordi=0∑S2j=0∑B1ijobj[(xi−x^i)2+(yi−y^i)2+(wi−w^i)2+(hi−h^i)2]
− ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj log ( C i ) − ∑ i = 0 S 2 ( 1 − 1 i obj ) log ( 1 − C i ) - \sum_{i=0}^{S^2} \sum_{j=0}^{B}\mathbb{1}_{ij}^{\text{obj}} \log(C_i) - \sum_{i=0}^{S^2} (1 - \mathbb{1}_{i}^{\text{obj}}) \log(1 - C_i) −i=0∑S2j=0∑B1ijobjlog(Ci)−i=0∑S2(1−1iobj)log(1−Ci)
λ cls ∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 \lambda_{\text{cls}} \sum_{i=0}^{S^2}\mathbb{1}_{i}^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 λclsi=0∑S21iobjc∈classes∑(pi(c)−p^i(c))2
公式中的关键参数:
三部分损失通过加权求和合并为总损失: L total = α ⋅ L loc + β ⋅ L conf + γ ⋅ L cls L_{\text{total}} = \alpha \cdot L_{\text{loc}} + \beta \cdot L_{\text{conf}} + \gamma \cdot L_{\text{cls}} Ltotal=α⋅Lloc+β⋅Lconf+γ⋅Lcls 权重系数 α \alpha α、 β \beta β、 γ \gamma γ需根据任务需求调整。
YOLOv1 的出现标志着目标检测进入了一个全新的时代 —— “端到端、单阶段、实时检测”。尽管它在精度上不如当时的两阶段方法,但其简洁高效的结构理念影响深远,也为后续版本的发展奠定了基础。
作为初学者,掌握 YOLOv1 的基本原理有助于理解现代目标检测框架的设计思路。
欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于计算机视觉、目标检测、深度学习、YOLO系列等内容!
下期预告:
《YOLOv2 技术详解:引入 Anchor Boxes 与多尺度预测》