YOLOv8实战进阶|单图、视频、批量推理与基础参数调优教程

寒烟似雪
2月1日发布 /正在检测是否收录...

YOLOv8实战进阶:单图、视频、批量推理与基础参数调优

上一章我们完成了YOLOv8最基础的环境搭建和单张图片检测,成功跑出了第一个带标注框的结果。但在实际使用里,只处理单张静态图片远远不够,视频检测、批量图片处理、调整检测精度和速度,才是日常高频用到的功能。这一章就顺着上一章的代码,在不改动核心逻辑的前提下,扩展常用推理场景,同时讲清楚新手最先用到的几个参数,所有代码都可以直接复制运行,配合上一章的环境直接使用。
ml2hyuoz.png

一、模型规格切换与选用建议

YOLOv8官方提供了多种不同大小的预训练模型,分别是yolov8nyolov8syolov8myolov8lyolov8x,后缀字母对应模型参数量和计算量,直接影响检测速度和精度,新手可以根据硬件直接选择。

  • yolov8n:nano,最小最快,精度一般,适合CPU、低配设备、嵌入式端
  • yolov8s:small,轻量均衡,CPU运行流畅,精度比n版提升明显,日常测试首选
  • yolov8m:medium,中等规模,精度较好,建议有独立显卡使用
  • yolov8l:large,大模型,高精度,需要中端以上NVIDIA显卡
  • yolov8x:xlarge,最大模型,精度最高,对显卡显存要求高

模型切换不需要修改代码逻辑,只需要更换加载的模型文件名即可。上一章我们用的是yolov8n.pt,想要换成s版,只需要修改一行代码:

from ultralytics import YOLO

# 替换为yolov8s.pt,首次运行会自动下载模型文件
model = YOLO('yolov8s.pt')

硬件配置普通、仅做学习测试,优先保留n版或s版;有GPU且追求检测效果,再逐步升级到m、l、x版,不建议新手一上来用大模型,容易出现加载慢、显存不足的问题。

二、单张图片推理进阶用法

基础单图检测只能实现默认检测和保存,实际使用中我们经常需要指定保存目录、关闭冗余输出、只提取检测结果数据,这里整理可直接使用的进阶代码。

from ultralytics import YOLO

# 加载s版均衡模型
model = YOLO('yolov8s.pt')

# 单图推理,增加常用参数
# source:图片路径
# conf:置信度阈值,低于该值的目标不显示
# save:是否保存结果图片
# project:保存结果的根文件夹
# name:本次推理的结果子文件夹
# verbose:关闭终端冗余日志输出
results = model(
    source='test.jpg',
    conf=0.3,
    save=True,
    project='runs/detect',
    name='my_single_result',
    verbose=False
)

# 解析并结构化打印结果
print("=== 单图检测详细结果 ===")
for idx, box in enumerate(results[0].boxes):
    cls_id = int(box.cls)
    class_name = results[0].names[cls_id]
    conf = round(float(box.conf), 2)
    # 检测框坐标信息 (x1, y1, x2, y2)
    xyxy = box.xyxy.cpu().numpy().tolist()[0]
    print(f"目标{idx+1} | 类别:{class_name} | 置信度:{conf} | 坐标:{xyxy}")

运行后,结果会统一保存在runs/detect/my_single_result目录下,方便多次测试区分不同版本的输出,同时终端只打印结构化的关键信息,不会被大量日志干扰。

三、视频文件目标检测

图片检测是基础,视频检测是YOLOv8的高频实用场景,代码逻辑和单图完全一致,只需要将source参数替换为视频文件路径,模型会自动逐帧处理并输出带检测框的视频。

操作准备

  1. 准备一段常见格式的视频,如mp4、avi、mov,文件名改为英文,如test_video.mp4
  2. 将视频和代码文件放在同一目录

完整视频检测代码

from ultralytics import YOLO

model = YOLO('yolov8s.pt')

# 视频推理,新增帧率相关与保存参数
results = model(
    source='test_video.mp4',
    conf=0.3,
    save=True,
    project='runs/detect',
    name='my_video_result',
    verbose=False,
    # 保留视频音频,可选
    save_audio=True
)

