树莓派应用--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 模型对指定图像进行目标检测。
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 模型对指定视频进行目标检测。
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) # 检测视频
相关文章:

树莓派应用--AI项目实战篇来啦-17.YOLOv8目标检测-安全帽检测
1. YOLOv8介绍 YOLOv8是Ultralytics公司2023年推出的Yolo系列目标检测算法,可以用于图像分类、物体检测和实例分割等任务。YOLOv8作为YOLO系列算法的最新成员,在损失函数、Anchor机制、样本分配策略等方面进行了全面优化和创新。这些改进不仅提高了模型的…...

git-secret介绍
git-secret介绍 git-secret 是一个与git兼容的命令行工具,旨在安全地存储和管理敏感数据,如源代码中的密码、密钥以及敏感文件。它通过 GPG 加密来保护文件,确保只有授权的用户才能访问这些敏感信息。 使用流程 1、安装 Git-Secret:在本地开发环境中安装 git-secret。 2…...

【实战】Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP
大家好,我是冰河~~ 自己搭建的网站刚上线,短信接口就被一直攻击,并且攻击者不停变换IP,导致阿里云短信平台上的短信被恶意刷取了几千条,加上最近工作比较忙,就直接在OpenResty上对短信接口做了一些限制&am…...

计算机专业大一课程:线性代数探秘
计算机专业大一课程:线性代数探秘 对于计算机专业的大一新生来说,线性代数是一门基础且重要的课程。它不仅是数学的一个分支,更是计算机科学中不可或缺的工具。那么,线性代数究竟包含哪些内容,对我们的计算机学习有何…...

vscode写markdown插入图片视频并放在指定目录
目录 前言正文 前言 各种云文档非常好用,但是当你想把这些资料保存在本地时,markdown我觉得是最好的选择 markdown编辑器也有很多,但我还是觉得vscode最好用,直接粘贴文件就可以插入也类似云文档的使用体验,但是想要…...

鸿蒙富文本显示
1.使用 RichText 组件(ArkTS) 背景知识:在 ArkTS(一种鸿蒙应用开发语言)中,RichText组件提供了更强大的富文本显示功能。它允许设置不同的文本样式,包括字体、颜色、字号等多种属性。 Rich Te…...

手写mybatis之细化XML语句构建器,完善静态SQL解析
前言 1:在流程上,通过 DefaultSqlSession#selectOne 方法调用执行器,并通过预处理语句处理器 PreparedStatementHandler 执行参数设置和结果查询。 2:那么这个流程中我们所处理的参数信息,也就是每个 SQL 执行时&#…...

使用Milvus和Llama-agents构建更强大的Agent系统
代理(Agent)系统能够帮助开发人员创建智能的自主系统,因此变得越来越流行。大语言模型(LLM)能够遵循各种指令,是管理 Agent 的理想选择,在许多场景中帮助我们尽可能减少人工干预、处理更多复杂任…...

Python 工具库每日推荐【Arrow】
文章目录 引言Python时间日期处理库的重要性今日推荐:Arrow工具库主要功能:使用场景:安装与配置快速上手示例代码代码解释实际应用案例案例:跨时区会议安排器案例分析高级特性时间范围和区间自定义时间格式扩展阅读与资源优缺点分析优点:缺点:总结【 已更新完 TypeScript…...

Win10 安装 Redis 数据库
一、Redis 数据库介绍 Redis 是一个开源的高性能键值对(key-value)的非关系型数据库。它通常用作数据结构服务器,支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表&a…...

使用springboot生成war包
1.生成war包 1.1 更改pom包 打开一个springboot 项目 ,右击项目名从项目管理器打开 在pom.xml文件中插入以下两个依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><…...

见微知著:OpenEuler系统启动流程
OpenEuler是一个开源的Linux发行版,它的启动流程涉及到多个阶段,包括固件初始化、引导加载程序、内核启动、初始化系统和服务管理器等。下面将详细介绍OpenEuler的启动流程。 一、启动流程 1. 固件初始化(BIOS/UEFI) 启动过程首…...

支持向量机-笔记
支持向量机(Support Vector Machine, SVM) 是一种强大的监督学习算法,广泛应用于分类和回归任务,特别是在分类问题中表现优异。SVM 的核心思想是通过寻找一个最优超平面,将不同类别的数据点进行分割,并最大…...

研发线上事故风险解读之缓存篇
专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》,进一步深入梳理线上事故缓存使用方面的问题点,重点关注缓存在使用和优化过程中可能出现的问题,旨在为读者提供具有实践指导意义的…...

JavaScript前端开发技术
JavaScript前端开发技术 引言 JavaScript(简称JS)是一种广泛使用的脚本语言,特别在前端开发领域,它几乎成为了网页开发的标配。从简单的表单验证到复杂的单页应用(SPA),JavaScript都扮演着不可…...

