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}^