YOLO V1 V2算法总结

1.YOLO(You Only Look Once)v1算法是一个单阶段目标检测模型

它的关键思想是将目标检测问题转化为回归问题,通过一次前向传递同时预测多个边界框和类别概率。

1.1. 网络结构

YOLO v1使用一个单一的卷积神经网络(CNN)来同时预测多个边界框和这些框内的类别概率。网络的输入是一个固定大小的图像(例如448x448),输出是一个SxSx(B*5 + C)的张量,其中:

  • SxS 是将输入图像划分成的网格单元数(通常为7x7)。
  • B 是每个网格单元预测的边界框数量(通常为2)。
  • 5 表示每个边界框的5个参数(x, y, w, h, confidence)。
  • C 是类别的数量。

1.2. 网格划分

YOLO v1将输入图像划分为一个SxS的网格,每个网格单元负责检测该单元内的对象。每个网格单元预测B个边界框和这些框的置信度(confidence),以及C个类别概率。

1.3. 预测

每个边界框预测5个参数:

  • (x) 和 (y):边界框中心相对于网格单元的位置。
  • (w) 和 (h):边界框的宽度和高度,相对于整个图像的归一化值。
  • 置信度(confidence):边界框包含对象的置信度分数,计算方式为:
    confidence = P ( object ) × IOU ( pred , truth ) \text{confidence} = P(\text{object}) \times \text{IOU}(\text{pred}, \text{truth}) confidence=P(object)×IOU(pred,truth)
    其中, P ( object ) P(\text{object}) P(object)表示该网格单元内存在对象的概率, IOU ( pred , truth ) \text{IOU}(\text{pred}, \text{truth}) IOU(pred,truth)是预测边界框和真实边界框之间的交并比。

1.4. 损失函数

YOLO v1的损失函数包括三个部分:

  • 边界框位置误差(x, y, w, h)的平方差。
  • 边界框置信度误差(confidence)的平方差。
  • 分类误差(类别概率)的平方差。

公式如下:
Loss = λ 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 ] + ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj ( C i − C ^ i ) 2 + λ noobj ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 \text{Loss} = \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 + (w_i - \hat{w}_i)^2 + (h_i - \hat{h}_i)^2 \right] + \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2 + \lambda_{\text{noobj}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbf{1}_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2 + \sum_{i=0}^{S^2} \mathbf{1}_{i}^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 Loss=λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2+(wiw^i)2+(hih^i)2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2
其中:

  • λ coord \lambda_{\text{coord}} λcoord λ noobj \lambda_{\text{noobj}} λnoobj是用于平衡损失项的权重(通常 λ coord = 5 \lambda_{\text{coord}} = 5 λcoord=5 λ noobj = 0.5 \lambda_{\text{noobj}} = 0.5 λnoobj=0.5)。
  • 1 i j obj \mathbf{1}_{ij}^{\text{obj}} 1ijobj 1 i j noobj \mathbf{1}_{ij}^{\text{noobj}} 1ijnoobj是指示变量,表示网格单元是否包含对象。

1.5. 非极大值抑制(NMS)

为了减少重叠的边界框,YOLO v1使用非极大值抑制(NMS)来抑制低置信度的预测。具体步骤是:

  1. 根据置信度分数对所有预测的边界框进行排序。
  2. 从最高置信度开始,选择该框并删除所有与其重叠度(IOU)超过阈值的其他框。

1.6 总结

YOLO v1通过将目标检测问题转化为回归问题,实现了实时的目标检测速度。它通过一个单一的卷积神经网络一次性预测多个边界框和类别概率,大大简化了检测过程,适用于需要高效实时检测的场景。尽管YOLO v1在定位精度上稍逊色于一些多阶段检测器,但它的速度和简洁性使其成为许多实际应用中的首选。

2. YOLO v2(You Only Look Once v2)通过以下具体方法实现了改进:

2.1. 更高分辨率的输入图像

YOLO v2 支持多种输入图像分辨率(如 416x416),通过多尺度训练使模型在不同分辨率下均能有效工作。具体方法是,在训练过程中每隔几次迭代随机调整输入图像的尺寸。

2.2. 批量归一化

在每个卷积层后添加批量归一化层。这不仅有助于正则化模型,防止过拟合,还加速了模型收敛,提高了训练速度和稳定性。

2.3. 高效的网络结构

YOLO v2 使用了 Darknet-19 作为基础网络。Darknet-19 是一个包含 19 个卷积层和 5 个池化层的深层网络,比 YOLO v1 的网络更深,特征提取能力更强。同时采用了 1x1 卷积减少特征图的维度,降低计算成本。

2.4. 更好的锚点机制

引入了先验框(Anchors),通过在训练前对数据集中的边界框进行 k-means 聚类分析,确定一组适合该数据集的锚点框。这些锚点框在预测时用作参考,模型预测的是相对于这些锚点框的偏移量。

2.5. 直接位置预测

YOLO v2 通过 logistic 回归预测边界框中心坐标,确保预测的中心点位于所属的网格单元内。此外,预测的是边界框的宽度和高度的对数值,有助于更稳定的训练。

2.6. 多尺度训练

在训练过程中,YOLO v2 每隔一定次数迭代随机改变输入图像的尺寸,使得模型在不同大小的图像下都能适应,增强了模型的鲁棒性。这种训练方式使得模型在推理时也能处理不同尺寸的图像。

2.7 总结

YOLO v2 通过网络结构优化、批量归一化、锚点机制、直接位置预测和多尺度训练等方法,在保持实时检测速度的同时显著提升了检测精度和鲁棒性。上述改进使得 YOLO v2 在实际应用中更加高效和实用。

3.YOLO v3(You Only Look Once v3)相对于YOLO v2进行了多方面的改进

3.1. 改进的网络结构

YOLO v3 使用了称为Darknet-53的网络结构,它比Darknet-19更深,更强大。Darknet-53包含53个卷积层,并广泛使用了残差块(Residual Blocks),这有助于缓解深层网络的梯度消失问题,并提升特征提取能力。

3.2. 多尺度预测

YOLO v3 在三个不同的尺度上进行预测,每个尺度对应于不同的特征层。这种方法使得模型能够更好地检测不同大小的目标。

3.3. 改进的锚点框

YOLO v3 使用9个锚点框,分别分配给3个不同的尺度层。每个尺度层都有自己的3个锚点框,这样能够更好地捕捉不同大小的目标。

实现方法

anchors = [
    # 3 anchors for each scale
    [(10, 13), (16, 30), (33, 23)],  # Scale 1
    [(30, 61), (62, 45), (59, 119)], # Scale 2
    [(116, 90), (156, 198), (373, 326)] # Scale 3
]

3.4. 改进的损失函数

YOLO v3 在损失函数中使用了二元交叉熵损失来处理类预测,并在边界框回归损失中考虑了IOU(Intersection over Union),使得训练更加稳定。

3.5. 更高的分类能力

YOLO v3 支持多达80个类别的分类预测,使用了softmax层来输出每个类别的概率。

3.6总结

YOLO v3 通过改进网络结构、使用多尺度预测、优化锚点框、改进损失函数和增强分类能力等方面的改进,在保持实时检测速度的同时显著提升了检测精度和鲁棒性。这些改进使得YOLO v3在实际应用中更为高效和实用。

  • 18
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值