编辑
2026-05-14
学习
00

目录

IoU 与 YOLO 算法原理详解
目录
IoU (Intersection over Union) 交并比
定义
直观理解
IoU 值含义
为什么 IoU=0.5 是常用阈值?
YOLO 算法原理
核心思想:"You Only Look Once"
YOLO 工作流程
步骤 1:网格划分 (Grid Division)
步骤 2:每个格子预测 (Per-Cell Prediction)
步骤 3:网络输出
步骤 4:网络架构
YOLO 的损失函数
后处理:NMS (非极大值抑制)
IoU 在 YOLO 中的应用
1. 训练时:判断正负样本
2. 推理时:NMS 去重
3. 评估时:计算 mAP
YOLO 版本演进
总结
IoU 是什么?
YOLO 怎么做检测?
两者的关系
参考资源

📊 训练结果分析 三个指标含义

image.png

txt标注文件格式

class_id x_center y_center width height

示例:1 0.3667 0.5 0.2067 1.0

  • 1 = 类别1(裂缝类型)
  • 0.3667 = 目标中心X坐标(归一化0-1,相对于图片宽度)
  • 0.5 = 目标中心Y坐标(归一化0-1,相对于图片高度)
  • 0.2067 = 目标框宽度(归一化)
  • 1.0 = 目标框高度(归一化)

IoU 与 YOLO 算法原理详解

目录

  1. IoU (Intersection over Union)
  2. YOLO 算法原理
  3. IoU 在 YOLO 中的应用

IoU (Intersection over Union) 交并比

定义

IoU 是衡量预测框真实框重叠程度的指标:

交集面积 (Intersection) IoU = ───────────────────────────── 并集面积 (Union)

直观理解

想象两个矩形框:预测框是模型猜的位置,真实框是标注的正确位置。

真实框 (Ground Truth) 预测框 (Prediction) ┌──────────┐ ┌──────────┐ │ │ 交集区域 │ │ │ ┌─────┼─────────┐ │ │ │ │ │ │ │ │ │ │ ██████ │ │ │ ← 重叠部分(交集) │ │ ██████ │ │ │ │ └─────┼─────────┘ │ │ │ │ │ │ └──────────┘ └──────────┘ IoU = 黑色区域面积 / (两个框总面积 - 黑色区域面积)

IoU 值含义

IoU 值含义检测质量
1.0完全重合完美检测
0.770% 重叠优秀
0.550% 重叠一般(常用阈值)
0.330% 重叠较差
0无重叠完全错误

为什么 IoU=0.5 是常用阈值?

  • 平衡性:既要求预测框大致正确,又允许一定误差
  • 工程实践:人工标注也有误差,不能太严格
  • COCO 标准:目标检测竞赛常用 0.5 作为判断正例的阈值

YOLO 算法原理

核心思想:"You Only Look Once"

传统目标检测(如 R-CNN):

图片 → 生成候选框 → 对每个框分类 → 结果 [两步流程,慢]

YOLO:

图片 → 神经网络一次性预测所有目标 → 结果 [一步完成,快]

关键创新:把目标检测当作回归问题,直接从图片像素预测边界框坐标和类别概率。


YOLO 工作流程

步骤 1:网格划分 (Grid Division)

将输入图片划分为 S × S 的网格(如 7×7):

┌──┬──┬──┬──┬──┬──┬──┐ │ │ │ │ │ │ │ │ ├──┼──┼──┼──┼──┼──┼──┤ │ │ │🐶│ │ │ │ │ ← 狗的中心落在这个格子 ├──┼──┼──┼──┼──┼──┼──┤ │ │ │ │ │ │ │ │ ├──┼──┼──┼──┼──┼──┼──┤ │ │ │ │🚗│ │ │ │ ← 车的中心落在这个格子 ├──┼──┼──┼──┼──┼──┼──┤ │ │ │ │ │ │ │ │ └──┴──┴──┴──┴──┴──┴──┘

规则:物体的中心落在哪个格子,那个格子就负责检测这个物体。


步骤 2:每个格子预测 (Per-Cell Prediction)

每个格子预测 B 个边界框,每个框包含:

参数说明范围
x, y框中心相对于格子左上角的偏移0~1
w, h框的宽度和高度(相对于整图)0~1
confidence置信度(该框包含物体的概率 × IoU)0~1
C₁, C₂, ... Cₙ各类别的概率0~1
单个格子输出向量: ┌─────────────────────────────────────────────────┐ │ [x₁, y₁, w₁, h₁, conf₁, x₂, y₂, w₂, h₂, conf₂, │ ← 两个框(B=2) │ P(cat), P(dog), P(car), ... ] │ ← 类别概率 └─────────────────────────────────────────────────┘

