1.什么是 YOLO?
YOLO(You Only Look Once) 是一种 实时目标检测(Object Detection) 算法,由 Joseph Redmon 在 2016 年提出。
它采用单阶段检测(Single-Stage Detection) 方法,相比于 Faster R-CNN 这样的 双阶段检测(Two-Stage Detection) 方法,YOLO 速度更快,适用于 实时应用(如自动驾驶、监控系统)。
2.YOLO 的核心特点
- 单阶段检测:整个检测过程只需 一次前向传播(Forward Pass),大幅提高检测速度。
- 全局信息建模:YOLO 直接对 整张图像 进行检测,而不是基于候选框(如 Faster R-CNN)。
- 端到端训练:YOLO 可以同时检测多个对象,并预测它们的类别和位置。
- 高效且实时:比 Faster R-CNN 快 10~100 倍,适用于实时视频分析。
3.YOLO 的工作原理
1)将输入图像划分为 S×S 网格
- 例如,
S=7
时,YOLO 将 一张图片分为 7×7=49 个小网格。 - 如果物体的中心点落在某个网格中,该网格负责预测该物体。
2)每个网格预测 B 个边界框(Bounding Boxes)
- 每个边界框包括 (x, y, w, h, confidence score):
(x, y)
:目标中心点相对于网格的位置。(w, h)
:目标的宽度和高度,相对于整张图片。confidence score
:预测的置信度(目标存在的概率 × 预测框与真实框的 IOU)。
3)预测类别概率
- 每个网格还预测 C 个类别的概率(例如,C=20 代表 COCO 数据集 20 类)。
4)计算最终检测框
- 通过 非极大值抑制(NMS, Non-Maximum Suppression),筛选出最高置信度的预测框。
4.YOLO 的损失函数
YOLO 采用 多任务损失(Multi-task Loss) 进行优化:
- 坐标损失(L_coord):用于优化预测框的位置 (x, y, w, h)。
- 置信度损失(L_conf):计算预测框与真实框的 IOU(交并比)。
- 类别损失(L_class):计算分类误差(交叉熵损失)。
公式示意
其它损失项
5.YOLO 代码示例
使用 PyTorch 进行 YOLO 目标检测
import torch
import cv2
from torchvision import transforms
from ultralytics import YOLO # YOLOv8
# 加载预训练的 YOLO 模型
model = YOLO("yolov8n.pt") # 使用 YOLOv8n 轻量级模型
image_path = r"D:\Pictures\test.jpeg"
# 读取测试图片
image = cv2.imread(image_path)
# 进行目标检测
results = model(image)
# 在图像上绘制检测框
for result in results:
for box in result.boxes.xyxy:
x1, y1, x2, y2 = map(int, box[:4])
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
# 显示结果
cv2.imshow("YOLO Detection", image)
cv2.waitKey(0)
cv2.destroyAllWindows()
运行结果
0: 480x640 2 bears, 153.6ms
Speed: 6.5ms preprocess, 153.6ms inference, 1.3ms postprocess per image at shape (1, 3, 480, 640)
代码解析
- 加载 YOLOv8 预训练模型(官方模型
yolov8n.pt
)。 - 读取输入图片 并进行检测。
- 使用 OpenCV 画出检测框 并显示结果。
6.YOLO 版本对比
版本 | 发布时间 | 参数量 | 速度(FPS) | mAP(精度) | 改进点 |
---|---|---|---|---|---|
YOLOv1 | 2016 | 7.0M | 45 FPS | 63.4% | 初版,提出单阶段检测概念 |
YOLOv2 | 2017 | 8.7M | 67 FPS | 76.8% | 增加 Anchor Box |
YOLOv3 | 2018 | 62.0M | 30 FPS | 81.5% | FPN 多尺度特征提取 |
YOLOv4 | 2020 | 64.0M | 30 FPS | 89.0% | CSPDarknet 结构 |
YOLOv5 | 2021 | 7.2M~140M | 140 FPS | 90.0% | 轻量化、高效 |
YOLOv6 | 2022 | 8.7M | 120 FPS | 91.0% | 端到端优化 |
YOLOv7 | 2022 | 8.0M | 140 FPS | 91.5% | 深度优化模型结构 |
YOLOv8 | 2023 | 7.0M | 160 FPS | 92.0% | 新的目标检测 + 分割 + 追踪 |
7.YOLO vs 其他目标检测算法
算法 | 类型 | 速度(FPS) | 检测精度(mAP) | 适用场景 |
---|---|---|---|---|
YOLO | 单阶段 | ⚡ 60+ | 🎯 92% | 实时检测 |
Faster R-CNN | 双阶段 | ⏳ 5-10 | 🎯 93% | 高精度检测 |
SSD | 单阶段 | ⚡ 45+ | 🎯 74% | 轻量级应用 |
DETR | Transformer | ⏳ 15 | 🎯 94% | 端到端检测 |
- YOLO 适用于实时应用,如自动驾驶、视频监控、工业检测等。
- Faster R-CNN 精度高,但速度慢,适用于离线检测。
- SSD 轻量化,适用于移动端。
8.YOLO 的应用场景
🚗 自动驾驶(Autonomous Driving):实时检测行人、车辆、交通标志
📷 人脸识别(Face Detection):检测人脸并进行身份识别
📹 视频监控(Surveillance):异常行为检测
🐶 动物检测(Wildlife Monitoring):野生动物追踪
🔬 医疗影像(Medical Imaging):肿瘤检测
9.YOLO 的优化方向
- 结合 Transformer(如 YOLO-Transformer),提升全局建模能力
- 采用 NAS(神经架构搜索),优化模型结构
- 轻量化(如 Mobile YOLO),适用于嵌入式设备
总结
- YOLO 是一种单阶段目标检测算法,速度快,适合实时检测。
- YOLO 直接预测边界框和类别,提高检测效率。
- 最新的 YOLOv8 结合了检测、分割、跟踪能力,精度更高。
- 广泛应用于自动驾驶、人脸识别、安防监控等领域。
YOLO 的“看一次”理念,让目标检测更快、更高效,推动 AI 实时视觉的革命!