✏️
BMNNSDK2开发手册
  • BM1684 BMNNSDK2 入门手册
  • 一、BMNNSDK2软件包
    • 1.1 BMNNSDK2 简介
    • 1.2 BMNNSDK2 文档
    • 1.3 基本概念介绍
    • 1.4 获取BMNNSDK2 SDK
    • 1.5 安装BMNNSDK2 SDK
      • 1.5.1 环境配置-Linux
      • 1.5.2 环境配置-Windows
      • 1.5.3 环境配置-SoC
    • 1.6 更新BMNNSDK
    • 1.7 参考样例简介
    • 1.8 BMNNSDK2更新记录
    • 1.9 BMNNSDK2已知问题
  • 二、快速入门
    • 2.1 跑通第一个例子:综述
    • 2.2 跑通第一个例子:模型迁移
    • 2.3 跑通第一个例子:算法迁移
  • 三、网络模型迁移
    • 3.1 模型迁移概述
    • 3.2 FP32 模型生成
      • 3.2.1 编译Caffe模型
      • 3.2.2 编译TensorFlow模型
      • 3.2.3 编译MXNet模型
      • 3.2.4 编译PyTorch模型
      • 3.2.5 编译 Darknet 模型
      • 3.2.6 编译ONNX模型
      • 3.2.7 编译Paddle模型
    • 3.3 INT8 模型生成
      • 3.3.1 准备lmdb数据集
      • 3.3.2 生成FP32 Umodel
      • 3.3.3 生成INT8 Umodel
      • 3.3.4 精度测试
      • 3.3.5 生成INT8 Bmodel
      • 3.3.6 auto_cali一键量化工具
    • 3.4 实例演示
      • 3.4.1 create_lmdb_demo
      • 3.4.2 classify_demo
      • 3.4.3 face_demo
  • 四、算法移植
    • 4.1 算法移植概述
    • 4.2 C/C++编程详解
    • 4.3 Python编程详解
    • 4.4 解码模块
    • 4.5 图形运算加速模块
    • 4.6 模型推理
    • 4.7 实例演示
  • 五、打包和发布
    • 5.1 概述
    • 5.2 PCIE加速卡模式
    • 5.3 SOC模式
  • 附录
由 GitBook 提供支持
在本页
  • 4.7.1 PCIE模式用例演示
  • 4.7.2 SOC模式用例演示
  1. 四、算法移植

4.7 实例演示

上一页4.6 模型推理下一页5.1 概述

最后更新于2年前

我们在${BMNNSDK}/examples下为用户提供了C/C++/Python三种编程语言覆盖预处理推理接口用例。

示例目录命名规则:编程语言+解码模块+预处理模块+推理接口模块

ssd300示例目录

软件流程

编程接口语言

运行环境

cpp_cv_cv_bmrt

opencv解码 (BGR输出)+ opencv预处理 + inference + 后处理

C / C++

soc/pcie

cpp_cv_bmcv_bmrt

opencv解码(yuv i420输出)+ bmcv预处理 + inference + 后处理

C / C++

soc

cpp_cv_cv+bmcv_bmrt

opencv解码(yuv i420输出)+ cv::bmcv预处理 + bmcv预处理 + inference + 后处理

C / C++

soc

cpp_ffmpeg_bmcv_bmrt

ffmpeg解码 (yuv压缩输出)+ bmcv预处理 + inference + 后处理

C / C++

soc/pcie

cpp_multi_bmcv_bmrt

多线程性能测试用例 ffmpeg/opencv解码+cv+bmcv+inference+后处理+jpg编码

C / C++

soc

cpp_cv_cv+bmcv_sail

opencv解码(yuv i420输出)+ cv::bmcv预处理 + bmcv预处理 + inference + 后处理

C++

soc

cpp_cv_bmcv_sail

opencv解码(yuv i420输出)+ bmcv预处理 + inference + 后处理

C++

soc

cpp_ffmpeg_bmcv_sail

ffmpeg解码 (yuv压缩输出)+ bmcv预处理 + inference + 后处理

C++

soc/pcie

py_ffmpeg_bmcv_sail

ffmpeg解码 (yuv压缩输出)+ bmcv预处理 + inference + 后处理

python

soc/pcie

本章主要用cpp_cv_bmcv_bmrt、cpp_ffmpeg_bmcv_bmrt用例来做以下两种模式下的编译运行演示。以下示例演示默认用户已经按照第三章内容进行了bmodel的转换。

  • PCIE模式用例演示

  • SoC模式用例演示

本示例需要使用到的测试视频(下载后,请保存到${BMNNSDK}/res/video/ 目录):

