1 介绍
YOLOv8是YOLO (You Only Look Once) 目标检测模型系列的最新版本,由Ultralytics公司开发和维护。YOLOv8是在先前版本的基础上进行的重大更新,不仅提升了性能,还增加了更多的功能,它不仅能够进行目标检测,还能完成实例分割、姿态估计、跟踪和图像分类等多种计算机视觉任务。由于其高效性和多功能性,YOLOv8在多个行业和领域都有广泛的应用
YOLOv8的主要特点
无锚框(Anchor-Free):
- YOLOv8抛弃了之前版本中使用的锚框(anchor boxes),这有助于简化模型,并可能提高检测速度和准确性。
统一框架:
- 提供一个统一的框架来执行目标检测、实例分割等多种任务,这意味着用户可以使用相同的代码库进行不同的计算机视觉任务。
新的骨干网络:
- YOLOv8采用了新的网络结构,这有助于提高模型的检测精度和速度。
多尺度特征融合:
- 通过融合不同层次的特征来提高模型对不同大小物体的检测能力。
改进的特征提取:
- 包括更复杂的网络架构和更优化的训练流程,从而增强特征提取能力。
新的激活函数和Attention机制:
- 通过采用新的激活函数和注意力机制来改善模型的表现力。
灵活的训练和部署:
- 可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,包括CPU和GPU。
支持多种任务:
- YOLOv8不仅可以进行目标检测,还可以进行实例分割、图像分类、姿态识别和跟踪等任务。
以下是一些主要的应用场景:
目标检测
- 安防监控:实时监测并识别出异常行为或入侵者。
- 交通监控:检测道路上的车辆、行人以及其他障碍物,用于智能交通系统的管理。
- 零售分析:监控顾客流量,分析顾客行为,提高店铺布局效率。
- 自动化生产线:检测产品缺陷,确保产品质量控制。
- 无人机应用:用于无人机上的目标检测,如农田监测、野生动物保护等。
实例分割
- 医疗图像分析:精确地分割出医学图像中的特定组织或器官,辅助医生进行诊断。
- 农业领域:作物健康状况评估,病虫害监测。
- 工业检测:精细地检测零件表面的瑕疵或损伤。
图像分类
- 自动图像排序:根据图像内容进行分类和组织。
- 内容发现与推荐系统:基于图像内容推荐相关的产品或服务。
姿态估计
- 体育分析:分析运动员的动作和姿势,帮助教练和运动员提高训练效果。
- 人机交互:识别人体姿态,实现手势控制等交互方式。
- 动作识别:用于视频游戏、虚拟现实和增强现实等应用中的用户动作识别。
跟踪
- 自动驾驶:追踪道路上的动态对象,如行人、车辆等。
- 视频监控:持续跟踪特定个体或物体。
其他应用场景
- 机器人导航:为机器人提供环境感知能力,帮助它们避开障碍物。
- 仓库管理:自动识别和定位货物,提高物流效率。
- 质量控制:在制造过程中快速识别不合格产品。
- 无人机巡检:用于电力线路巡检、建筑物检查等。
2 目标检测简单的案例
数据集的准备:
2.1 准备自己的数据
基于labelme进行制造自己的训练数据。本文主要使用的数据集合来源于此。参考上一篇文章;
https://github.com/TommyZihao/Train_Custom_Dataset/tree/main/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E6%95%B0%E6%8D%AE%E9%9B%86https://github.com/TommyZihao/Train_Custom_Dataset/tree/main/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B/%E7%9B%AE%E6%A0%87%E6%A3%80%E6%B5%8B%E6%95%B0%E6%8D%AE%E9%9B%86
2.2 使用现有的
在很多网站都存在。
2.3 下载模型: YOLOV8训练模型下载_yolov8下载-CSDN博客
Models Supported by Ultralytics - Ultralytics YOLO Docs
按照需要下载自己的即可:
2.3 配置yaml
看一下文件结构:
data.yaml: 保存训练数据的路径;
train: bvn/images/train # 训练数据
val: bvn/images/val # 验证数据
# test: # test fiel
nc: 4 # 几个类别
names: ['Angle','Ruler','Triangle_30','Triangle_45'] # 类别的名称
yolov8n.pt: 模型文件;
datasets: 必须要有,保存训练的数据集合;
datasets:
注意: images\ labels 文件名称要一一对应起来。
2.4 训练
command 命令搞定:
yolo task=detect mode='train' model=./yolov8n.pt data=./data.yaml epochs=5 batch=4
每个epoch的产出:
最终的结果:多了一个 run文件;
代码版本
from ultralytics import YOLO# Load a model model = YOLO("yolov8n.pt") # load an official model #model = YOLO("path/to/best.pt") # load a custom model model.train(data='./data.yaml',workers=1,epochs=4,batch=4)