【树莓派】yolov5 Lite,目标检测,树莓派4B,推理v5lite-e_end2end.onnx,摄像头实时目标检测

文章目录

    • [YOLOv5 Lite: 在树莓派上轻松运行目标检测](#YOLOv5 Lite: 在树莓派上轻松运行目标检测)
      • [1. 环境配置](#1. 环境配置)
      • [2. 克隆项目](#2. 克隆项目)
      • [3. 安装依赖项](#3. 安装依赖项)
      • [4. 下载模型权重](#4. 下载模型权重)
      • [5. 理解end2end的含义](#5. 理解end2end的含义)
      • [6. 示例推理](#6. 示例推理)
      • [7. 文件介绍](#7. 文件介绍)
      • [8. 把文件弄到树莓派4B执行](#8. 把文件弄到树莓派4B执行)
      • [9. 进一步尝试fp16的onnx(行不通)](#9. 进一步尝试fp16的onnx(行不通))
      • [10. 视频流检测](#10. 视频流检测)

这里有大概的环境配置:
https://qq742971636.blog.csdn.net/article/details/138048132

yolov5树莓派跑不起来,用yolov5 Lite可以:
https://github.com/ppogg/YOLOv5-Lite

YOLOv5 Lite: 在树莓派上轻松运行目标检测

今天我将向您介绍如何使用YOLOv5 Lite在树莓派上进行目标检测。YOLOv5 Lite是一种轻量级目标检测模型,适用于资源受限的设备,如树莓派。在本文中,我将分享环境配置、项目克隆、模型部署以及示例推理的详细步骤。

1. 环境配置

首先,让我们配置环境以准备部署YOLOv5 Lite。以下是您需要执行的命令:

bash 复制代码
export http_proxy=http://192.168.3.2:10811
export https_proxy=http://192.168.3.2:10811

2. 克隆项目

接下来,我们将克隆YOLOv5 Lite项目。执行以下命令:

bash 复制代码
git clone https://github.com/ppogg/YOLOv5-Lite.git

3. 安装依赖项

进入项目目录并安装所需的依赖项:

bash 复制代码
cd ~/YOLOv5-Lite-master/python_demo/onnxruntime
python3 -m pip install onnx onnxruntime

4. 下载模型权重

现在,让我们下载YOLOv5 Lite的模型权重,您可以通过以下链接获取:

5. 理解end2end的含义

在YOLOv5 Lite中,我们使用end2end方法进行推理。这意味着模型内置了非极大值抑制(NMS),无需额外的后处理步骤。这样可以极大地简化代码并提高推理速度。

比如对下图的左图推理,可以得到12*6的结果:

6. 示例推理

在Windows系统上,使用YOLOv5 Lite进行推理非常快速,达到了每秒100帧的速度。这使得它成为在资源受限的设备上进行实时目标检测的理想选择。

7. 文件介绍

onnx推理不用管太多底层,不像mnn那样,所以更简单一点,经过上面的步骤,我们有如下文件:

(1)v5lite_e_onnx_end2end.py

(2)v5lite-e_end2end.onnx

执行v5lite_e_onnx_end2end.py就可以直接推理任意图片并保存,下图中的所有文件我放这里:

clike 复制代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?u=bdf8eeb84961492ba2b62f7bfee641ea&tab=BB08J2

8. 把文件弄到树莓派4B执行

FPS只能达到9,即是每秒大概可以推理9帧图像。因为我们是onnx的fp32的运算,这个运算对树莓派来说还是比较大的,最快看宣传可以达到17帧,需要做一些量化之类的,我这里就不做了。

这是代码执行:

执行结果保存为save.jpg,打开看到:

9. 进一步尝试fp16的onnx(行不通)

是否可以使用fp16的onnx推理呢,速度会不会快一些呢,尝试一下,win上安装环境:

clike 复制代码
pip install onnxmltools  onnxconverter-common

执行python代码:

clike 复制代码
import onnxmltools
# 加载float16_converter转换器
from onnxmltools.utils.float16_converter import convert_float_to_float16
# 使用onnxmltools.load_model()函数来加载现有的onnx模型
# 但是请确保这个模型是一个fp32的原始模型
onnx_model = onnxmltools.load_model('./v5lite-e_end2end.onnx')
# 使用convert_float_to_float16()函数将fp32模型转换成半精度fp16
onnx_model_fp16 = convert_float_to_float16(onnx_model)
# 使用onnx.utils.save_model()函数来保存,
onnxmltools.utils.save_model(onnx_model_fp16, './v5lite-e_end2end_fp16.onnx')

有警告,但是文件得到了,并且是一半的大小:

执行推理失败了,说明转换的时候有的nms算子还是不能成功转换的,这一条路堵住了。

10. 视频流检测

这一步就比较简单了,建立一个文件写点opencv-python的代码,进行usb摄像头检测即可:

所使用的代码如下,其中v5lite_e_onnx_end2end.py在文档中去搜索获取感谢

clike 复制代码
import cv2
from v5lite_e_onnx_end2end import yolov5_lite
if __name__ == '__main__':
    # 初始化摄像头
    cap = cv2.VideoCapture(0)  # 0 表示第一个摄像头,如果有多个摄像头,可以尝试不同的索引

    # 加载模型
    modelpath = 'v5lite-e_end2end.onnx'  # 模型路径
    classfile = 'coco.names'  # 类别文件路径
    net = yolov5_lite(modelpath, classfile)  # 加载模型

    # 循环读取摄像头流
    while True:
        ret, frame = cap.read()  # 读取一帧图像
        if not ret:
            break  # 如果没有读取到图像,退出循环

        # 进行检测
        detected_img = net.detect(frame)

        # 显示检测结果
        cv2.imshow('YOLOv5Lite Detection', detected_img)

        # 检测按键,如果按下 q 键则退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # 释放摄像头并关闭所有窗口
    cap.release()
    cv2.destroyAllWindows()

下次博客准备把树莓派系统打包到镜像里去,这样可以免得每次都装半天环境,理论上克隆sd卡里所有内容就复刻了一份所有东西了~

相关推荐
智驱力人工智能26 分钟前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
qq_1601448730 分钟前
亲测!2026年零基础学AI的入门干货,新手照做就能上手
人工智能
Howie Zphile30 分钟前
全面预算管理难以落地的核心真相:“完美模型幻觉”的认知误区
人工智能·全面预算
工程师老罗31 分钟前
YOLOv1 核心结构解析
yolo
人工不智能57733 分钟前
拆解 BERT:Output 中的 Hidden States 到底藏了什么秘密?
人工智能·深度学习·bert
盟接之桥35 分钟前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
kfyty72535 分钟前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
h64648564h1 小时前
CANN 性能剖析与调优全指南:从 Profiling 到 Kernel 级优化
人工智能·深度学习
数据与后端架构提升之路1 小时前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
忆~遂愿1 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能