从零开始用树莓派4B玩深度学习

作为深度学习方面的初学者,中间经历了很多曲折才得以初窥门径。
留下一些经验文字供后来者参考。
前言
1)学习深度学习-图像识别的目的:智能质检
很简单,作为制造业从业的老人(快5张了,质检方面的管理人员),面对现在层出不穷的人工作业不良和成本控制压力,很自然的会考虑用人工智能和图像处理来进行一些明显但是又容易被忽略的内容的质检工作。
比如这六个品牌的都源于同一个基础产品在一条生产线组装,仅仅是贴着不同品牌的Logo(虚拟场景),早晚会把印着Logo的盖子装错一两个然后流失到用户手里。
虚拟OEM贴牌场景
所以,学习是为了用。
2)学习平台
刚开始的时候没什么概念,试图学习tensorflow,没有概念的情况下挺难的。后来还有其他的CUDA,CUDNN的版本配合问题等等。结果被绕得晕头转向。
于是转向PaddlePaddle平台,准确来讲,是PaddleX的GUI工具。把中间的网络模型构建的编码跳过,直接拿成熟的网络参数来用。还可以使用AIstudio的免费GPU来练习。在自建数据集上训练自己的模型和参数评估。

————————中间过程略去一万字————————
3)检测平台
有了可运行的模型和初步完成的预测代码,怎么变成一个可以布置到生产一线的检测系统?正常来讲,直接架一台电脑和布置好摄像头是最简单不过的了。还方便和MES系统联网进行流程控制。
但是偶尔也有一些太简单的小问题,不值得投入一台电脑和相应的网络、管理资源去运营。于是就会考虑用树莓派之类的廉价开发板来搭建一个EdgeAI。
———————————以下正文———————————
全新树莓派入手通电点亮之后,开始逐步升级、设置和编译PaddleLite。
一、完成Linux 本地编译环境的准备

  1. 开启SSH服务
    因为和树莓派一块来的屏幕很小,不方便看着它操作和编程。SSH登录远程操作很有必要。
    进入终端,输入:
sudo /etc/init.d/ssh start
  1. 更换更新源
    打开更新软件包索引文件
sudo nano /etc/apt/sources.list

在文件尾部添加两行清华源的链接。

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

保存后退出
更新软件包索引

sudo apt-get update
  1. 更改系统源
sudo nano /etc/apt/sources.list.d/raspi.list

文件末尾增加中科大的

deb http://mirrors.ustc.edu.cn/archive.raspberrypi.org/debian/ buster main ui
  1. 更改pip源
    创建pip目录和pip文件
mkdir ~/.pip
sudo nano ~/.pip/pip.conf

编辑文件,使用豆瓣源

[global]
timeout =6000
index-url =http://pypi.douban.com/simple/
[install]
use-mirrors =true 
mirrors =http://pypi.douban.com/simple/ 
trusted-host =pypi.douban.com

保存退出后

sudo apt-get upgrade
  1. 编译库准备
    下载安装patchelf
sudo apt install patchelf

完成gcc、g++、opencv、cmake的安装:

sudo apt-get install -y gcc g++ make wget python unzip patchelf python-dev

下载cmake最新版本并解压缩

wget https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5.tar.gz
tar -zxvf cmake-3.20.5.tar.gz

#进入文件夹并完成配置

cd cmake-3.20.5
./configure

———————————————————————————
此处若出现Could NOT find OpenSSL, try to set the path to OpenSSL root folder in the system variable OPENSSL_ROOT_DIR (missing: OPENSSL_LIBRARIES OPENSSL_INCLUDE_DIR)这种错误。
可输入(安装OpenSSL的编译依赖):

sudo apt-get install libssl-dev

————————————————————————————

make
sudo make install

确认cmake正确编译和安装

cmake --version

二、PaddleLite源码编译

  1. 下载Paddle-Lite 源码
    下载Paddle-Lite源码 并切换到release分支
git clone https://gitee.com/paddlepaddle/paddle-lite.git

git clone https://github.com/PaddlePaddle/Paddle-Lite.git

尽量从GitHub下载,gitee里面的版本相对于Github更新有点滞后。网络不好时需要反复多试几次。当前PaddleLite发布版最新为2.9。

