树莓派安装paddlelite; x86电脑上安装paddlehub,并将paddlehub中的预训练模型转换为paddlelite格式,使之能在树莓派上运行。python
树莓派编译安装paddlelite
sudo apt install patchelf cmake sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150 git clone https://github.com/PaddlePaddle/Paddle-Lite.git cd Paddle-Lite sudo ./lite/tools/build.sh \ --build_extra=ON \ --arm_os=armlinux \ --arm_abi=armv7hf \ --arm_lang=gcc \ --build_python=ON \ full_publish cd build.lite.armlinux.armv7hf.gcc/inference_lite_lib.armlinux.armv7hf/python/install sudo python3 setup.py install
具体源码编译时的参数说明,你们可参考:https://paddlepaddle.github.io/Paddle-Lite/v2.2.0/source_compile/#本地编译直接在rk3399或树莓派上编译linux
x86电脑上将paddlehub的预训练模型转为paddlelite格式
安装paddlehub、paddlepaddle
python -m pip install paddlehub python -m pip install paddlepaddle
测试paddlehub预训练模型
import paddlehub as hub senta = hub.Module(name="senta_gru") test_text = ["这家餐厅很好吃", "这部电影真的不好劲"] results = senta.sentiment_classify(texts=test_text, use_gpu=False, batch_size=1) for result in results: print(result['text']) print(result['sentiment_label']) print(result['sentiment_key']) print(result['positive_probs']) print(result['negative_probs'])
下载opt转换工具
https://paddlepaddle.github.io/Paddle-Lite/v2.2.0/model_optimize_tool/git
下载paddlehub预训练模型并转换
下载预训练模型压缩包:github
hub download senta_gru
解压,放置在 saved_models/senta_gru 下,shell
转换模型:框架
./opt --model_dir=senta_gru/infer_model --valid_targets=arm --optimize_out_type=naive_buffer --optimize_out=saved_models/senta_gru
PS: 查看opt转换工具所支持的模型算子:工具
./opt --print_model_ops=true --valid_targets=arm --model_dir=senta_gru/infer_model
在树莓派上测试转换后的预训练模型
from paddlelite.lite import * config = MobileConfig() config.set_model_dir("model") # (2) 建立predictor predictor = create_paddle_predictor(config) ''' ...... '''
而后就出现段错误了。。。学习
后记
以后开始各类找缘由,也想到多是因为漏转换了什么而致使的。。。测试
也反复找了资料,但因为paddle还还没有稳定,甚至连官方网站里的demo都已过期,接口都已变更得消失不见了。。。网站
因此最终只好暂时放弃。
可能 paddlepaddle 和 paddlehub ,做为百度paddle框架的主力,迭代速度快、完成度也还行,属于比较可用。但其余的组件可能优先级就比较低了,文档也不一样步,实在是形成了很大的困扰。
毕竟已经占用了一成天的时间了,还要抽空学习推荐系统,和完成个人與情预测股票项目,因此paddlelite项目就只能等百度paddle稳定了再启动吧。