x86

Paddle Lite 已支持在 x86 设备上进行预测部署。

参考示例演示

准备本地编译环境

  • 为了保证编译环境一致,建议使用Docker开发环境进行配置;

  • 环境搭建可以参考编译环境准备

运行图像分类示例程序

  • 下载示例程序 PaddleLite-generic-demo.tar.gz ,解压后清单如下:

      - PaddleLite-generic-demo
        - image_classification_demo
          - assets
            - configs
              - imagenet_224.txt # config 文件
              - synset_words.txt # 1000 分类 label 文件
            - datasets
              - test # dataset
                - inputs
                  - tabby_cat.jpg # 输入图片
                - outputs
                  - tabby_cat.jpg # 输出图片
                - list.txt # 图片清单
            - models
              - resnet50_fp32_224 # Paddle non-combined 格式的 resnet50 float32 模型
                - __model__ # Paddle fluid 模型组网文件,可拖入 https://lutzroeder.github.io/netron/ 进行可视化显示网络结构
                - bn2a_branch1_mean # Paddle fluid 模型参数文件
                - bn2a_branch1_scale
                ...
          - shell
            - CMakeLists.txt # 示例程序 CMake 脚本
            - build.linux.amd64 # 已编译好的,适用于 amd64
              - demo # 已编译好的,适用于 amd64 的示例程序
            - build.linux.arm64 # 已编译好的,适用于 arm64
              - demo # 已编译好的,适用于 arm64 的示例程序
              ...
            ...
            - demo.cc # 示例程序源码
            - build.sh # 示例程序编译脚本
            - run.sh # 示例程序本地运行脚本
            - run_with_ssh.sh # 示例程序 ssh 运行脚本
            - run_with_adb.sh # 示例程序 adb 运行脚本
        - libs
          - PaddleLite
            - android
              - arm64-v8a
              - armeabi-v7a
            - linux
              - amd64
                - include # Paddle Lite 头文件
                - lib # Paddle Lite 库文件
                  - libpaddle_full_api_shared.so # 预编译 Paddle Lite full api 库
                  - libpaddle_light_api_shared.so # 预编译 Paddle Lite light api 库
              - arm64
                - include
                - lib
              - armhf
                ...
          - OpenCV # OpenCV 预编译库
        - object_detection_demo # 目标检测示例程序
    
  • 进入 PaddleLite-generic-demo/image_classification_demo/shell/

  • 执行以下命令观察 mobilenet_v1_int8_224_per_layer 模型的性能和结果;

    运行 mobilenet_v1_int8_224_per_layer 模型
    
    For linux amd64
    本地执行
    $ ./run.sh mobilenet_v1_int8_224_per_layer imagenet_224.txt test linux amd64 cpu
    通过 SSH 远程执行
    $ ./run_with_ssh.sh mobilenet_v1_int8_224_per_layer imagenet_224.txt test linux amd64 cpu <IP地址> 22 <用户名> <密码>
    
      Top1 Egyptian cat - 0.500662
      Top2 tabby, tabby cat - 0.407661
      Top3 tiger cat - 0.074697
      Top4 lynx, catamount - 0.013188
      Top5 ping-pong ball - 0.000638
      Preprocess time: 27.854000 ms, avg 27.854000 ms, max 27.854000 ms, min 27.854000 ms
      Prediction time: 55.152000 ms, avg 55.152000 ms, max 55.152000 ms, min 55.152000 ms
      Postprocess time: 6.212000 ms, avg 6.212000 ms, max 6.212000 ms, min 6.212000 ms
    
  • 如果需要更改测试模型为 resnet50,执行命令修改为如下:

    本地执行
    $ ./run.sh resnet50_fp32_224 imagenet_224.txt test linux amd64 cpu
    通过 SSH 远程执行
    $ ./run_with_ssh.sh resnet50_fp32_224 imagenet_224.txt test linux amd64 cpu <IP地址> 22 <用户名> <密码>
    
  • 如果需要更改测试图片,可将图片拷贝到 PaddleLite-generic-demo/image_classification_demo/assets/datasets/test/inputs 目录下,同时将图片文件名添加到 PaddleLite-generic-demo/image_classification_demo/assets/datasets/test/list.txt 中;

  • 如果需要重新编译示例程序,直接运行

    For linux amd64
    $ ./build.sh linux amd64
    

更新支持 x86 的 Paddle Lite 库

  • 下载 Paddle Lite 源码

    $ git clone https://github.com/PaddlePaddle/Paddle-Lite.git
    $ cd Paddle-Lite
    $ git checkout <release-version-tag>
    
  • 编译并生成 x86 的部署库

    • For linux amd64

      • tiny_publish 编译

        $ ./lite/tools/build_linux.sh --arch=x86
        
      • full_publish 编译

        $ ./lite/tools/build_linux.sh --arch=x86 full_publish
        
      • 替换头文件和库

        替换 include 目录
        $ cp -rf build.lite.linux.x86.gcc/inference_lite_lib/cxx/include/ PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/include/
        
        替换 libpaddle_full_api_shared.so
        $ cp build.lite.linux.x86.gcc/inference_lite_lib/cxx/lib/libpaddle_full_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/lib/
        
        替换 libpaddle_light_api_shared.so
        $ cp build.lite.linux.x86.gcc/inference_lite_lib/cxx/lib/libpaddle_light_api_shared.so PaddleLite-generic-demo/libs/PaddleLite/linux/amd64/lib/
        
  • 替换头文件后需要重新编译示例程序