开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术
AR与VR
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
信息服务
智能园区

Python示例

示例目录结构

edgeboard-191:~/root/workspace/PaddleLiteDemo# ls
C++ README.md  configs  Python  res 

C++ : C++语言编写的demo 源码

python : python语言编写的demo 源码

configs : 存放了示例运行需要的配置文件

res: 存放了模型相关文件和图片文件

系统配置文件描述

configs目录中已经默认添加每个 模型对应4种不同 输入源的配置

 configs ✗ tree
.
├── classification
│   ├── Inceptionv2
│   ├── Inceptionv3
│   ├── mobilenetv1
│   └── resnet50
│       ├── image.json
│       ├── multi_channel_camera.json
│       ├── rtspcamera.json
│       └── usbcamera.json
├── detection
│   ├── mobilenet-ssd
│   ├── mobilenet-ssd-640
│   ├── mobilenet-yolov3
│   ├── vgg-ssd
│   └── yolov3
│       ├── image.json
│       ├── multi_channel_camera.json
│       ├── rtspcamera.json
│       └── usb_camera.json
└── segmentation
    └── deeplabv3
        ├── image.json
        ├── multi_channel_camera.json
        ├── rtspcamera.json
        └── usbcamera.json

13 directories, 12 files

json配置文件格式如下:

{
    "model_config": "../../res/modles/detection/yolov3",
    "input": {
        "type": "usb_camera",
        "path": "/dev/video2"
    },
    "debug": {
        "display_enable": true,
        "predict_log_enable": true,
        "predict_time_log_enable": true
    }
}

配置文件参数说明:

model_config : 模型的目录,相对于 PaddleLiteDemo/C++/build 目录,各个示例支持的模型见目录

type: 输入源的类型,可选项目,支持的value有:image、usb_camera

path: 输入源对应的 设备节点或url 或 图片的名字

注意:Python示例只支持image和usb_camera的type,不支持rtsp_camera和multichannel_camera,故不支持使用Python示例接入网络摄像头推理。

type path 备注 支持的设备
image ../../res/models/XXX 使用图片作为输入源 ALL
usb_camera /dev/video0 USB摄像头 FZ3X/5X
usb_camera /dev/video2 USB摄像头 FZ9D

注意:

display_enable: 显示器显示开关,当没有显示器时可以设置为 false

predict_log_enable : 预测的结果通过命令行打印的开关

predict_time_log_enable: 模型预测单帧耗时的打印开关(不包括图像处理时间)

模型配置文件描述

模型配置文件位于res/model每个模型文件夹下

{
	"network_type":"YOLOV3",

	"model_file_name":"model",
	"params_file_name":"params",

	"labels_file_name":"label_list.txt",

	"format":"RGB",
	"input_width":608,
	"input_height":608,
		
	"mean":[123.675, 116.28, 103.53],
    "scale":[0.0171248, 0.017507, 0.0174292],
	"threshold":0.3
}

参数说明:

模型类型:

  • 非融合模型:

model_file_name : 指定模型文件的名字

params_file_name : 指定模型参数文件的名字

  • 融合模型:

model_dir : 指定 模型与参数的目录

Python示例运行

执行目录

cd /root/workspace/PaddleLiteDemo/Python

执行

classification.py 分类示例

detection.py 检测示例

以检测为例:

cd /root/workspace/PaddleLiteDemo/Python
python3 detection.py ../configs/detection/yolov3/usb_camera.json

Python接口

总体介绍

Python接口是对1.8.1预测库的python封装,方便在python中导入和使用预测库,进而完成模型部署。 正确的升级软核到1.8.1后,对应的python接口库会被安装在/usr/lib/python3.5/site-packages/

注意 python接口库被安装在python3环境下,请使用python3。

组成文件

 configs ? tree
.
|——paddlelite.cpython-35m-aarch64-linux-gnu.so
|——edgeboard
        |——__init__.py
        |——predictor.py
        |——preprocess.py

1 directories, 4 files

各个文件功能简介

  1. paddlelite.cpython-35m-aarch64-linux-gnu.so是对预测库的外部接口的pybind封装
  2. edgeboard/predictor.py是对预测库执行器的封装,包含模型初始化,数据读入,数据预测和结果导出
  3. edgeboard/preprocess.py是对fpga预处理功能的python封装。这里提供了基于fpga的预处理接口

predictor API功能简介

class PaddleLitePredictor(object):
    """ 这个类是对pybind封装的Predictor的进一步封装 """

    def __init__(self):
        self.predictor = None

    def set_model_file(self, path):
        """配置模型文件的路径,一般都是"model"或者"__model__" """
        

    def set_param_file(self, path):
        """配置模型文件的路径,一般都是"params"或者"__params__" """

    def set_model_dir(self, path):
        """配置模型文件的目录"""

    def load(self):
        """根据上面三个模型路径相关的api设置,初始化C++侧的predictor并将模型装载到内存"""

    def get_input(self, index):
        """获取到predictor的第index位置处的输入空tensor,预处理后的结果最终会拷贝到这个tensor中"""

    def set_input(self, data, index):
        """将预处理后的输入数据numpy.array设置到predictor的第index个输入tensor中"""

    def run(self):
        """完成一次模型推理"""

    def get_output(self, index):
        """取出第index位置的输出结果"""

preprocess API功能简介

class ImageTransformer(object):
    """这个类是对fpga预处理功能的封装,包括resize,格式转换和均值方差操作"""

    def __init__(self, image, mean, scale, dst_shape, dst_format, src_format="BGR"):
        """初始化预处理参数"""


    def set_mean_scale(self, mean, scale):
        """
        out = (x / 255 - mean) * scale
        """

    def read_image(self, image):
        """读入原图"""
        
    def set_dst_format(self, dst_format):
        """
        默认原图是BGR, 如果需要转RGB,要在这里设置
        """

    def set_src_format(self, src_format):
        """
        默认是BGR
        """

    def set_shape_config(self, src_shape, dst_shape):
        """
        fpga的预处理只支持到1080p,如果输入尺寸超过这个限制,只能先做cpu resize
        """

    def transforms(self, input_tensor):
        """
        从predictor中拿到输入tensor,将预处理后的结果写入这个tensor
        """
上一篇
C++示例
下一篇
1.8.0软核版本示例