paddlelite作为部署的工具,还是十分强大的
如果不是paddle训练后保存的模型文件,而是tf等框架训练后的模型文件,其工作流程大致如下:
(1)转换成paddle的模型文件
(2)对paddle模型文件进行优化,转换成*.nb的文件
(3)编译,这一步可以省略,我用python预测可以不使用这个就行
具体如下:
一、转换模型文件
模型文件选择的是上次这篇文章里面的model-mobilenet_v1_075.pb
当然,转换之前需要安装环境,需要用到的工具的X2Paddle
1.安装tf1.14,目前只支持1.14,2.0以上不支持,1.15没有测过,推荐的是1.14,如果大于2.0的话X2Paddle是安装不成功的
安装tf的过程略去了
2.安装paddlelite和paddle
paddle安装请参考:https://www.paddlepaddle.org.cn/
paddlelite请参考 :https://paddle-lite.readthedocs.io/zh/latest/quick_start/python_demo.html
3.安装X2Paddle
git clone https://github.com/PaddlePaddle/X2Paddle.git
cd X2Paddle
git checkout develop
python setup.py install
如果以上顺利的话,接下来就可以直接转换模型了
x2paddle --framework=tensorflow --model=model-mobilenet_v1_075.pb --save_dir=pd_model
在过程中会让你 输入input的shape,这里我输入提示的,因为我没有仔细研究这个模型的输入的形状,要是严谨,必须统一一致。
回车
如果不出错就会在当前路径下生成一个名为pd_model文件夹,里面 包含两个文件夹:
文档里面对其解释为 :
我们要用到的是inference_model这个,另外一个暂时不用
二、对paddle模型文件进行优化,转换成*.nb的文件
因为上面安装好了paddlelite,因此可以使用这个命令
paddle_lite_opt --model_dir=./inference_model --optimize_out=mobilenet_v1_opt --optimize_out_type=naive_buffer
注意的是,我没有使用--valid_targets=x86,因为系统的原因
成功后会 生成一个名为mobilenet_v1_opt.nb的文件
三、预测使用
现在就可以使用python读取这个*.nb的文件了
from paddlelite.lite import *
from PIL import Image
import numpy as np
config = MobileConfig()
config.set_model_from_file('C:\\Users\\Administrator\\Documents\\X2Paddle\\mobilenet_v1_opt.nb')
predictor = create_paddle_predictor(config)
print(predictor)
image = Image.open('C:\\Users\\Administrator\\Documents\\X2Paddle\\321.jpg')
resized_image = image.resize((224, 224), Image.BILINEAR)
image_data = np.array(resized_image).flatten().tolist()
input_tensor = predictor.get_input(0)
input_tensor.resize([1, 3, 224, 224])
input_tensor.set_float_data(image_data)
predictor.run()
output_tensor = predictor.get_output(0)
print(output_tensor.shape())
结果:
明显这个不是预期的形状,就是因为在转换的时候形状设定太任意的缘故,这个模型文件的input肯定不是(None,3,224,224)
至此,第三方训练好的模型 文件能够转换成paddlelite需要的文件了,美中不足就是目前还不支持TF2.0