在树莓派上部署训练好的YOLO模型

树莓派的配置

下载系统

使用Raspberry pi Imager软件

闲杂配置

  1. 拼音输入法的配置
    安装输入法框架(fcitx)
sudo apt update
sudo apt install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin
  1. 配置输入法
  • 打开终端,输入以下命令:
im-config -n fcitx
  • 如果提示需要重启,请重启树莓派:
sudo reboot
  • 添加中文输入法:
    桌面右上角可设置
  • 切换输入法:
    默认情况下,Fcitx 的切换快捷键是 Ctrl + 空格

准备工作

Python环境的准备

  1. 查看自己的Python版本
    可以通过以下命令查看虚拟环境中的 Python 版本:
python --version
  1. 创建与管理虚拟环境(树莓派系统推荐使用 venv 模块来创建虚拟环境):
  • 选择一个目录来存放虚拟环境,例如在主目录下创建一个名为 venv 的文件夹:
mkdir ~/venv
  • 在该目录下创建虚拟环境,命名为 myenv:
python3 -m venv ~/venv/myenv
  • 激活虚拟环境:
source ~/venv/myenv/bin/activate

但是这样太麻烦了,所以我想简单点:使用别名(Alias)
(1)nano ~/.bashrc
(2)在文件末尾添加别名。例如,如果你想用 venv 来激活虚拟环境,可以添加以下内容:

alias venv='source ~/venv/myenv/bin/activate'

(3)source ~/venv/myenv/bin/activate’
保存文件并退出(在 nano 中按 Ctrl+X,然后按 Y 保存,最后按 Enter)
(4)重新加载配置文件:

source ~/.bashrc

(5)现在可以直接使用 venv 命令激活虚拟环境:

venv

(6)退出虚拟环境:

deactivate

安装OpenCV(项目需要)

  1. 在安装 OpenCV 之前,需要安装一些必要的系统依赖。
  • 安装 libdc1394-dev:
sudo apt-get install libdc1394-dev
  • 完整的依赖安装命令:
sudo apt-get update
sudo apt-get install build-essential cmake git libjpeg-dev libpng-dev libtiff-dev libdc1394-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libgtk2.0-dev libatlas-base-dev gfortran
  1. 激活虚拟环境:
    运行以下命令:
venv
  1. 安装 OpenCV 的 Python 包(在虚拟环境中):
pip install opencv-python

如果速度太慢可以用国内源下载

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple
  1. 验证安装:
python
>>> import cv2
>>> print(cv2.__version__)

模型部署

模型转换(.pt模型转换为.onnx格式)

不同格式介绍

  1. .pt 格式(PyTorch模型)
    (1) 优点:
  • 灵活性高:直接使用PyTorch框架,可以方便地进行模型的修改和调试
  • 无需额外转换:无需将模型转换为其他格式,部署过程相对简单
    (2) 缺点:
  • 性能受限:树莓派的硬件资源有限,直接运行PyTorch模型的推理速度较慢,通常只有2帧/秒左右
  • 依赖复杂:需要安装完整的PyTorch环境,对树莓派的存储和计算资源要求较高
  1. .onnx 格式(ONNX模型)

(1) 优点:

  • 推理速度更快:ONNX模型经过优化,推理速度比直接使用PyTorch模型更快,平均帧率可达3帧/秒左右
  • 适配性强:ONNX是一种中间表示格式,可以方便地转换为其他推理引擎支持的格式(如TensorRT、OpenVINO等),适合在多种硬件上运行
  • 资源占用低:相比PyTorch环境,ONNX Runtime的依赖更轻量,更适合树莓派等资源受限的设备

(2) 缺点:

  • 需要转换:需要将.pt模型转换为.onnx格式,转换过程中可能需要调整模型结构或参数
  • 调试复杂:如果转换后的模型出现问题(如推理结果不准确),调试难度可能比直接使用PyTorch模型更高

综上:如果目标是在树莓派上实现较高的推理速度和更好的资源利用,建议将.pt模型转换为.onnx格式进行部署

模型格式的转换(在你的PC上进行转换)

  1. 确保你的 Windows 环境中已安装以下依赖:
pip install torch onnx onnxruntime
  1. 转换为 ONNX 格式
    示例代码:
