通过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相关推荐
- TVM:在树莓派上部署预训练的模型
TVM:在树莓派上部署预训练的模型 之前我们已经介绍如何通过Python接口(AutoTVM)来编译和优化模型.本文将介绍如何在远程(如本例中的树莓派)上部署预训练的模型. 在设备上构建 TVM Ru ...
- 树莓派4b上部署yolov3和v3-tiny记录带截图
首先在 PC 上进行yolov3的模型训练和测试,得到.weight和.cfg文件,这两个文件要进行模型的转换然后在树莓派上部署. 一.在树莓派上烧录镜像,buster10系统即可,在系统上更改国内源 ...
- 在树莓派3B+上部署Intel NCS2神经网络计算棒
2018.12.20日 英特尔更新了OpenVINO Toolkit R5版本.该版本添加了对树莓派的支持.作为NCS2的官方开发套件,OpenVINO在此之前只能在台式机ubuntu 16.04上使 ...
- 【全流程】从头在树莓派4B上部署自己训练的yolov5模型(配合NCS2加速)
目录 0.前言 1.我的环境 2.整个流程 3.具体过程 3.1 训练自己的yolov5模型 3.2 将.pt模型转换为.onnx模型 3.3 在本地将.onnx转换成IR模型 3.4 在树莓派4B上 ...
- 使用ncnn在树莓派部署自己的yolov5lites模型
使用ncnn在树莓派部署自己的yolov5lites模型 文章目录 使用ncnn在树莓派部署自己的yolov5lites模型 前言 一.windows10上训练自己的yolov5lites模型 1 下 ...
- 树莓派3B上部署运行.net core 2程序
针对Linxu arm处理器如何部署.net core 2的资料很少,网上找到几篇但都写得不够详细,按照他们教程来撞墙了,折磨了几天终于部署成功了,先上一张运行成功的图 1.windows系统中,在项 ...
- Pycharm如何将项目部署到树莓派上?
文章目录 一.小序 二.部署项目 1.新建一个项目 2.部署项目 3.先连接到服务器,再映射到本地 ①连接 ②映射 三.测试部署 一.小序 如题,如何部署?(前提是已打开SSH服务,FTP应该也可以) ...
- 树莓派4b部署LNMP+Tor,搭建在Dark web上的网站
树莓派4b部署LNMP+Tor,搭建在Dark web上的网站 开始前的准备 系统 下载Raspberry Pi OS 烧录进TF卡 SSH 打开树莓派SSH功能 用Putty连接树莓派 修改SSH密 ...
- 如何将PaddleDetection模型在树莓派4B上部署?
[飞桨开发者说]侯继旭,海南师范大学本三自动化专业在读,人工智能开发爱好者,曾获2019中国高校计算机大赛-人工智能创意赛海南省一等奖.2019年度海南省高等学校科学研究"人工智能" ...
- 树莓派4B部署YOLOv5目标检测模型部署(包含加速方法以及模型训练方法总结)
树莓派4B部署YOLOv5目标检测模型部署 1.工作内容简介: (1)训练鱼类目标识别模型.首先建立水下鱼类目标数据集,由于目前国内暂时并没有可用红鳍东方鲀标注数据集,本文利用Labelimage软件 ...
最新文章
- 16岁应该遵循什么_16岁就被张艺谋选中,刘浩存到底有什么来头?
- 各个大厂的机器学习平台概述
- 【Android】Android之WiFi开发应用示例
- 如何在Ubuntu里安装Helm
- java executor spring_Spring+TaskExecutor实例
- TOMCAT启动完成但是ECLIPSE仍然显示starting....
- 前端学习(2325):angular之添加新组件
- linux 谷歌浏览器设置代理_linux下chrome+Proxy Switchy+ssh和firefox+autoproxy+ssh | 学步园...
- RFC 2544 标准—以太网测试仪
- 手把手学会gitbub(4)
- c语言tc2.0编译器下载,c语言编译器|c语言编译器(wintc)_绿茶手机网
- 如何提高团队管理能力10
- 视频直播的 推流是啥意思
- win10高危服务_Win10有哪些可以安全禁用的服务?Win10安全禁用服务
- python编程实例 下载-Python编程从入门到实践PDF下载高清完整扫描原版
- 标准引领市场:四方光电参编《便携式甲醛检测仪》团体标准
- SQL语句报错:1062, “Duplicate entry ‘XXX‘ for key ‘XXX‘
- brendan eich_编程领域的变革者:Brendan Eich
- qq三国挂机云服务器,云服务器挂机QQ三国游戏的流程和实际操作概况记录
- 学习笔记20220513