开启 AI 视觉之旅:用 Python 和 YOLO v8 打造专属目标检测模型
在如今科技飞速发展的时代,AI 视觉就像一颗闪耀的星星,照亮了无数领域。而在 AI 视觉的世界里,目标检测无疑是那最为核心的技术之一。想象一下,有这样一种神奇的能力,能够让机器快速而精准地识别出图像或视频中的各种目标,这该多么令人兴奋!今天,我们用 Python 结合 Ultralytics 库中的 YOLO v8,去训练和开发属于我们自己的 AI 视觉目标检测模型,实现动态目标检测的梦想!无论是在现实场景中,还是面对网络上的各种需求,掌握了这一技能,就仿佛拥有了一把万能钥匙,能轻松应对各种识别任务。
一、揭开 YOLO 的神秘面纱
你是否好奇,YOLO 到底是什么呢?YOLO,全称 You Only Look Once,它就像是一位超级侦探,基于 CNN(卷积神经网络)算法,在 AI 视觉模型开发领域占据着重要的地位。目前,YOLO 由 Ultralytics 公司精心开发并维护着,而 YOLO v8 版本更是其官方发布的最新稳定版本,是开源库中强大的算法工具。有了 YOLO,模型就像拥有了一双火眼金睛,能够对输入的图像或视频进行快速分析,一次性预测多个目标的类别和位置,大大提升了检测效率。
官方网站就像是通往这个神奇世界的大门:Ultralytics.com ,快去探索一番吧!
二、搭建属于我们的 “战场”
在开启 YOLO v8 的学习之旅前,我们得先为自己准备一个合适的 “战场”,也就是搭建好运行环境。这就像是在打仗前,要把武器装备都准备齐全一样。
1. 安装 Python 解释器和 PyCharm
首先,我们要下载并安装适合自己操作系统的 Python 版本。这里建议选择较新版本,因为它们就像是升级版的武器,能带来更好的兼容性和性能。接着,我们要安装 PyCharm,它可是一款功能强大的 Python 集成开发环境(IDE),就像是一位贴心的助手,能为我们的代码编写、调试和项目管理提供诸多便利。
2. 安装三方库:Ultralytics
打开 PyCharm 的终端或命令行界面,输入下面这个神奇的命令,就能安装 Ultralytics 库啦:
pip install ultralytics
当安装完成的那一刻,就意味着我们已经做好了初步的准备,可以开始使用 YOLO v8 了,是不是有点小激动呢!
三、站在 “巨人” 的肩膀上 —— 加载预训练模型
预训练模型可是 YOLO v8 快速实现目标检测的关键所在,它就像是一位经验丰富的导师,已经在大量数据上进行了训练,具备了一定的目标识别能力。我们可以直接加载这些模型,然后在此基础上进行微调或训练,这样就能节省大量的时间和计算资源。
在 Python 代码中,通过下面的方式就能导入 YOLO:
from ultralytics import YOLO
不过,有时候会遇到一些小状况。当 Ultralytics 库检测到本地没有yolov8n.pt预训练模型时,它会自动从官方源下载完整的模型文件。但由于网络等原因,自动下载可能会失败。别担心,这时候我们可以手动从YOLOv8 官方发布页下载yolov8n.pt,并将其放置到我们的项目目录下,这样就能顺利使用预训练模型啦!
官网下载地址在这里:docs.ultralytics.com/zh/models/y…
小贴士:如果下载速度较慢,就像是开车遇到了堵车一样,我们可以尝试更换 pip 源,使用国内镜像源,如阿里云、清华大学等镜像源,这样就能显著提升下载速度,让我们的旅程更加顺畅。
初次使用,检测是否正常加载
# 加载预训练模型from ultralytics import YOLO# 加载预训练模型model = YOLO("yolov8n.pt") # 使用YOLOv8 Nano版本作为起点# 查看版本信息print(model.info())print("加载完成")
当看到 “加载完成” 这几个字的时候,是不是感觉自己离成功又近了一步呢!
图片验证
# 加载预训练模型from ultralytics import YOLO# 加载预训练模型model = YOLO("yolov8n.pt") # 使用YOLOv8 Nano版本作为起点model('./img/r.png', save=True,show=True)
这里我们选中 './img/r.png' 图片做为检测目标,检测后的图将保存到 runs
目录下,还会标记出检测框。save=True
表示保存检测结果,show=True
表示显示检测结果。当看到图片上那些精准的检测框时,那种成就感油然而生。
四、训练图片和标注
接下来,我们要为训练模型准备好 “弹药”,也就是训练图片和标注。
准备数据集结构文件
根目录创建 1 个文件夹(可自定义名称),如:xl,下面再创建 2 个文件夹(images 和 labels),images 和 labels 下再分别创建 2 个文件夹(train 和 val)。
images
下的train
和val
放入训练图片(png、jpg)。labels
下的train
和val
放入图片标注(txt)。
然后,我们要准备一些照片素材,通过 YOLO 目标检测标注工具进行标注。这里可以使用作者写的标注工具《YOLO 目标检测标注工具》。当我们认真地为每一张图片进行标注时,就像是在为模型传递知识,那种期待模型成长的心情难以言表。
五、开始训练模型
# 加载预训练模型 from ultralytics import YOLO # 加载预训练模型 model = YOLO("yolov8n.pt") # 使用YOLOv8 Nano版本作为起点 # 训练模型 results = model.train(data="data.yaml", # 使用自定义数据集进行训练 epochs=500, # 训练500个周期 imgsz=640, # 调整图像大小 batch=16, # 减少批次大小 device='cpu', # 使用CPU进行训练 ) # 训练30个周期,图像大小为640x640 print("训练完成")
path: D:\PyProjects\yolo\xl # 预训练模型路径 train: images/train # 训练集 val: images/val # 验证集 nc: 1 # 类别数 names: ['car-number'] # 类别名
这里为了截图,只开了 30 个周期,但建议大家在实际操作中,训练更多的周期次数,多找一些图片内容进行标注,这样在检测的时候就能更接近预期效果。当看到训练过程中那些不断变化的数据,就像是在见证一个生命的成长,充满了希望。
训练完成的结果会显示在runs\detect\train\weights
下,我们要找到best.pt
来测试一下验证结果。在 YOLO(如 YOLOv8)训练过程中, best.pt 和 last.pt 是两种自动生成的模型权重文件,它们有着不同的特点和用途。
1. best.pt(最佳模型)
- 定义 :它就像是班级里的学霸,是训练过程中在验证集上表现「最佳」的模型权重文件(通常以验证指标如 mAP(平均精度均值)或损失值为判断标准)。特点 :保存的是训练过程中验证指标最优时的模型状态(例如某一 epoch 验证损失最低或 mAP 最高时的权重)。用途 :通常作为最终使用的模型(如推理、部署),因为它代表了训练过程中模型的最佳性能。
2. last.pt(最后模型)
定义 :它就像是记录成长过程的日记,是训练结束时最后一个 epoch 保存的模型权重文件。
特点 :保存的是训练终止时的模型状态(可能不是验证指标最优的,但包含完整的训练状态,如优化器参数、当前 epoch 等)。
用途 :主要用于恢复训练(如训练中断后继续从该状态续训),或用于观察模型最终的收敛情况(可能不如 best.pt 效果好)。
总结:
推理 / 部署时优先使用 best.pt (性能更优);
恢复训练或调试时使用 last.pt (保留最新训练状态)。
我们当前代码中加载 best.pt 是合理的,符合「使用最佳模型推理」的常规场景。
六、验证自己训练的模型
# 加载预训练模型 from ultralytics import YOLO # 加载预训练模型 # model = YOLO(r'D:\PyProjects\yolo\runs\detect\train\weights\best.pt') # 使用自己训练的模型 model = YOLO("best.pt") # 使用自己训练的模型 # model('./img/1.png', save=True) # model('./img/2.png', save=True) # model('./img/3.png', save=True) # model('./img/4.png', save=True) # model('./img/5.png', save=True) # model('./img/6.png', save=True) # model('./img/7.png', save=True) # model('./img/8.png', save=True) # model('./img/9.png', save=True) # model('./img/2.mp4', save=True,show=True)
当我们运行这些代码,看到自己训练的模型能够准确地识别出目标时,那种喜悦和成就感是无法用言语来形容的。这就像是我们亲手种下的种子,经过精心的培育,终于开出了美丽的花朵。现在,就赶紧动手,开启属于你自己的 AI 视觉之旅吧!
示例源码:关注公众号“Harry技术”,回复 YOLO 获取源码地址。