print("视频检测完成,结果保存在runs/detect/my_video_result目录")

硬件说明:

  • CPU环境:可以处理短时长、低分辨率视频,处理速度慢于原视频帧率,属于正常现象
  • GPU环境:可以流畅处理1080P及以下视频,处理速度接近实时
    输出的视频文件会自动存放在指定目录,文件名包含处理标识,可直接用播放器打开查看逐帧检测效果。

四、批量图片批量推理

日常工作中经常需要一次性处理一整个文件夹的图片,逐张手动运行效率太低,YOLOv8支持直接传入文件夹路径,自动批量处理所有图片,无需编写循环代码。

操作准备

  1. 新建一个文件夹,命名为batch_images
  2. 将所有需要检测的图片放入该文件夹,全部使用英文文件名
  3. 保证batch_images和代码文件在同一级目录

批量检测完整代码

from ultralytics import YOLO

model = YOLO('yolov8s.pt')

# 直接传入文件夹路径,批量处理所有图片
results = model(
    source='batch_images',
    conf=0.3,
    save=True,
    project='runs/detect',
    name='my_batch_result',
    verbose=False
)

# 统计总检测数量
total_objects = 0
for res in results:
    total_objects += len(res.boxes)

print(f"批量处理完成,共处理图片{len(results)}张,总计检测目标{total_objects}个")
print("所有标注结果图片保存在runs/detect/my_batch_result目录")

运行后,程序会遍历文件夹内所有合法图片,逐张检测并保存标注结果,终端输出整体统计数据,适合数据集预处理、批量标注预览等场景。

五、新手必用核心参数说明

上面代码用到的参数,是日常推理最常用的几个,不需要记复杂文档,理解这几个就足够完成大部分测试任务:

  • source:输入源,可以是单张图片路径、视频路径、文件夹路径、摄像头编号
  • conf:置信度阈值,范围0-1,数值越高,检测结果越严格,误检越少,但可能漏检小目标,新手常用0.25-0.5
  • save:布尔值,True为保存带框的结果文件,False为只计算不保存
  • project:结果保存的根目录,统一管理所有输出,避免文件混乱
  • name:单次推理的子文件夹名称,方便区分不同参数、不同模型的测试结果
  • verbose:True输出完整日志,False关闭冗余输出,只保留关键信息

这些参数可以自由组合,比如高置信度严格检测、指定自定义保存目录、批量处理加精简日志,适配不同使用场景。

六、本章常见问题与解决方法

  1. 视频运行报错,提示无法读取视频
    原因:视频格式不兼容、文件损坏、路径包含中文或空格
    解决:转换为mp4格式,重命名为纯英文无空格路径,检查文件是否可正常播放
  2. 批量处理只识别部分图片
    原因:部分图片格式非JPG/PNG、文件名异常、图片损坏
    解决:统一转换为JPG格式,删除无法打开的损坏图片,全部使用英文命名
  3. CPU处理视频速度极慢,甚至卡顿
    原因:视频分辨率过高、模型版本偏大、CPU性能有限
    解决:换回yolov8n模型,压缩视频分辨率为720P及以下,缩短视频时长
  4. 输出目录找不到结果文件
    原因:projectname参数理解错误,默认路径和自定义路径混淆
    解决:固定使用runs/detect作为根目录,每次修改name区分任务,直接按路径层级查找
  5. 检测结果大量误检,出现无效目标
    原因:置信度conf设置过低
    解决:将conf从0.25提高到0.35-0.4,过滤低置信度无效目标

七、本章小结

这一章我们没有引入新的环境配置,完全基于上一章的运行环境,扩展了单图进阶、视频、批量图片三种核心推理方式,同时讲清楚了模型规格选择和新手必用参数。可以发现,YOLOv8的推理接口设计非常统一,无论输入源是图片、视频还是文件夹,核心代码结构完全不变,只需要修改source和少量配置参数。

现阶段不需要深入理解模型底层原理,先熟练掌握不同输入源的推理写法、参数调整,能稳定处理图片和视频,完成日常测试需求,就已经达到入门实战的标准。下一章我们会进入自定义数据的准备环节,学习使用标注工具制作自己的数据集,为训练专属检测模型做准备。

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消
SSL