4.7.1 PCIE模式用例演示

  1. # 在宿主机上解压缩SDK软件包
    tar –zxf  bmnnsdk2-bm1684_v<x.x.x>.tar.gz
    cd bmnnsdk2-bm1684_v<x.x.x>/scripts
    # 在宿主机上安装驱动
    sudo ./install_driver_pcie.sh && cd ..
    # 运行docker开发容器
    ./docker_run_bmnnsdk.sh
    # 在docker开发容器中
    cd /workspace/scritps
    # 安装软件包
    ./install_lib.sh nntc
    # 设置环境变量
    source envsetup_pcie.sh
    # 安装SAIL包,测试py_ffmpeg_bmcv_sail时需要
    cd /workspace/lib/sail/python3/pcie/py35 && pip3 install sophon-<x.x.x>-py3-none-any.whl
    # 下载测试视频
    mkdir /workspace/res/video
    wget -O /workspace/res/video/test_car_person.mp4 https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsTrToIfjXO6dEufUX44h%2Fuploads%2Fg6WElN0jsdW7ZsK26daI%2Ftest_car_person.mp4?alt=media&token=2b38ff64-1d25-4432-a770-2318df120a2e
  2. 在x86 Linux开发主机上编译及运行实例代码

    cd /workspace/examples/SSD_object/cpp_ffmpeg_bmcv_bmrt/
    make -f Makefile.pcie clean && make -f Makefile.pcie
    # 编译后会在目录下生成
    # USAGE:
    #  ./ssd300_ffmpeg_bmcv_bmrt.pcie <video url> <bmodel path> <frames> <dev id>
    # 下载
    # float32模型测试
    ./ssd300_ffmpeg_bmcv_bmrt.pcie /workspace/res/video/test_car_person.mp4 ../model/out/fp32_ssd300.bmodel 10 0
    # int8模型测试
    #./ssd300_ffmpeg_bmcv_bmrt.pcie /workspace/res/video/test_car_person.mp4 ../model/out/int8_ssd300.bmodel 10 0

    程序运行过程中,可能会出现以下丢弃音频包或者视频帧数据包错误的字样,属正常现象:

    packet contain audio data ,drop this packet
    ** error!! decode_packet error

    终端会打印模型检测结果:

    [0]frame 1 - need to draw 2 bbox
    encoded image size is 36952
    [0]frame 2 - need to draw 2 bbox
    encoded image size is 35696
    [0]frame 3 - need to draw 2 bbox
    encoded image size is 36288
    [0]frame 4 - need to draw 2 bbox
    encoded image size is 36280

    最后也会在results目录下生成检测结果图片,可查看结果图片验证模型检测结果。

  3. pcie状态监控

    $ bm-smi   #此命令用于检测pcie工作状态,tpu,mem使用率, 板卡温度等

4.7.2 SOC模式用例演示

  1. # 以下命令在宿主机上执行
    # <xx.xx.xx>为SDK压缩包的版本号,需根据实际情况替换为相应的版本号
    tar –zxf bmnnsdk2-bm1684_v<xx.xx.xx>.tar.gz
    cd bmnnsdk2-bm1684_v<xx.xx.xx>
    ./docker_run_bmnnsdk.sh
    # 以下命令在容器内执行
    # 安装软件包
    cd /workspace/scripts
    ./install_lib.sh nntc
    # 设置环境变量
    source envsetup_cmodel.sh
  2. 在x86 Linux开发主机上生成 SSD_object/model/out/int8_ssd300.bmodel 后,执行下面的指令,编译实例代码:

    cd ../examples/SSD_object/cpp_cv_bmcv_bmrt/
    make -f Makefile.arm clean && make -f Makefile.arm
    make -f Makefile.arm install
  3. 在x86 Linux开发主机上将交叉编译生成的程序install目录拷贝到soc单板

    # 使用第三章转换的bmodel进行测试
    # <SOC_BOARD_IP>应当替换为实际的SOC单板IP地址
    # 以下命令在宿主机上执行,SOC设备默认用户名和密码均为linaro
    scp -r /workspace/install linaro@<SOC_BOARD_IP>:/data/
  4. 在Soc单板上运行程序进行测试:

    在x86 Linux开发主机上操作

    # 登录到Soc单板中
    ssh linaro@SOC_BOARD_IP

    在Soc单板终端中操作

    # 以下命令在SOC设备中执行
    # 设置环境变量:参考1.5.3
    cd /data/install
    # 下载测试视频
    mkdir res/video
    wget -O res/video/test_car_person.mp4 https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FsTrToIfjXO6dEufUX44h%2Fuploads%2Fg6WElN0jsdW7ZsK26daI%2Ftest_car_person.mp4?alt=media&token=2b38ff64-1d25-4432-a770-2318df120a2e
    # float32模型测试
    ./bin/ssd300_cv_bmcv_bmrt.arm video res/video/test_car_person.mp4 model/ssd300/fp32_ssd300.bmodel 10 0
    # int8模型测试
    ./bin/ssd300_cv_bmcv_bmrt.arm video res/video/test_car_person.mp4 model/ssd300/int8_ssd300.bmodel 10 0

和PCIE模式一样,程序运行后终端会打印模型检测结果,并在results目录下生成图片结果out_*.jpg的检测结果图片,可查看结果图片验证模型检测结果。

在x86 Linux开发主机上解压sdk开发包并运行docker开发环境,本示例都基于此docker环境,Docker环境的按照请参考

在x86 Linux开发主机上解压sdk开发包并运行docker开发环境,本实例都基于此docker环境,Docker环境的按照请参考

1.5.1环境配置
1.5.1环境配置
4MB
test_car_person.mp4