YOLOv8目标检测实战详解

🎯 YOLOv8目标检测实战详解

📋 目录


一、YOLOv8简介

1.1 学习目的

人工智能、深度学习是当前技术发展的重要趋势。在深度学习工程实践流程中,模型部署是关键的第三个环节:

复制代码
数据准备 → 模型构建 → 模型部署

💡 定位建议:模型部署环节的主要工作包括推理前处理、推理后处理、平台适配与加速,要求我们:

  • 了解模型的输入与输出
  • 能够使用各种推理框架进行模型转换与推理
  • 具备快速适配各硬件平台的能力
  • 掌握流媒体、视频编解码、图像处理等技术
  • 能够快速写出稳定、高性能的C++代码

1.2 为什么选择YOLOv8

YOLOv8是YOLO系列的最新版本,具有以下优势:

  • 速度快:实时检测,适合部署
  • 精度高:在多个数据集上达到SOTA
  • 易部署:支持多种推理框架
  • 功能全:支持目标检测、姿态估计、实例分割等任务

二、YOLOv8输入与输出

2.1 输入格式(NCHW)

YOLOv8的输入是一个张量,通常采用NCHW格式

维度 含义 说明
N Batch Size 批次大小,通常为1
C Channels 通道数,RGB图像为3
H Height 图像高度,通常为640
W Width 图像宽度,通常为640

输入张量形状: [1, 3, 640, 640]

2.2 输出格式详解

YOLOv8的输出张量形状为 [1, 84, 8400]

复制代码
[1, 84, 8400]
 │   │   │
 │   │   └─ 8400个预测点
 │   └─ 4 + 80(边界框 + 类别数)
 └─ 批次数

维度解析:

参数 说明
批次数 1 单张图片推理时为1
84 4 + 80 边界框坐标 + 80个类别置信度
8400 8400 YOLOv8在图片上生成的预测框数量

📝 通俗理解:YOLOv8在图片上会画出8400个大小不一的框,对每个框中的物体进行预测,对80个类别依次打分,找到分数最高的类别。

2.3 内存数据布局

深入理解输出数据在内存中的存储方式:

张量 [1, 84, 8400] 的内存布局:

  • 第一维 :批次数,决定有多少个 84 × 8400 的数据块
  • 第二维 :84个元素,每个元素包含:
    • 前4个:边界框坐标 (x, y, w, h)
    • 后80个:各类别的置信度分数
  • 第三维:8400个数据点

第二维详细结构:

复制代码
[0-3]:   边界框 (left, top, right, bottom)
[4-83]:  80个类别的置信度

三、YOLOv8前处理

前处理是将原始图像转换为模型输入格式的关键步骤:

3.1 图像缩放

YOLOv8要求的输入分辨率是 640×640

处理方式:

python 复制代码
# 缩放图像到640x640
image = cv2.resize(image, (640, 640))

⚠️ 注意事项:缩放时需保持图像的长宽比,避免物体变形。通常使用letterbox方法进行填充。

3.2 颜色空间转换

YOLOv8要求输入RGB格式数据。

转换代码:

python 复制代码
# BGR转RGB
image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

3.3 图像归一化

YOLOv8期待输入图像像素值在 [0, 1] 范围内。

归一化处理:

python 复制代码
# 将uint8(0-255)归一化为float32(0-1)
image_normalized = image.astype(np.float32) / 255.0

3.4 HWC转CHW

YOLOv8要求输入CHW格式(Channel × Height × Width)。

转置操作:

python 复制代码
# HWC转CHW
image_chw = np.transpose(image_normalized, (2, 0, 1))

前处理完整流程:

复制代码
原始图像 → 缩放(640×640) → BGR转RGB → 归一化(/255) → HWC转CHW

四、YOLOv8后处理

后处理是将模型原始输出转换为可读检测结果的过程:

4.1 转置操作

将模型输出 [84, 8400] 转置为 [8400, 84],便于后续处理。

python 复制代码
# 转置操作
output = np.squeeze(output)  # 移除批次维度
output = output.transpose()   # [8400, 84]

4.2 解码与筛选

从8400个检测点中筛选出置信度高的点:

筛选流程:

  1. 提取边界框坐标 (x, y, w, h)
  2. 计算每个类别的置信度
  3. 筛选置信度大于阈值的检测点

数据结构:

复制代码
item[0]: left     (左边界)
item[1]: top      (上边界)
item[2]: right    (右边界)
item[3]: bottom   (下边界)
item[4]: confidence (置信度)
item[5]: label    (类别ID)

4.3 非极大值抑制(NMS)

YOLOv8可能会预测多个重叠的框检测同一物体,使用NMS筛选最优框。

NMS原理:

  1. 按置信度排序所有检测框
  2. 选择置信度最高的框作为保留框
  3. 计算其他框与保留框的IoU(交并比)
  4. 删除IoU大于阈值的重叠框
  5. 重复上述步骤直到所有框处理完毕

NMS参数:

参数 说明
conf_thres 置信度阈值,通常为0.25
iou_thres IoU阈值,通常为0.45

五、YOLOv8-Pose姿态估计

5.1 基本概念

YOLOv8-Pose是YOLOv8模型中用于姿态估计的版本。

官方模型特点:

  • 仅用于人体姿态评估
  • 检测出人体轮廓点
  • 输出17个关键点(如肩、肘、腕、膝、踝等)

5.2 输出格式

YOLOv8-Pose输出格式:

复制代码
(x, y, w, h, c + points × 17) × 8400
参数 说明
x, y, w, h 目标框坐标和宽高
c 置信度
points 轮廓点,每个点包含3个数据(x, y, confidence)
17 17个轮廓点

轮廓点数据结构:

每个关键点包含:

  • x: 关键点x坐标
  • y: 关键点y坐标
  • confidence: 关键点置信度

5.3 交通目标检测应用

在交通目标检测场景中,YOLOv8-Pose可以检测车辆关键点(如车轮位置)。

与官方模型的差异:

项目 官方模型 交通目标模型
轮廓点数量 17个 4个
检测类别 1类(人) 10类

交通目标YOLOv8-Pose输出格式:

复制代码
(x, y, w, h + c × 10 + points × 4) × 8400

说明:

  • c × 10: 10种类别的置信度
  • points × 4: 4个轮廓点(如车轮位置)

六、参考资料与学习路径

6.1 官方文档

6.2 详细教程

七、总结

核心要点回顾

输入格式 :NCHW格式的640×640 RGB图像

输出格式[1, 84, 8400] 张量,包含边界框和类别置信度

前处理 :缩放 → BGR转RGB → 归一化 → HWC转CHW

后处理 :转置 → 解码筛选 → NMS去重

Pose版本:支持关键点检测,可应用于人体姿态估计和交通目标检测

实战建议

🎯 最佳实践

  1. 先用Python验证前后处理逻辑
  2. 再用C++实现高性能推理
  3. 对比Python和C++结果确保一致性
  4. 使用TensorRT优化推理性能

常见问题

Q1: 为什么输出是8400个预测点?

A: YOLOv8在不同尺度特征图上生成预测框,三个尺度分别为80×80、40×40、20×20,总共6400+1600+400=8400个预测点。

Q2: 如何处理不同尺寸的图像?

A: 使用letterbox方法保持长宽比,缩放到640×640,推理后将坐标映射回原图。

Q3: NMS阈值如何选择?

A: 置信度阈值conf_thres通常为0.25,IoU阈值iou_thres通常为0.45,可根据实际场景调整。

相关推荐
我是发哥哈1 小时前
横向评测:主流AI培训方案的关键维度对比
大数据·人工智能·学习·机器学习·chatgpt
IDZSY04301 小时前
实测机乎AI一个月:普通用户真实体验分享
人工智能
shdwak....sad1 小时前
星核协同体系 Skill 工程:原子型、工作流型与专属型架构设计
人工智能
FluxMelodySun1 小时前
机器学习(三十五) 概率图模型-精确推断与近似推断
人工智能·机器学习
xiaotao1311 小时前
04-进阶方向: 01-计算机视觉(CV)——目标检测(YOLO系列)
yolo·目标检测·计算机视觉
AdMergeX1 小时前
南北同台,智启增长:AdMergeX 4月携全生态方案亮相深圳GTC与北京九日论道开发者沙龙
人工智能
GISer_Jing2 小时前
Todos
前端·人工智能·学习
MDIOT旗舰2 小时前
4G低功耗边缘计算网关:让智能抄表与远程运维从未如此简单
运维·人工智能·边缘计算·modbus·红外抄表·plc智能网关
悟纤2 小时前
如何接入GPT Image2 API[灵龙AI API]
人工智能·gpt·chatgpt