为了验证百度PaddlePaddle发布的工业表计数工程模型的准确性以及效果,分别在PC端和jetson端搭建了环境,亲测实际效果
工业表计数:工业表计读数 — PaddleX 文档
链接中jetson nano c++部署链接失效,可以参考这个:
Nvidia Jetson开发板本地部署 — PaddleX 文档
github链接:https://github.com/PaddlePaddle/PaddleX
一、PC端搭建(比较)
1、下载PaddleX源码:
git clone https://github.com/PaddlePaddle/PaddleX
cd PaddleX
git checkout release/1.3
2、预测执行文件位于PaddleX/examples/meter_reader/
,进入该目录:
cd PaddleX/examples/meter_reader/
3、使用anaconda3创建paddlepaddle环境
(1)安装paddlepaddle-gpu
不要使用默认安装版本,不然会因为版本不匹配,出现不必要的错误
工业表计数的要求版本为
Paddle paddle >= 1.8.0
Python >= 3.5
PaddleX >= 1.0.0
(2)安装完成后的版本版本为:
paddlepaddle-gpu == 1.8.1.post97
Python >= 3.6.13
paddlex==1.3.0
(3)安装命令 直接pip install 包的名称,如安装paddlepaddle-gpu,安装命令为:
pip install paddlepaddle-gpu==1.8.1.post97
4、下载模型以及数据文件
可在上面链接中获取模型以及数据文件
5、实际测试检测效果
单张测试
检测过程
检测原图
检测后的图
二、jetson nx搭建(jetpack 4.6)
1、python预测库
(1)、在jetson平台上pip 直接install的话会找不到对应的安装包,需要去专门的网站上下载针对硬件和软件编译好的.whl包
网站为下载安装Linux预测库 — Paddle-Inference documentation
或者这个网站:Paddle Lite
一定要下载自己系统对应的包,不然出错,我下载的版本
(2)安装
安装之前安装pip3 sudo apt-get install python-pip3
直接pip install paddlepaddle_gpu-2.3.0-cp36-cp36m-linux_aarch64,安装过程中可能会提示所依赖的包版本过高,而python版本低,这个时候需要设置版本号
如pip install paddlepaddle_gpu-2.3.0-cp36-cp36m-linux_aarch64 potobuf==3.8.0
(3)安装paddlex
直接pip安装,为了避免版本问题,直接安装1.3.0
pip3 install paddlex==1.3.0 protobuf==1.8.0
(4)安装过程中遇到的问题
安装scipy报错,一大堆的错误
解决方式:
安装系统依赖项
sudo apt-get install libblas-dev checkinstall
sudo apt-get install liblapack-dev checkinstall
sudo apt-get install gfortran
pip3 install scipy
问题2:
pip3 install pyarrow
报错原因是pip版本低引起
python3 -m pip install --upgrade pip
(5)预测实例
预测命令
原图
预测图
2、C++预测库
(1)下载c++的预测库(在pyhon预测库中下载)
我的下载如图所示,解压存在指定位置就ok
(2)工程部署
工业表计数百度已经给了具体的步骤,如图所示,我这主要记录在编译过程中遇到的奇葩错误,同时纠正一些bug
编译之前需要根据以下链接配置build.sh脚本
Jetson Nano上部署PaddleDection 原生预测方法经验分享 - 知乎
编译过程中所遇到的问题:
问题1:cc1plus:fatal error: xxx/xx.cpp.d:没有那个文件或目录
这个问题需要修改CmakeList.txt的第148行,将-o2修改为-O3
参考了:cc1plus:fatal error: xxx/xx.cpp.d:没有那个文件或目录_驱魔鮔_Roc的博客
https://github.com/PaddlePaddle/PaddleOCR/issues/4654
问题2:no matching function for call to "Paddlex::Model::Init()"
解决方法:修改meter_reader.cpp里中Init函数的参数,使用在meter_reader.cpp里Init的函数赋值了5个参数,而初始化却有8个参数
修改后的函数如下:
至此C++版本的paddlepaddle在jetson nx上部署完成了
测试命令
原图
结果