cd paddle-lite
git checkout release/v2.9
rm -rf third-party

源码下载完成后手动将Paddle-Lite目录其中的third-party 目录删除,这将使得编译脚本自动从国内CDN下载第三方库文件,否则因为里面一些指向古狗的库不能下载或者极慢。

多数文章建议将默认的4线程编译切换成单线程编译,我自己测试的4G版的树莓派4b的配置支持双线程编译测试没什么问题。

export LITE_BUILD_THREADS=2

编译Paddle-Lite 预测库

./lite/tools/build_linux.sh --arch=armv7hf --with_extra==ON --with_python=ON --python_version=3.7

上述指令有多种参数配置,你可以按照你的实际需求进行配置:

./lite/tools/build_linux.sh help

具体选项
–arch: (armv8|armv7|armv7hf) arm版本,默认为armv8
–toolchain: (gcc|clang) 编译器类型,默认为gcc
–with_extra: (OFF|ON) 是否编译OCR/NLP模型相关kernel&OP,默认为OFF,只编译CV模型相关kernel&OP
–with_python: (OFF|ON) 是否编译python预测库, 默认为 OFF
–python_version: (2.7|3.6|3.7等等) 编译whl的Python版本,默认为 None
–with_cv: (OFF|ON) 是否编译CV相关预处理库, 默认为 OFF
–with_log: (OFF|ON) 是否输出日志信息, 默认为 ON
–with_exception: (OFF|ON) 是否在错误发生时抛出异常,默认为 OFF

安装Paddle-Lite
进入dist目录下
编译后的文件结构树状图如下,除了armv8实际为armv7hf以外其余相同:
inference_lite_lib.armlinux.armv8
├── cxx C++ 预测库和头文件
│ ├── include C++ 头文件
│ │ ├── paddle_api.h
│ │ ├── paddle_image_preprocess.h
│ │ ├── paddle_lite_factory_helper.h
│ │ ├── paddle_place.h
│ │ ├── paddle_use_kernels.h
│ │ ├── paddle_use_ops.h
│ │ └── paddle_use_passes.h
│ └── lib C++ 预测库
│ ├── libpaddle_api_light_bundled.a C++ 静态库
│ └── libpaddle_light_api_shared.so C++ 动态库
├── demo
│ └── python Python 预测库demo

└── python Python 预测库(需要打开with_python选项)
├── install
│ └── dist
│ └── paddlelite-.whl Python whl包
└── lib
└── lite.so Python 预测库
我们的目标文件是paddlelite-
.whl,对其进行安装

cd paddle-lite/build.lite.linux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf/python/install/dist 

为编译出来的python API文件包的编码

pip install paddlelite-*.whl

最后验证一下paddlelite 是否可以import:
通过pip list可以查看paddlelite的安装版本:

PaddleLite安装完成后还需要安装OpenCV-Python
三、安装OpenCV-Python

sudo apt-get update
sudo apt-get upgrade

树莓派相关库安装:

sudo apt-get update
sudo apt-get install libjpeg-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libpng12-dev
sudo apt-get install libqtgui4 libqt4-test
sudo apt-get install libjasper-dev

OpenCV模块pip安装

sudo pip3 install opencv-python

最后确认Python中Import CV2安装正确

四、基于PaddleLite 的Python API 部署

Python 3.7作为默认Python,pip安装PaddleLite本地编译出来的安装包
我的包长这样:
在这里插入图片描述
代码可以直接参考这篇博文的内容。我在Win10 PC和4GB版的树莓派上都能成功跑通。
Paddle-Lite——基于python API部署PaddlePaddle的自定义模型并实现视频流和单张图片的预测

PS1:值得注意的是,在PC上转化的.nb模型文件在树莓派上一开始不能打开,后来能打开了又提示Kernel问题。于是直接把PaddleX训练后Export出来的推理模型传到树莓派上用已安装的Paddlelite来完成转化。这样转化的模型在树莓派上使用就没问题了。

PS2:训练完毕Export 模型之前可以在PaddleX GUI内选择量化,量化后的模型精度损失很小但是速度能提高30%。输入608x608,没量化的MobileNetV1转化成PaddleLite模型后在树莓派上要1.5s才能识别一张图,量化后的模型再转化,跑起来基本只要1s。

  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值