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


前言

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


一、在树莓派上安装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模型。学习的话百度这个题目即可。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粒子白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值