文章目录

  • 前言
  • 一、在树莓派上安装paddlelite库
  • 二、以下均在AI Studio上的操作
    • 1.安装paddlelite库
    • 2.导出完整模型文件
    • 3.输出nb模型
    • 3.树莓派部署
  • 总结


前言

步骤缺一不可。否则需要用很长的时间去找答案。


一、在树莓派上安装paddlelite库

在树莓派上安装paddlelite的库,需要和百度AI Studio上paddlelite的版本一致。
我手头有编译好的paddlelite的whl文件,直接pip安装即可。可以私信我要。是2.8的版本。

二、以下均在AI Studio上的操作

1.安装paddlelite库

在百度AI Studio上输入 !pip install paddlelite==2.8
这个库的版本要和安装在树莓派的一致。

2.导出完整模型文件

!paddlex --export_inference --model_dir=output/mobilenetv2/best_model --save_dir=./inference_model

前提是你的项目已经安装了paddlex和paddlepaddle,这两个的具体版本是你的项目决定的。
其中,--model_dir=output/mobilenetv2/best_model表示你项目当前保存的模型文件途径,需要根据实际情况修改。
--save_dir=./inference_model表示你要存下来的完整模型文件途径。建议可以不修改这个途径。

3.输出nb模型

!paddle_lite_opt --model_file=inference_model/inference_model/model.pdmodel --param_file=inference_model/inference_model/model.pdiparams --optimize_out_type=naive_buffer --valid_targets=arm --optimize_out=output

output是你最终产生的nb模型文件名称,可以根据实际情况修改。把这个nb模型下载到树莓派。

3.树莓派部署

接下去就是部署到树莓派上的代码。python代码实现。

from paddlelite.lite import *
import cv2
import numpy as np
import sys
import time
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw

# 加载模型
def create_predictor(model_dir):
    config = MobileConfig()
    config.set_model_from_file(model_dir)
    predictor = create_paddle_predictor(config)
    return predictor    

#图像归一化处理
def process_img(image, input_image_size):
    origin = image
    img = origin.resize(input_image_size, Image.BILINEAR)
    resized_img = img.copy()
    if img.mode != 'RGB':
      	img = img.convert('RGB')
    img = np.array(img).astype('float32').transpose((2, 0, 1))  # HWC to CHW
    img -= 127.5
    img *= 0.007843
    img = img[np.newaxis, :]
    return origin,img

# 预测
def predict(image, predictor, input_image_size):
    #输入数据处理
    input_tensor = predictor.get_input(0)
    input_tensor.resize([1, 3, input_image_size[0], input_image_size[1]])
    image = Image.fromarray(cv2.cvtColor(image, cv2.COLOR_BGRA2RGBA))
    origin, img = process_img(image, input_image_size)
    image_data = np.array(img).flatten().tolist()
    input_tensor.set_float_data(image_data)
    #执行预测
    predictor.run()
    #获取输出
    output_tensor = predictor.get_output(0)
    print("output_tensor.float_data()[:] : ", output_tensor.float_data()[:])
    res = output_tensor.float_data()[:]
    return res

# 展示结果
def post_res(label_dict, res):
    print(max(res))
    target_index = res.index(max(res))
    print("结果是:" + "   " + label_dict[target_index])
    
if __name__ == '__main__':
    # 初始定义
    label_dict = {0:"xihongshi", 1:"changquezi", 2:"bocai", 3:"huluobo"}
    image = "./test_pic/001.jpg"
    model_dir = "./output.nb"
    image_size = (224, 224)
    # 初始化
    predictor = create_predictor(model_dir)
    # 读入图片
    image = cv2.imread(image)
    # 预测
    res = predict(image, predictor, image_size)
    # 显示结果
    post_res(label_dict, res)
    cv2.imshow("image", image)
    cv2.waitKey()

label_dict = {0:"xihongshi", 1:"changquezi", 2:"bocai", 3:"huluobo"}
image = "./test_pic/001.jpg"
model_dir = "./output.nb"

这几行代码需要根据自己情况修改。以上代码使用Paddle-Lite——基于python API部署PaddlePaddle的自定义模型并实现视频流和单张图片的预测该博文的代码。


总结

这是《PaddleX2.0快速上手-MobileNetV2图像分类》中的《MobileNetV2图像分类》的例程,然后转树莓派上可运行的nb模型。学习的话百度这个题目即可。

更多推荐

paddlelite做图像分类,树莓派部署,Python实现