✏️
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 提供支持
在本页
  • 1.3.1 工作模式
  • 1.3.2 硬件内存
  • 1.3.3 BModel
  • 1.3.4 bm_image
  1. 一、BMNNSDK2软件包

1.3 基本概念介绍

上一页1.2 BMNNSDK2 文档下一页1.4 获取BMNNSDK2 SDK

最后更新于2年前

1.3.1 工作模式

算丰BM1684系列芯片产品涵盖了从末端到边缘到中枢的多种产品形态,可以支持两种不同的工作模式,分别对应不同的产品形态,具体信息如下:

BM1684

SoC模式

PCIE模式

独立运行

是,BM1684即为独立主机,算法运行在BM1684上

否,算法部署在X86或ARM主机,推理运行在PCIE卡

对外IO方式

千兆以太网

PCIE接口

对应产品

SE5/SM5

SC5/SC5H/SC5+

​ BM1684的软件接口在两种工作模式下是基本相同的,BMNNSDK2同时支持两种模式,此外还提供了CModel模式作为芯片的软件模拟器,支持在没有相关硬件设备的情况下实现模型转换、部分算法验证等功能。本文在进行实例演示的时候,会进行相应的标注。

1.3.2 硬件内存

内存是BM1684应用调试中经常会涉及的重要概念,特别地,有以下3个概念需要特别区分清楚:Global Memory、Host Memory、Device Memory。

  • 全局内存(Global Memory):指BM1684的片外存储DDR,通常为12GB,最大支持定制为16GB。

  • 设备内存(Device Memory)和系统内存(Host Memory):根据BM168x产品类型或工作模式的不同,设备内存和系统内存具有不同的含义:

Soc模式

PCIE模式

产品

SM5/SE5

SC5/SC5H/SC5+

Global Memory

4GB A53专用 +

4GB TPU专用 +

4GB VPP/VPU专用

4GB TPU专用 +

4GB VPU专用 +

4GB VPP/A53专用

Host Memory

芯片上主控Cortex A53的内存

主机内存

Device Memory

划分给TPU/VPP/VPU的设备内存

PCIE板卡上的物理内存(Global Memory)

内存同步问题是后续应用调试中经常会遇到的比较隐蔽的重要问题。我们在BM-OpenCV和BM-FFmpeg两个框架内都提供了内存同步操作的函数;而BMCV API只面向设备内存操作,因此不存在内存同步的问题,在调用BMCV API前,需要将输入数据在设备内存上准备好;我们在BMLib中提供了接口,可以实现Host Memory和Global Memory之间、Global Memory内部以及不同设备的Global Memory之间的数据搬运。更多详细信息请参考和。

1.3.3 BModel

BModel:是一种面向算能TPU处理器的深度神经网络模型文件格式,其中包含目标网络的权重(weight)、TPU指令流等等。

Stage:支持将同一个网络的不同batch size的模型combine为一个BModel;同一个网络的不同batch size的输入对应着不同的stage,推理时BMRuntime会根据输入shape 的大小自动选择相应stage的模型。也支持将不同的网络combine为一个BModel,通过网络名称来获取不同的网络。

动态编译和静态编译:支持模型的动态编译和静态编译,可在转换模型时通过参数设定。动态编译的BModel,在Runtime时支持任意小于编译时设置的shape的输入shape;静态编译的BModel,在Runtime时只支持编译时所设置的shape。

优先使用静态编译的模型:

动态编译模型运行时需要BM1684内微控制器ARM9的参与,实时地根据实际输入shape,动态生成TPU运行指令。因此,动态编译的模型执行效率要比静态编译的模型低。若可以,应当优先使用静态编译的模型或支持多种输入shape的静态编译模型。

1.3.4 bm_image

typedef enum bm_image_format_ext_{
    FORMAT_YUV420P,
    FORMAT_YUV422P,
    FORMAT_YUV444P,
    FORMAT_NV12,
    FORMAT_NV21,
    FORMAT_NV16,
    FORMAT_NV61,
    FORMAT_RGB_PLANAR,
    FORMAT_BGR_PLANAR,
    FORMAT_RGB_PACKED,
    FORMAT_BGR_PACKED,
    PORMAT_RGBP_SEPARATE,
    PORMAT_BGRP_SEPARATE,
    FORMAT_GRAY,
    FORMAT_COMPRESSED
} bm_image_format_ext;

typedef enum bm_image_data_format_ext_{
    DATA_TYPE_EXT_FLOAT32,
    DATA_TYPE_EXT_1N_BYTE,
    DATA_TYPE_EXT_4N_BYTE,
    DATA_TYPE_EXT_1N_BYTE_SIGNED,
    DATA_TYPE_EXT_4N_BYTE_SIGNED,
}bm_image_data_format_ext;

// bm_image结构体定义如下
struct bm_image {
    int width;
    int height;
    bm_image_format_ext image_format;
    bm_data_format_ext data_type;
    bm_image_private* image_private;
};

BMCV API均是围绕bm_image来进行的,一个 bm_image 对象对应于一张图片。用户通过 bm_image_create构建 bm_image 对象,attach到device memory;使用完需要调用 bm_image_destroy 销毁;手动attach到device memory的还需要手动释放;不同BMCV API支持的image_format和data_type不同,注意格式要求,必要时需要进行格式转换;更多详细信息请参考。

SAIL库中将bm_image封装为了BMImage,相关信息请参考。

《BMLib用户开发手册》
《多媒体用户开发手册》
《BMCV用户开发手册》
《SAIL用户开发手册》