步骤 3:网络输出

最终输出是一个 3D 张量

输出尺寸 = S × S × (B × 5 + C) S: 网格大小(如 7) B: 每个格子预测的框数(如 2) 5: x, y, w, h, confidence C: 类别数(如 4,对应你的裂缝数据集) 示例:7 × 7 × (2×5 + 4) = 7 × 7 × 14 = 686 个数值

步骤 4:网络架构

输入图片 (640×640×3) ↓ ┌─────────────────┐ │ 主干网络 (Backbone) │ ← 提取特征(卷积层) │ 如 CSPDarknet53 │ └─────────────────┘ ↓ 特征图 ↓ ┌─────────────────┐ │ 特征融合 (FPN/PAN) │ ← 多尺度特征融合 │ 检测不同大小目标 │ └─────────────────┘ ↓ ┌─────────────────┐ │ 检测头 (Detection Head) │ ← 预测框和类别 └─────────────────┘ ↓ 输出 (S×S×(B×5+C))

YOLO 的损失函数

训练时需要同时优化三个部分:

总损失 = λ₁ × 坐标损失 (MSE of x, y, w, h) + λ₂ × 置信度损失 (BCE of confidence) + λ₃ × 分类损失 (BCE of class probabilities)
损失类型作用计算公式
坐标损失让预测框位置更准确(x_pred - x_true)² + (y_pred - y_true)² + (√w_pred - √w_true)² + (√h_pred - √h_true)²
置信度损失让模型学会判断有无物体二值交叉熵
分类损失让模型学会识别物体类别多类别交叉熵

后处理:NMS (非极大值抑制)

问题:多个格子可能预测同一个物体,产生重叠框。

解决步骤

1. 过滤低置信度的框(如 confidence < 0.25) 2. 按置信度从高到低排序 3. 选置信度最高的框,加入结果 4. 计算该框与其他所有框的 IoU 5. 去掉 IoU > 阈值(如 0.5)的框(认为是同一个物体) 6. 重复 3-5 直到没有框

示例

初始预测: NMS后: ┌───┐┌───┐ ┌───┐ │ 1 ││ 2 │ │ 1 │ ← 保留最高置信度 │0.9││0.7│ │0.9│ └───┘└───┘ └───┘ ↓↓↓ IoU=0.8 去掉框2(重叠太多)

IoU 在 YOLO 中的应用

1. 训练时:判断正负样本

对于每个预测框: - 计算与所有真实框的 IoU - 取最大 IoU - 如果 Max(IoU) > 阈值(0.5):正样本,参与坐标和分类学习 - 如果 Max(IoU) < 阈值:负样本,只学习置信度(置信度→0)

2. 推理时:NMS 去重

高 IoU 的框认为是同一个物体,只保留置信度最高的。

3. 评估时:计算 mAP

mAP50:IoU 阈值设为 0.5 时的平均精度 mAP50-95:IoU 阈值从 0.5 到 0.95 的平均精度(更严格)

YOLO 版本演进

版本年份主要改进
YOLOv12016开创性,首次提出单阶段检测
YOLOv22017引入 Anchor Boxes,Batch Normalization
YOLOv32018多尺度预测(3个尺度),Darknet-53
YOLOv42020大量优化技巧(Mish激活、CIOU等)
YOLOv52020PyTorch实现,工程友好,Ultralytics
YOLOv82023Anchor-free设计,解耦头,C2f模块
YOLOv102024端到端检测,去除NMS,实时性更强
YOLO262025最新架构,你的训练模型

总结

IoU 是什么?

  • 衡量两个框重叠程度的指标
  • 范围 0~1,1 表示完全重合
  • 常用阈值 0.5 判断检测是否正确

YOLO 怎么做检测?

  1. 把图片切成网格
  2. 每个格子预测多个框(位置+置信度+类别)
  3. 神经网络一次性输出所有预测
  4. 用 NMS 去除重复框
  5. 得到最终结果

两者的关系

  • IoU 是 YOLO 的"评分标准":判断预测好坏
  • YOLO 是"考生":不断调整使 IoU 越来越高

参考资源


文档创建时间:2026-05-14 基于 YOLO26 训练日志分析

本文作者:Deshill

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!