部署准备1
Posted 小宁宁呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署准备1相关的知识,希望对你有一定的参考价值。
目录
两点:
- 模型的输入与输出
- 模型的预处理与后处理
如果你想了解一个陌生模型的输入与输出该怎么做呢?可以使用VisualDL的模型可视化功能观察模型的输入与输出。
如果你想了解一个陌生模型的预处理,后处理。该怎么做呢?以PaddleHub上的预训练模型为例。我们可以去阅读这个模型在Paddlehub上的源代码来了解它的预处理,后处理。
如果你无法得知模型的输入与输出、预处理与后处理,那么你是无法进行模型部署的。
部署时预处理与后处理与训练时对齐,这是部署时的难点。而不是部署框架使用的本身。
部署的原则,即与训练对齐。
为了进行部署,我们首先需要了解模型的输入与输出,及他的预处理和后处理。这些仍可以通过PaddlePaddle进行。
VisualDL可视化功能的使用
在代码中插入visualDL日志官方代码:
from visualdl import LogWriter
if __name__ == '__main__':
value = [i/1000.0 for i in range(1000)]
# 初始化一个记录器
with LogWriter(logdir="./log/scalar_test/train") as writer:
for step in range(1000):
# 向记录器添加一个tag为`acc`的数据
writer.add_scalar(tag="acc", step=step, value=value[step])
# 向记录器添加一个tag为`loss`的数据
writer.add_scalar(tag="loss", step=step, value=1/(value[step] + 1))
点击可视化板块,选择存储日志目录,选择模型文件,即可得到visualDL结果。
VisualDL可视化结果
根据结果可以看到模型的训练和测试结果的准确率上升,超过0.9,且loss下降至0.1以下,可以判定模型是合适的。
使用visualDL的网络结构功能,可以看到模型的输入和输出。
预处理和后处理对齐
对于图像的预处理部分,还有许多不解,比如数据库的图片大小设置错了,尝试在代码上进行改动后,总是会有各种原因的报错,而且项目里似乎并没有后处理的部分,明天专门解决这部分的问题。
部署流程概括
准备环境。安装好CMake、OpenCV等工具
- C++准备环境:
主要安装OpenCV3.2.0(推荐3.2)与CMake3.10
sudo apt-get update sudo apt-get install gcc g++ make wget unzip libopencv-dev pkg-config wget https://www.cmake.org/files/v3.10/cmake-3.10.3.tar.gz tar -zxvf cmake-3.10.3.tar.gz cd cmake-3.10.3 ./configure make sudo make install
- Python环境准备:
主要是安装,numpy(1.13.3),Pillow(8.1.0),matplotlib(2.1.1),OpenCV(3.2.0)(推荐3.2)
以上工具版本号仅供参考,非必须对齐。
优先推荐通过pip3 install xxx
安装numpy,Pillow,matplotlib,OpenCV。pip install numpy==1.13.3 pillow==8.1.0 matplotlib==2.1.1 opencv=3.2.0
安装matplotlib,OpenCV可能遇到报错,无需慌张,可
apt install python3-dev
后再次使用pip安装。若依旧不成功可使用apt install python3-matplotlib
,apt install python3-opencv
安装。配置好环境后稍后克隆一份部署Lemon源码,进入
cd ./lemon/wheels
文件夹后pip3 install paddlelite-2.8rc0-cp36-cp36m-linux_aarch64.whl
(根据自己的Python版本选择,提供了Python2.7,3.5,3.6,3.7的包)
部署代码示例,这是接下来工作需要重点理解的地方。
git clone https://github.com/hang245141253/lemon.git
准备PaddleLite推理库
树莓派3blinux64位使用如下推理库,extra.tar含有模型的flatten算子。
下载网址https://github.com/PaddlePaddle/Paddle-Lite/releases/
uname -a 命令可知系统位数。
准备模型
- 使用opt工具将Paddle模型转化成Paddle Lite nb模型 这里已经将opt工具作为数据集形式上传到了Notebook中,只需执行如下代码即可完成模型转化。
!pip install paddlelite==2.9
!paddle_lite_opt --model_file=output.pdmodel --param_file=output.pdiparams --optimize_out==face
一开始会报错
Check failed: (idx < BlocksSize()): 0!<0 idx >= blocks.size() Aborted (core dumped)
后来发现model保存的是用于预测的而没有save用来部署的模型。
model.save('infer/zodiac')#模型用来预测
model_2.save('infer/zodiac', training=False)#模型用来部署
重新保存一份模型,得到需要的Paddle Lite nb 模型。
构建并运行程序
这一步因为C++会直接在寄存器上进行操作,比python封装好的各种函数运行速度更快,我们选择C++进行部署。接下来需要学习C++的基本知识。
总结
虽然模型达到了较好的准确率,但是经过这几天的学习,我们发现整个学习的重点,即数据的预处理和后处理,仍然没有研究明白,这会在部署的时候给我们带来阻碍。
接下来首先要在模型的预处理上作出改变,确定后处理与其对齐。
另外则需要进行C++的学习,为部署做准备。
引用柠檬分类范例
以上是关于部署准备1的主要内容,如果未能解决你的问题,请参考以下文章
php 一个短代码片段准备在WooCommerce Thank You页面上输出货件跟踪UI。
JUC并发编程 共享模式之工具 JUC CountdownLatch(倒计时锁) -- CountdownLatch应用(等待多个线程准备完毕( 可以覆盖上次的打印内)等待多个远程调用结束)(代码片段