YOLO v1#

算法流程#

  1. 将图像分成 S×SS \times S 个网格 (Grid Cell) ,每个网格负责预测中心位置落在该网格中的目标。
  2. 每个网格包含 BB 个边界框 (Bounding Box, bbox) ,每个边界框框包含 CC 个类别的分数、1个置信度 (Confidence)。 YOLOv1 网络结构

损失函数#

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]}Bounding Box Loss+i=0S2j=0B1ijobj(CiC^i)2Confidence Loss+λnoobji=0S2j=0B1ijnoobj(CiC^i)2}Confidence Loss+i=0S21iobjcclasses(pi(c)p^i(c))2}Classification Loss\begin{aligned} &\left. \begin{aligned} &\lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{ij}^{obj}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] \\ +&\lambda_{coord}\sum_{i=0}^{S^2}\sum_{j=0}^B\mathbb{1}_{ij}^{obj}\left[\left(\sqrt{w_i}-\sqrt{\hat{w}_i}\right)^2+\left(\sqrt{h_i}-\sqrt{\hat{h}_i}\right)^2\right] \end{aligned} \right\} &\text{Bounding Box Loss} \\ &\left. \begin{aligned} +&\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{ij}^{obj}\left(C_{i}-\hat{C}_{i}\right)^{2} &\text{Confidence Loss} \\ +&\lambda_{noobj}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}\mathbb{1}_{ij}^{noobj}\left(C_{i}-\hat{C}_{i}\right)^{2} \end{aligned} \right\} &\text{Confidence Loss} \\ &\left. +\sum_{i=0}^{S^{2}}1_{i}^{obj}\sum_{c\in{classes}}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} \right\} &\text{Classification Loss} \end{aligned}

YOLO v2#

主要改进#

  1. 批量归一化 (Batch Normalization)。引入批量归一化能明显改善模型的收敛性,在不过拟合的情况下可以去除 Dropout 。
  2. 更高分辨率的分类器。大多检测方法都使用在ImageNet上预先训练的分类器作为预训练模型,而这些模型的输入尺寸为 224x224。V2 中,将分类器的输入尺寸调至 448x448,从而获得更高分辨率的分类结果。
  3. 使用锚框 (Anchor Boxes) 。在 CNN 提取的特征图 (feature map) 上生成一组先验框,这些先验框的尺寸和位置都是预先定义的,在训练过程中,通过计算锚框和真实标注框的 IOU 来判断要预测的物体,通过预测偏移量微调锚框的位置和大小。
  4. K-means 聚类确定 Anchor 初始值。在训练集的边界框上运行K-means聚类训练bounding boxes,可以自动找到更好的boxes宽高维度。
  5. 直接的位置预测。不预测锚框的偏移量,而是使用 Sigmoid 函数来预测相对于网格位置的坐标,限制了坐标的预测范围在当前网格内。
  6. 细粒度特征 (Fine-Grained Features)直通层通过将相邻的特征堆叠到不同的通道而非空间位置,从而将低分辨率和高分辨率的特征进行连接,这样操作能够获得细粒度特征,对小尺寸的目标有更好的检测结果。 直通层
  7. 多尺度预测 (Multi-Scale Prediction)。该模型只使用了卷积和池化层,所以可以动态调整输入大小。每隔几次迭代就改变网络,从而提高模型的泛化性。

网络结构#

YOLOv2的基础是一个新的模型 Darknet-19 ,其结构如图: Darknet-19 网络结构

其中,Convolutional 层由卷积层、批量归一化、LeakyRelu 激活函数组成。 Convolutional层

YOLO9000#

YOLO9000 的主要检测网络也是 YOLO v2,但其同时使用 WordTree 混合不同资源的数据集进行训练,能实时地检测超过9000种物体。

YOLO v3 SSP#

算法流程#

YOLO v3 使用了Darknet-53 作为基础网络,其使用了更多的卷积层,引入了残差连接,并去掉了中间的池化层。 Darknet-53

YOLO v3 利用三个不同尺寸的特征图来预测不同尺寸的目标。 三阶段预测

在使用 SSP 结构后的YOLO v3 网络结构如下: YOLOv3 网络结构

SPP结构#

SPP(Spatial Pyramid Pooling) ,是 YOLO v3 中使用的一种结构,它可以将特征图进行不同尺寸的 池化 ,并生成多个特征图,从而获得更 Fine-Grained 的特征。 SSP结构

损失函数#

在目标检测中,L2 Loss不能很好的计算出目标框实际的好坏。在下图中,L2 Loss的结果相同,但是IOU相差很大。 不同检测框损失函数对比

为了更好的衡量实际检测的IOU,引入IOU Loss:

LIoU=lnlntersectionUnionL_{IoU} = -\ln\frac{lntersection}{Union}

但是IOU Loss在预测框和真实框相差较大时,始终等于0,梯度为0, 无法进行梯度下降。 为解决这一问题引入了GIoU(Generalized IOU) Loss。

GIoU=IoUAcuAc1GIoU1LGIoU=1GIoU0LGIoU2\begin{aligned} GIoU &= IoU-\frac{A^c-u}{A^c} &-1 \leq GIoU \leq 1 \\ L_{GIoU} &= 1 - GIoU &0 \leq L_{GIoU} \leq 2 \end{aligned}

GIoU也存在一些不足,如下图: GIoU和IoU的不足 IoU和GIoU并不能判断出上面不同检测结果的好坏,实际上,这些方法的收敛速度也较慢。

通过引入 DIoU (Distance IOU) 和 CIoU (Complete IOU) 来解决上述问题。

Distance IOU Loss:

Complete IOU Loss:

Focal Loss:

参考资料#

  1. You Only Look Once: Unified, Real-Time Object Detection
  2. YOLO9000: Better, Faster, Stronger
  3. YOLO系列理论合集
  4. YOLOv2论文超详细解读
YOLO
https://blog.rinne05.top/blog/research/yolo-v123/
作者
发布于
9/27/2025
许可协议
CC BY-NC-SA 4.0

主题设置

主题模式
主题色
透明度
模糊
© 2025 霖,采用 CC BY-NC-SA 4.0 许可
ICP备案号: 豫ICP备2025156598号-1
输入以搜索...
通过 Fuse.js 搜索