H.264 编码参数优化策略
一、概述 随着数字媒体技术的发展,视频编码成为了多媒体领域中的重要研究方向之一。而H.264作为一种广泛应用的视频编码标准,具有高压缩比、优质画面和广泛兼容性等优点。为了进一步提高视频质量和压缩效率,对H.264编码参数进行优化成为了一个…...

C++ 游戏开发技术选型指南
C 游戏开发技术选型指南 游戏开发是一个复杂而多元化的领域,而C凭借其高性能和强大的控制能力,成为许多游戏引擎的首选编程语言。在这篇博客中,我们将探讨如何选择合适的C技术栈进行游戏开发,包括技术背景、代码示例、优化实践、…...

基于Python Django的在线考试管理系统
🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…...

《Java基础》变量和数据类型
综述 在开始学习变量之前,我们思考一下为什么需要使用变量。 首先我们从小开始学习加法减法的时候,后来我们再学更难的东西就是代数,其中的x和y是我们要求解的内容,这些内容就是变量。 变量是人的思维的提升,没有变量…...

FLINK内存管理解析,taskmanager、jobmanager
1、在 Flink 中设置内存的方法是配置以下两个选项之一: 1)Total Flink memory:taskmanager.memory.flink.sizejobmanager.memory.flink.size 2)Total process memory:taskmanager.memory.process.sizejobmanager.mem…...

【AI论文精读13】RAG论文综述2(微软亚研院 2409)P5-可解释推理查询L3
AI知识点总结:【AI知识点】 AI论文精读、项目、思考:【AI修炼之路】 P1,P2,P3,P4 五、可解释推理查询(L3) ps:P2有四种查询(L1,L2,L3,…...

优达学城 Generative AI 课程3:Computer Vision and Generative AI
文章目录 1 官方课程内容自述第 1 课:图像生成简介第 2 课:计算机视觉基础第 3 课:图像生成与生成对抗网络(GANs)第 4 课:基于 Transformer 的计算机视觉模型第 5 课:扩散模型第 6 课࿰…...

UE5 C++ 通过绑定编辑器事件实现控制柄顶点编辑
开发中经常会遇到编辑器环境中制作工具拖拽控制柄编辑内容的需求,此时可以通过Editor事件拿到对应回调,进行相应更新: 1.创建Mesh编辑Actor类 创建一个Mesh编辑Actor类,提供Mesh顶点编辑的相关逻辑。 .h: #pragma once#inclu…...

云计算ftp 服务器实验
创建VLAN 10 划分端口 创建VLAN 10 的地址 10.1.1.1 服务器的地址是 10.1.1.2 这是服务上的配置 服务器上选择ftp 启动 ,文件目录选择一下 在 交换机上 ftp 10.1.1.2 服务器的地址 把刚才创建的shenyq txt 文件下载下到本地交换机 我们能看到交换…...

node.js服务器基础
node.js的事件循环 node.js是基于事件驱动的,通常在代码中注册想要等待的事件,设定好回调函数,当事件触发的时候就会调用回调函数。如果node.js没有要处理的事件了,那整个就结束了;事件里面可以继续插入事件,如果有事…...

2-SAT 问题详解:逻辑约束与图论的结合
2-SAT 问题详解:逻辑约束与图论的结合 2-SAT(Two Satisfiability Problem)是布尔可满足性问题(SAT)的特殊形式,它解决的是含有二元子句的布尔表达式的可满足性问题。2-SAT 问题常用于分析系统中的逻辑约束…...

使用NetTopologySuite读写gpkg文件
直接上代码: 优势是什么?纯C#开发,不存在兼容和字符问题。 using NetTopologySuite; using NetTopologySuite.Features; using NetTopologySuite.Geometries; using CdIts.NetTopologySuite.IO; using CdIts.NetTopologySuite.IO.GeoPackag…...

什么是http?列出常见方法并解他们?
HTTP 方法是客户端(通常是浏览器)用来向服务器表明其意图的方式。常见的 HTTP 方法有以下几种: 一、GET 解释:用于请求指定的资源。它是最常见的 HTTP 方法之一。GET 方法应该只用于获取数据,而不应该有任何副作用。例…...

通过修改注册表来提高导出图像的分辨率(PPT尝试)
通过修改注册表来提高 PowerPoint 导出图片的分辨率,可以导致导出的图片尺寸大于您期望的 1920 x 1080 像素。例如,将 ExportBitmapResolution 设置为 300 DPI,可能会导致输出图像的尺寸变得非常大,比如 10240 x 5760 像素。这是因…...

OpenCV 环境配置
首先下载opencv,在opencv官网进行下载。 按照上面的步骤,点击进去 滑至底部,不切换至不同页,选择合适的版本进行下载(Window系统选择Windows版本进行下载)。 接下来以4.1.2版本为例: 点击之后会进入这个页面ÿ…...