from ultralytics import YOLO

# 加载模型
model = YOLO("banana.pt")

# 导出模型
model.export(
    format="onnx",          # 导出为 ONNX 格式
    imgsz=640,              # 输入图像尺寸
    half=False,              # 启用 FP16 量化
    int8=False,             # 是否启用 INT8 量化(根据需求启用)
    dynamic=True,           # 启用动态输入尺寸
    simplify=True,          # 简化模型
    opset=12                # 指定 ONNX opset 版本
)
  • imgsz
    默认值:640。指定模型输入的图像尺寸。可以是一个整数(表示正方形图像的边长),也可以是一个元组 (height, width)。如果模型需要处理不同尺寸的图像,可以结合 dynamic=True 使用
  • half
    默认值:False。启用 FP16(半精度)量化,可以减小模型大小并加快推理速度,但可能会略微降低精度
  • int8
    默认值:False。启用 INT8 量化,进一步压缩模型并在边缘设备上加快推理速度,同时尽量减少精度损失
  • dynamic
    默认值:False。启用动态输入尺寸,允许导出的模型处理不同尺寸的输入图像,提高灵活性
  • simplify
    默认值:True。使用 onnx-simplify 工具简化模型图,提高性能和兼容性
  • opset
    默认值:None。指定 ONNX opset 版本,以兼容不同的 ONNX 解析器和运行时。如果未设置,将使用最新支持的版本,对于大多数场景,Opset 12 是一个较为安全的选择,因为它在兼容性和性能之间取得了较好的平衡

说明:因为half和simplify不能同时启用,而且我是在树莓派上部署模型(树莓派不支持 FP16 运算),所以我没让half=True。生成的onnx格式的模型位于train/weights/

树莓派上onnx格式模型的部署

  1. 查看树莓派的型号
cat /proc/device-tree/model
  1. 在树莓派上安装必要的依赖
pip install onnxruntime
  1. 调用模型
import onnxruntime as ort
import numpy as np

# 加载 ONNX 模型
session = ort.InferenceSession("banana.onnx")
# 获取模型输入输出信息
input_name = session.get_inputs()[0].name
output_name = session.get_outputs()[0].name
  1. 接下来就是平常的项目代码编写了

上篇相关文章

上篇相关文章:yolov8的学习之旅(环境配置,模型训练,模型使用,模型部署)

### 部署和运行轻量级YOLO模型 #### 准备环境 为了在树莓派上成功部署ncnn模型,如轻量级YOLO模型,需先准备好相应的开发环境。推荐使用带有4GB RAM及以上版本的树莓派Pi5作为设备平台,并安装官方Raspberry Pi OS操作系统[^1]。 #### 安装依赖项 确保已安装必要的软件包,包括但不限于CMake、g++ 和 OpenCV等库,这些工具对于编译和支持ncnn至关重要: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install cmake g++ libopencv-dev ``` #### 编译ncnn库 获取并编译ncnn源码至适合ARM架构的二进制文件。这一步骤是实现后续操作的基础: ```bash git clone https://github.com/Tencent/ncnn.git cd ncnn mkdir build && cd build cmake .. make -j$(nproc) sudo make install ``` #### 转换模型训练完成后的YOLO模型转换成适用于ncnn框架的形式。通常情况下,这意味着要从原始格式(例如PyTorch或Darknet)转为`.param`与`.bin`两个部分表示的结构化形式。 可以借助Python脚本辅助此过程;具体命令取决于所使用的初始模型类型及其对应的转换器。 #### 开发应用程序代码 编写一段简单的程序读取上述转换所得参数文件,并调用ncnn API执行前向传播计算得到最终输出结果。这里给出一个基于C++语言的例子片段: ```cpp #include "net.h" using namespace std; int main(int argc, char** argv){ // 加载模型 ncnn::Net yolo; yolo.load_param("yolov3-tiny.param"); yolo.load_model("yolov3-tiny.bin"); // 创建输入张量... } ``` #### 测试与优化 最后,在实际硬件平台上测试新创建的应用程序,评估其表现情况——特别是响应时间和准确性方面。如果有必要的话,则进一步调整超参数设置或是尝试其他更高效的算法变体来提升整体效率[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值