树莓派应用--AI项目实战篇来啦-17.YOLOv8目标检测-安全帽检测

1. YOLOv8介绍

YOLOv8是Ultralytics公司2023年推出的Yolo系列目标检测算法,可以用于图像分类、物体检测和实例分割等任务。YOLOv8作为YOLO系列算法的最新成员,在损失函数、Anchor机制、样本分配策略等方面进行了全面优化和创新。这些改进不仅提高了模型的检测精度和鲁棒性,还简化了训练流程并提升了模型的可扩展性。

建立在Yolo系列历史版本的基础上,并引入了新的功能和改进点,以进一步提升性能和灵活性。其核心思想是将目标检测问题转化为一个回归问题,通过一次前向传播过程即可完成目标的位置和类别预测。Yolov8借鉴了Yolov5、Yolov6、YoloX等模型的设计优点,在全面提升改进Yolov5模型结构的基础上实现,同时保持了Yolov5工程化简洁易用的优势。YOLOv8 采用五个预训练模型,包括YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l和 YOLOv8x,其如下图2-7所示是基于COCO Val 2017数据集测试并对比Yolov8和Yolov5的mAP、参数量和FLOPs结果。由此可以看出,Yolov8相比Yolov5精度提升比较多,但是n/s/m模型参数量和flops增加不少,但是相比Yolov5大部分模型推理速度变慢了。

1.1 YOLOv8网络结构

YOLOv8模型网络结构图如下图所示。从YOLOv8的网络结构可以看出,其延用了YOLOv5的网络结构思想,网络还是分为三个部分: 基于CSP(紧凑和分离)的主干网络(backbone)、特征增强网络(neck),检测头(head) 三个部分。

2. 安装 PyTorch和 torchvision

YOLOv8是基于 PyTorch框架来实现的,所以在使用之前需要安装这两个框架,首先可以去官方网站上下载两个编译好的包进行安装,官方网站为:

https://download.pytorch.org/whl/torch_stable.html

找到torch-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl和

torchvision-0.16.2-cp311-cp311-linux_aarch64.whl文件,复制到树莓派对应的yolov8项目目录下,然后运行如下命令进行安装:

sudo pip3 install torch-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

sudo pip3 install torchvision-0.16.2-cp311-cp311-linux_aarch64.whl

安装成功后,检查一下安装是否成功。

如果报错的话,说明安装有问题,一般问题是 numpy版本过低,我们可以更新一下:

sudo pip3 install numpy --upgrade --ignore-installed

3. 安装环境所需的包

例如:pandas、opencv-python、tqdm等,都需要在虚拟环境下安装,如下所示。

(在虚拟环境中安装,专栏中 ++树莓派使用:YOLOv8环境搭建困难--已解决++ 文章会提到该问题)

4. 安全帽检测

4.1 识别图片

使用 Ultralytics提供的 YOLOv8 模型对指定图像进行目标检测。

python 复制代码
from ultralytics import YOLO  # 从 Ultralytics 库中导入 YOLO 类。这个类提供了一个方便的接口,用于加载 YOLO 模型并执行目标检测

# 导入训练好的模型
model=YOLO("./runs/detect/train5/weights/best.pt",task="detect")

# 随意找一些测试数据
# 图片数据和视频数据都可以,直接将数据传入接口
model.predict(source="./ultralytics/assets/construction-safety.jpg",save=True,classes=[0,2])  # 检测图片

# 自己构造一些数据
# 在识别自己的构造的数据时,传入了classes=[0,2]  只识别部分的类别
# 代表只输出0和2,也就是安全帽是否佩戴这个类别

识别结果如下所示,可识别出图片中所有的安全帽,并保存识别结果。

4.2 识别视频

使用 Ultralytics提供的 YOLOv8 模型对指定视频进行目标检测。

python 复制代码
from ultralytics import YOLO  # 从 Ultralytics 库中导入 YOLO 类。这个类提供了一个方便的接口,用于加载 YOLO 模型并执行目标检测

# 导入训练好的模型
model=YOLO("./runs/detect/train5/weights/best.pt",task="detect")

model.predict(source="./ultralytics/assets/indianworkers.mp4",classes=[0,2],save=True)  # 检测视频

相关推荐
欣赏你流浪^8 分钟前
物联网智能感知进阶:基于YOLO的琏雾系统视频分析
物联网·yolo·音视频
Debroon36 分钟前
CV 医学影像分类、分割、目标检测,之【皮肤病分类】项目拆解
目标检测·分类·数据挖掘
文弱_书生44 分钟前
为什么神经网络的权重矩阵具有低秩特性?如何理解和解释?
人工智能·神经网络·矩阵
Bar_artist44 分钟前
微软推出革命性AI安全工具Project IRE,重塑网络安全防御新范式
人工智能·安全·microsoft
cver1231 小时前
人脸情绪检测数据集-9,400 张图片 智能客服系统 在线教育平台 心理健康监测 人机交互优化 市场研究与广告 安全监控系统
人工智能·安全·yolo·计算机视觉·目标跟踪·机器人·人机交互
技术老金1 小时前
LangGraph入门与避坑指南:从ReAct到复杂流程编排
人工智能·python
大佬喝可乐1 小时前
卷积神经网络(CNN)全面解析
人工智能·神经网络·cnn
martinzh2 小时前
上下文学习的神奇魔法:轻松理解AI如何无师自通
人工智能
Hcoco_me2 小时前
【4】Transformers快速入门:自然语言模型 vs 统计语言模型
人工智能·语言模型·自然语言处理
机器之心2 小时前
Agent狂欢下的冷思考:为什么说Data&AI数据基础设施,才是AI时代Infra新范式
人工智能·openai