在树莓派5+hailo-8上运行自建数据集的yolov8模型实现超高帧率(26tops超高端侧算力)-包含模型转换教程

前言:

写这篇文章的目的很简单,之前在树莓派5上运行过yolo的算法,但是帧率都很低(5fps),最多只能用来抓拍检测,想实现视频流的检测几乎是不可能的,所以我在淘宝上发现了一款ai加速模块,还是树莓派官方和hailo出的,所以一开始觉得应该使用起来很简单。hailo-8模块如图:

但是实际使用起来并没有那么简单,相反官方的文档做的说实话不尽人意,很多细节的地方都没有说到,得到社区去摸索才行,加上这个模块出来没多久,国内也没有啥资料,像微雪,亚博这些都只有那种很简单的上手文档,根本没法正儿八经使用,所以我花了一些时间摸索出来了这个教程,一天可能更新不完,后面会陆陆续续更新。后续看到这篇的话,版本可能发生变化而导致冲突,但是本文的一些方法可以借鉴,有更新我有时间也会做相应的修改

ps.实现本文之前需要你有一定的基础,纯小白出门左转。

本文是翻阅了很多资料和论坛才写出来的,转载一定要说明出处,谢谢!

作者目前大三,没有时间回复私信,有事在评论区留言即可,看见会回复

先来简单介绍一下hailo-8模块的数据

目前hailo-8有两种模式,第一是左边的m2样式,一种是右边只能用于树莓派5的官方出品的样式

个人觉得m2样式的最好,因为可以用于像rk3588这种自带m2接口的主板,也可以用给电脑使用,但是m2格式的26tops的版本价格很贵,在1300左右才能买到,而树莓派专用的只需要900左右,13tops的两者价格都差不多600左右,根据自身情况选择合适的版本即可。

下面是详细数据

可以看见是支持目前市面上主流的框架的,所以到不需要为兼容性考虑(这里显示只支持树莓派的系统是因为这是那个官方套件,实际有m2接口的基本都可以,但是本文是基于官方套件hailo-8写的,其余开发板请自行查阅官方资料)

事前准备:

你需要一台满足以下要求的电脑(服务器也可以,wsl2环境下也可以,个人推荐在本地电脑使用wsl,因为模型转换是很常用的东西,而且和树莓派的运行环境是高度绑定的,服务器上每次配环境可能会更新,导致版本不匹配发生冲突)

ubuntu版本:只能20.04和22.04其余都不行

运行内存:低于16g在转换大的模型的时候可能会爆内存

python版本:22.04默认3.10.12

英伟达的GPU:cuda版本建议11.8,对应的cudnn版本为8.9,我不清楚更高版本的是否可以使用,请自行尝试。这两个很关键,cudnn版本不对或者不安装会报dnn库找不到的

硬件部分:

1:树莓派5(已经烧录好树莓派官方镜像,推荐桌面完全版,使用起来更方便)

2:hailo-8或者hailo-8l

3:摄像头(我使用的是微雪的imx477 16mm长焦镜头模组,可以使用树莓派官方的普通摄像头或者usb免驱动摄像头)

1.开始:

1.1:训练yolov8模型:

网上有关yolov8模型的训练有很多教程,我这里不过多赘述,给大家推荐一个视频进行学习使用b站视频,里面有详细的在服务器上训练yolov8模型的教程,大家自行观看,在训练结束后会得到一个以pt结尾的模型文件,我们需要执行以下命令(在训练的服务器上pt模型的文件路径下执行,使用终端)

yolo export model=./best.pt imgsz=640 fo
### 安装配置Hailo-8硬件加速器以部署YOLOv8s #### 准备工作 为了确保能够在树莓派5上成功安装并配置Hailo-8硬件加速器,需要先确认设备已经具备必要的环境条件。这包括但不限于操作系统版本、Python解释器以及相关依赖库的准备。 #### 环境搭建 建议的操作系统为Raspberry Pi OS (64-bit),因为该平台提供了更好的性能支持和更广泛的软件兼容性[^1]。对于编程语言的选择,推荐使用Python 3.x系列作为主要开发工具,并通过pip管理所需的第三方包。 #### Hailo驱动程序安装 访问官方文档获取最新的Linux发行版下的Hailo SDK安装指南,按照指示完成驱动程序的下载与设置过程。此步骤至关重要,它决定了后续能否顺利加载模型文件到Hailo芯片中执行推理操作。 #### YOLOv8s模型移植 考虑到原始YOLO架构可能并不完全适用于嵌入式环境中高效运行的要求,在实际应用前通常还需要对预训练好的权重参数做适当调整优化。具体做法可以参照社区分享的经验案例来进行针对性修改。 #### 测试验证 当一切准备工作就绪之后,可以通过编写简单的测试脚本来检验整个系统的功能是否正常运作。下面给出了一段用于调用摄像头捕捉图像并通过已部署的YOLOv8s模型实现物体识别的基础代码示例: ```python from hailo_platform import HEF, VDevice, InferVStreamsParams, InputVStreamInfo, OutputVStreamInfo import cv2 import numpy as np def preprocess_image(image_path): img = cv2.imread(image_path) resized_img = cv2.resize(img, (640, 640)) normalized_img = resized_img / 255.0 transposed_img = np.transpose(normalized_img, axes=[2, 0, 1]) batched_img = np.expand_dims(transposed_img, axis=0).astype(np.float32) return batched_img hef = HEF('path_to_your.hef') with VDevice() as device: infer_params = InferVStreamsParams( input_vstreams_info=(InputVStreamInfo(name='input_tensor'),), output_vstreams_info=tuple(OutputVStreamInfo(name=name) for name in hef.get_output_names()) ) with device.infer(hef, infer_params=infer_params) as infer_pipeline: image_data = preprocess_image('/path/to/image.jpg') # 替换为自己的图片路径 results = infer_pipeline.infer({'input_tensor': image_data}) # 处理返回的结果... ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值