使用ncnn在树莓派4B上部署nanoDet-m网络(12fps)
1. 背景
在机器人的应用中,目标检测是一个重要的课题。深度学习的快速发展,在检测的效果方面对比大多数传统检测算法,都有明显的优势。但是将深度学习模型部署到端侧设备上,实现高效的推理,同样是一个问题很多的领域。
在机器人的主控中,树莓派和Jetson系列单板机被使用较多。这篇blog以树莓派4b为例,展示将深度学习模型部署到低算力平台的方法。
与深度学习在GPU上的推理不同,为了实现高效推理,一般都会选择使用推理框架,而不是直接使用python的推理代码进行推理。在CPU侧,常用的推理框架有ncnn、mnn、openvino等;在GPU侧,有tensorrt;高通在htp上,同样有snpe和qnn等推理框架。本blog使用树莓派的CPU进行推理,使用ncnn作为推理框架。
2. 效果
下图所示是在树莓派4b上推理nanoDet-m网络的结果。
图中的两个场景,在被检测目标较为密集的场合,检测算法也能达到11fps,且识别率很高。
除了网络的树莓派端侧推理结果之外,我还统计了一些在推理时,树莓派的相关信息。
将树莓派超频后,推理1分钟多的视频,平均fps可达11.4,最高可达12fps。且温度在合理的范围内。超频后,功耗比不超频状态下多了2.1w左右。
工作状态 | CPU频率(Hz) | CPU温度(℃) | GPU频率(Hz) | GPU温度(℃) | 功耗 | 内存占用(with desktop) | 平均fps |
---|---|---|---|---|---|---|---|
无作业 | 600M | 34 | 200M | 33.6 | 3.135w | 318M | 无 |
推理nanoDet-m | 1.5G | 43 | 500M | 42 | 5.357w | 494M | 10.3fps |
推理nanoDet-m(超频) | 2.0G | 51.2 | 700M | 52.6 | 7.446w | 446M | 11.4fps |
下图是我使用的功耗测试仪
3.nanoDet-m网络
如下图所示是这次要部署的网络,下图仅截取了部分backbone和部分heads网络。
下表是以YOLOv4 tiny作为对比对象的数据。nanoDet-m实现了在较低的FLOPs和params的情况下,得到了不错的mAP值,是一个非常适合端侧低算力设备推理的网络结构。
Model | backbone | resolution | COCO mAP | FLOPs | params |
---|---|---|---|---|---|
NanoDet-m | ShuffleNetV2 1.0x | 320*320 | 20.6 | 0.72G | 0.95M |
YOLOv4 tiny | CSPDarknet53 | 416x416 | 21.7 | 6.5B | 3.1M |
4. 我的树莓派信息
硬件: 树莓派4b、2G RAM、32G ROM、荣耀平板8充电头供电、全套散热装,如下图
软件:raspberry OS、上游分支Debian GNU/Linux 11 (bullseye)。
5. ncnn推理相关软件安装
下面介绍在树莓派4b端侧推理nanoDet-m网络,需要安装的组件以及安装方法。
5.1 安装ncnn
执行uname -a
,确保是aarch64
架构的系统。
执行如下安装指令
# check for updates
sudo apt-get update
sudo apt-get upgrade
# install dependencies
sudo apt-get install cmake wget
sudo apt-get install build-essential gcc g++
sudo apt-get install libprotobuf-dev protobuf-compiler
# download ncnn
git clone --depth=1 https://github.com/Tencent/ncnn.git
# install ncnn
cd ncnn
mkdir build
cd build
# build 64-bit ncnn
cmake -D NCNN_DISABLE_RTTI=OFF -D NCNN_BUILD_TOOLS=ON \
-D CMAKE_TOOLCHAIN_FILE=../toolchains/aarch64-linux-gnu.toolchain.cmake ..
make -j4
make install
# copy output to dirs
sudo mkdir /usr/local/lib/ncnn
sudo cp -r install/include/ncnn /usr/local/include/ncnn
sudo cp -r install/lib/libncnn.a /usr/local/lib/ncnn/libncnn.a
在~/ncnn/build/install/bin
文件夹下,有很多转换模型的工具,这在我们后面的博客中会用得到,将onnx模型转换为ncnn支持的模型。
5.2 安装opencv4.5.5
(1)更新EEPROM
树莓派4b支持更新EEPROM中的固件,可有效降低树莓派的运行温度。
sudo rpi-eeprom-update
sudo rpi-eeprom-update -a
sudo reboot
(2) 源码编译安装opencv
不要使用pip或者apt安装opencv,这两种方式不能保证是64bit版本的,性能不能充分在树莓派上发挥出来。
在Preferences -> Raspberry Pi Configuration -> Performance -> GPU Memory
设置项中,给GPU分配至少128M显存。
执行以下命令安装
# check for updates
sudo apt-get update
sudo apt-get upgrade
# dependencies
sudo apt-get install build-essential cmake git unzip pkg-config
sudo apt-get install libjpeg-dev libpng-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install libgtk2.0-dev libcanberra-gtk* libgtk-3-dev
sudo apt-get install libgstreamer1.0-dev gstreamer1.0-gtk3
sudo apt-get install libgstreamer-plugins-base1.0-dev gstreamer1.0-gl
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install python3-dev python3-numpy python3-pip
sudo apt-get install libtbb2 libtbb-dev libdc1394-22-dev
sudo apt-get install libv4l-dev v4l-utils
sudo apt-get install libopenblas-dev libatlas-base-dev libblas-dev
sudo apt-get install liblapack-dev gfortran libhdf5-dev
sudo apt-get install libprotobuf-dev libgoogle-glog-dev libgflags-dev
sudo apt-get install protobuf-compiler
下载opencv4.5.5的源码包
cd ~
# 如果网络连接失败,在其他电脑上 访问这个网址下载好,再放到树莓派的 ~/ 目录下
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.5.5.zip
wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/4.5.5.zip
unzip opencv.zip
unzip opencv_contrib.zip
mv opencv-4.5.5 opencv
mv opencv_contrib-4.5.5 opencv_contrib
在执行编译之前,如果是2G RAM的树莓派,需要扩容swap分区,大于2G RAM的版本可忽略此项。
扩容swap方式(仅限2G RAM)
使用开源代码rpi_zram, 对swap进行扩容,按照github上的README操作就可以。
编译opencv4.5.5
cd ~/opencv
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \
-D ENABLE_NEON=ON \
-D WITH_OPENMP=ON \
-D WITH_OPENCL=OFF \
-D BUILD_TIFF=ON \
-D WITH_FFMPEG=ON \
-D WITH_TBB=ON \
-D BUILD_TBB=ON \
-D WITH_GSTREAMER=ON \
-D BUILD_TESTS=OFF \
-D WITH_EIGEN=OFF \
-D WITH_V4L=ON \
-D WITH_LIBV4L=ON \
-D WITH_VTK=OFF \
-D WITH_QT=OFF \
-D OPENCV_ENABLE_NONFREE=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D INSTALL_PYTHON_EXAMPLES=OFF \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-D BUILD_EXAMPLES=OFF ..
make -j4
sudo make install
sudo ldconfig
验证安装,进入python编程环境
import cv2
print(cv2.__version__)
5.3 安装codeblocks
使用codeblocks在树莓派上进行开发。喜欢remote develop的也可以直接使用vscode的远程开发功能。
6. 推理通路代码
这部分内容,以及模型转换内容、树莓派超频等,我们留在下一节展开说明。
- 分享
- 举报
-
浏览量:895次2024-01-10 17:23:08
-
浏览量:5537次2021-04-06 17:40:39
-
浏览量:1013次2024-01-10 17:34:04
-
浏览量:2642次2024-02-28 15:36:09
-
浏览量:1542次2023-11-14 13:55:50
-
浏览量:3121次2019-06-27 08:53:15
-
浏览量:2515次2019-07-11 13:51:22
-
浏览量:1488次2024-02-19 17:07:05
-
浏览量:647次2023-06-03 16:03:04
-
浏览量:1099次2023-06-02 17:42:01
-
浏览量:2111次2023-01-12 15:47:48
-
浏览量:2097次2019-07-12 08:55:07
-
浏览量:3846次2018-12-19 14:02:27
-
2020-06-23 17:04:09
-
浏览量:2241次2020-08-05 21:02:35
-
浏览量:3659次2022-01-04 09:00:13
-
浏览量:4781次2021-12-23 09:00:20
-
浏览量:4343次2021-12-24 09:00:25
-
浏览量:1907次2020-08-03 11:18:53
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
热爱秃头的每一天
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明