通过NCNN在树莓派上部署Fastest YOLO

2023-11-07 18:40
文章标签 部署 yolo 树莓 ncnn fastest

本文主要是介绍通过NCNN在树莓派上部署Fastest YOLO,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:

最近一直在用树莓派做深度学习方面的模型部署,从最开始的直接移植官方的yolov5模型,到自己精简模型结构压缩参数再放到树莓派上跑,最后的结果总是能跑但FPS过于低,跑个图片还能接受,但是跑实时摄像头就尤其慢。

在重重受挫后,开始考虑用各种架构。最开始是用Intel的Openvino去做,但是一是部署和安装环境的过程极其艰难,其次是缺少英特尔神经棒的硬件支持,半道崩阻了。不过好在在知乎上看到了dog-qiuqiu的Fastest YOLO,大佬说该模型在树莓派上能跑到100多帧。大喜,明确结果且可行性较高,遂在磕磕碰碰中跑出了结果并且总结了许多经验,写下这篇博客以备自己后续参考。

一、系统烧录

环境:windows11、树莓派4b(8g)

1.树莓派64位镜像源:百度网盘链接:点我   提取码:k9r9

注意:这里安装的是Raspbian-64位系统,我尝试过ubuntu的系统,最后效果不是很好(而且确实在树莓派上跑ubuntu有点点卡顿),最主要的是ubuntu的话就不好用VNC Viewer来控制树莓派,那就有点得不偿失了。(VNC Viewer是真的很好用!!)

2.烧录工具:win32DiskImager

烧录的过程就很容易了在这里不演示。

3.VNC Viewer远程控制树莓派

1)首先在电脑端安装VNC Viewer:官网直接下载

windows用户直接点击中间的Download即可。下载后直接安装,安装在任意一个盘都行。

2)配制树莓派打开VNC功能:

 

 

 

 

然后关闭界面即可,现在已经开启了树莓派的vnc功能了。然后因为我用的是wifi,树莓派ip地址不怎么变动,即使变动了也很方便查看:

 或者直接将鼠标移动到树莓派桌面的右上角wifi图标处,停留几秒就会显示出IP地址。

3)远程控制

打开电脑端的VNC Viewer,第一次打开直接点击下方不注册用户 直接使用软件的按钮。然后:

 然后就能在自己的电脑上远程控制树莓派了,这种方法较为简单,而且上方还有文件传输功能,甚至能支持鼠标在树莓派和电脑之间右键复制粘贴,可谓非常好用!

二、安装OpenCV

截止到文章写作日期(2023.7.2),树莓派64位系统安装OpenCV的流程已经算是非常容易。(之前走过太多太多的弯路,试过无数种方法,都没成功,这次总算摸索出了自己的一套方法)


步骤一:

#先安装opencv
pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple#再更新numpy
pip install numpy --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple#以防万一,再安装一下libopencv-dev
sudo apt install libopencv-dev

步骤二:

#创建opencv.pc文件
cd /usr/local/lib
sudo mkdir pkgconfig
cd pkgconfig
sudo touch opencv.pc

然后在opencv.pc中添加以下信息,注意这些信息需要与我们安装opencv时的库路径对应,我的是这样:

#先查看一下我们下载的opencv的版本号,直接在终端中输入:python,然后回车
import cv2         #回车
cv2.__version__    #回车后就能看到对应的版本号,我下载的版本号是4.8.0#再用nano打开opencv.pc
sudo nano opencv.pc#按下ctrl+O,回车确定后,写入以下信息:注意要改版本号
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/libName: opencv
Description: The opencv library
Version:4.8.0
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann  -lopencv_core
~#再按ctrl+s保存,ctrl+x退出编辑
#然后将文件导入到环境变量:
export  PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

步骤三:

在opencv版本更新后,可以去usr/include文件夹中,找到opencv4,点进去才是opencv2,所以头文件的路径中多了一个opencv4的文件夹,我们要将opencv2的文件夹也链接到include文件夹下:

sudo ln -s /usr/include/opencv4/opencv2 /usr/include/

至此,opencv才算成功安装好。

三、编译NCNN

1.安装依赖

sudo apt-get install -y gfortran
sudo apt-get install -y libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install -y libgflags-dev libgoogle-glog-dev liblmdb-dev libatlas-base-dev

2.下载NCNN

git clone https://github.com/Tencent/ncnn

3.编译

#先下载cmake
sudo apt install cmake#再编译ncnn
cd ncnn
mkdir build
cd build
cmake ../
make -j4
make install 

编译结束后在build目录下会出现三个文件夹:examples、install、tools,至此ncnn编译成功。

四、模型转化与测试

1.模型及权重的获取

首先从官网获得Fastest YOLO的源代码:网址链接

