YOLOv1 是目标检测领域中具有划时代意义的算法之一,它将检测任务统一为一个回归问题,实现了“You Only Look Once”的端到端实时检测。其中,正负样本的划分机制 和 置信度(confidence)的设计 是理解其训练流程的关键。
本文将从以下两个方面深入解析:
在进入正题之前,先简单回顾一下 YOLOv1 的输出结构:
S × S × (B×5 + C)
其中:
S
:网格数量(通常为 7)B
:每个网格预测的边界框数量(通常为 2)5
:每个 bounding box 包含的信息:x, y, w, h, confidence
C
:类别数量(如 PASCAL VOC 为 20)在训练过程中,YOLOv1 并不是对所有预测框都进行监督学习,而是根据真实框的位置来选择哪些预测框是负责预测该物体的。
确定真实框中心所在的 grid cell
在该 grid cell 的 B 个预测框中找出 IoU 最高的那个
其他预测框如何处理?
负样本定义
置信度是 YOLOv1 中非常重要的一个概念,它不仅表示预测框是否包含物体,还结合了预测框与真实框之间的重叠程度(IoU)。
confidence = P ( object ) × IoU pred,truth \text{confidence} = P(\text{object}) \times \text{IoU}_{\text{pred,truth}} confidence=P(object)×IoUpred,truth
其中:
场景 | 置信度含义 |
---|---|
正样本 | 表示预测框准确地定位到了物体,并且 IoU 较高 |
负样本 | 应该趋近于 0,表示“这里没有物体” |
误检区域 | 置信度应低,避免误报 |
在损失函数中,置信度部分的损失分为两部分:
公式如下:
L confidence = ∑ i = 0 S 2 ∑ j = 0 B [ 1 i j obj ⋅ ( conf i j − conf ^ i j ) 2 + λ noobj ⋅ ( 1 − 1 i j obj ) ⋅ ( conf i j ) 2 ] \mathcal{L}_{\text{confidence}} = \sum_{i=0}^{S^2} \sum_{j=0}^{B} \left[ \mathbb{1}_{ij}^{\text{obj}} \cdot \left(\text{conf}_i^j - \hat{\text{conf}}_i^j \right)^2 + \lambda_{\text{noobj}} \cdot \left(1 - \mathbb{1}_{ij}^{\text{obj}} \right) \cdot \left(\text{conf}_i^j \right)^2 \right] Lconfidence=i=0∑S2j=0∑B[1ijobj⋅(confij−conf^ij)2+λnoobj⋅(1−1ijobj)⋅(confij)2]
其中 λ noobj \lambda_{\text{noobj}} λnoobj 是一个较小的权重系数(一般设为 0.5),用于降低负样本的影响。
for each ground_truth_box in ground_truth_boxes:
# Step 1: 找到对应 grid cell
grid_x, grid_y = get_grid_cell(image_size, S, ground_truth_box.center)
# Step 2: 在该 grid cell 的 B 个预测框中计算 IoU
ious = [iou(pred_box, ground_truth_box) for pred_box in predicted_boxes[grid_x][grid_y]]
# Step 3: 选取 IoU 最大的预测框作为正样本
best_idx = np.argmax(ious)
positive_boxes.append(predicted_boxes[grid_x][grid_y][best_idx])
# Step 4: 其余预测框判断是否也为正样本(IoU > threshold)
for j in range(B):
if j != best_idx and ious[j] > iou_threshold:
positive_boxes.append(predicted_boxes[grid_x][grid_y][j])
else:
negative_boxes.append(predicted_boxes[grid_x][grid_y][j])
模块 | 内容 |
---|---|
正样本划分 | 每个真实框只分配给一个 grid cell,该 cell 中 IoU 最高的预测框作为正样本 |
负样本划分 | 不包含物体的预测框作为负样本,仅参与置信度损失 |
置信度设计 | P ( object ) × IoU P(\text{object}) \times \text{IoU} P(object)×IoU,衡量预测框的准确性和置信程度 |
置信度作用 | 控制模型是否相信某个预测框含有物体,影响最终检测结果 |
YOLOv1 通过统一建模的方式,首次实现了端到端的目标检测流程。其中,正负样本的划分机制 和 置信度的设计 是其训练稳定性和检测精度的重要保障。
虽然后续版本(如 YOLOv2、YOLOv3、YOLOX)对此进行了优化,但理解 YOLOv1 的这些核心机制,有助于我们更好地掌握现代目标检测框架的发展脉络。
欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于计算机视觉、目标检测、深度学习、YOLO系列等内容!
下期预告:
《YOLOv2 技术详解:引入 Anchor Boxes 与多尺度预测》
敬请期待!