【深度学习】计算机视觉(CV)-目标检测-YOLO(You Only Look Once)——实时目标检测算法

发布于:2025-02-17 ⋅ 阅读:(135) ⋅ 点赞:(0)

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 = L_{\text{coord}} + L_{\text{conf}} + L_{\text{class}}

  • 坐标损失(L_coord):用于优化预测框的位置 (x, y, w, h)。
  • 置信度损失(L_conf):计算预测框与真实框的 IOU(交并比)。
  • 类别损失(L_class):计算分类误差(交叉熵损失)。

公式示意

L = \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \right] + 其它损失项


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 实时视觉的革命!


网站公告

今日签到

点亮在社区的每一天
去签到