在自己的电脑上自己创建模型训练任务,获取权重文件,这里不上传我自己跑的模型权重,不过为了演示效果,就引用其他作者分享的权重:百度网盘链接  提取码:ogm4

下载后就能获得yolo-fastest-xl.cfg和yolo-fastest-xlweights这两个文件。

2.权重文件的转化

1)在之前下载好的ncnn文件夹中新建一个Model文件夹,将yolo-fastest-xl.cfg和yolo-fastest-xl.weights文件拷贝到该Model文件夹中。直接用cp命令也可以。

2)cd到ncnn/build/tools/darknet文件下,输入:

#将模型权重转化为param和bin文件
./darknet2ncnn ../../../Model/yolo-fastest-xl.cfg ../../../Model/yolo-fastest-xl.weights ../../../Model/yolo-fastest-xl.param ../../../Model/yolo-fastest-xl.bin

3)再将yolo-fastest-xl.param和yolo-fastest-xl.bin文件拷贝到ncnn/build/tools中,并且cd到该目录下,输入:

#即用ncnnoptimize优化,后面的数字代表:0指的的是fp32,1指的是fp16
./ncnnoptimize yolo-fastest-xl.param yolo-fastest-xl.bin new.param new.bin 1

4)在树莓派中同样下载一份Fastest YOLO的源代码,将new.param和new.bin复制到Yolo-Fastest-master/sample/ncnn/model目录下

5)将ncnn/build/install文件夹下的三个文件夹:bin、include、lib都复制到Yolo-Fastest-master/sample/ncnn下,如下图:

 此时,除了demo文件需要我们之后生成外,应该总共有8个文件。

6)修改demo.cpp文件

首先在头文件中加上:

#include "opencv2/imgproc/imgproc_c.h"

 再修改testCam()为:

int testCam() {YoloDet api;//Init modelapi.init("model/new.param", "model/new.bin");

7)运行demo文件

在Yolo-Fastest-master/sample/ncnn件夹下打开终端,输入:

sh build.sh

然后等待一会儿就会出现上面那个绿色的demo文件,在终端中输入:

./demo

就能把程序运行起来,至此一个完整的流程就做完了。

8)最后还有一个线程的优化:

修改F:\cha\Yolo-Fastest-master\sample\ncnn\src文件夹下的YoloDet.cpp和include文件夹里的YoloDet.h这两个文件(这里参考生命不息,学习不止大佬 的方法):

 这样就成功用NCNN在树莓派上部署了Fastest YOLO模型了。

这篇关于通过NCNN在树莓派上部署Fastest YOLO的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365564

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

烟火目标检测数据集 7800张 烟火检测 带标注 voc yolo

一个包含7800张带标注图像的数据集,专门用于烟火目标检测,是一个非常有价值的资源,尤其对于那些致力于公共安全、事件管理和烟花表演监控等领域的人士而言。下面是对此数据集的一个详细介绍: 数据集名称:烟火目标检测数据集 数据集规模: 图片数量:7800张类别:主要包含烟火类目标,可能还包括其他相关类别,如烟火发射装置、背景等。格式:图像文件通常为JPEG或PNG格式;标注文件可能为X

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起

Solr部署如何启动

Solr部署如何启动 Posted on 一月 10, 2013 in:  Solr入门 | 评论关闭 我刚接触solr,我要怎么启动,这是群里的朋友问得比较多的问题, solr最新版本下载地址: http://www.apache.org/dyn/closer.cgi/lucene/solr/ 1、准备环境 建立一个solr目录,把solr压缩包example目录下的内容复制

Spring Roo 实站( 一 )部署安装 第一个示例程序

转自:http://blog.csdn.net/jun55xiu/article/details/9380213 一:安装 注:可以参与官网spring-roo: static.springsource.org/spring-roo/reference/html/intro.html#intro-exploring-sampleROO_OPTS http://stati

树莓派5_opencv笔记27:Opencv录制视频(无声音)

今日继续学习树莓派5 8G:(Raspberry Pi,简称RPi或RasPi)  本人所用树莓派5 装载的系统与版本如下:  版本可用命令 (lsb_release -a) 查询: Opencv 与 python 版本如下: 今天就水一篇文章,用树莓派摄像头,Opencv录制一段视频保存在指定目录... 文章提供测试代码讲解,整体代码贴出、测试效果图 目录 阶段一:录制一段

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群

828华为云征文|华为云Flexus X实例docker部署rancher并构建k8s集群 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体

部署若依Spring boot项目

nohup和& nohup命令解释 nohup命令:nohup 是 no hang up 的缩写,就是不挂断的意思,但没有后台运行,终端不能标准输入。nohup :不挂断的运行,注意并没有后台运行的功能,就是指,用nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,注意了nohup没有后台运行的意思;&才是后台运行在缺省情况下该作业的所有输出都被重定向到一个名为nohup.o