SOPHON-DEMO简介
1.SOPHON-DEMO简介
SOPHON-DEMO基于SOPHONSDK接口进行开发,提供一系列主流算法的移植例程。包括基于TPU-NNTC和TPU-MLIR的模型编译与量化,基于BMRuntime的推理引擎移植,以及基于BMCV/OpenCV的前后处理算法移植。
SOPHONSDK是算能科技基于其自主研发的深度学习处理器所定制的深度学习SDK,涵盖了神经网络推理阶段所需的模型优化、高效运行时支持等能力,为深度学习应用开发和部署提供易用、高效的全栈式解决方案。目前可兼容BM1684/BM1684X/BM1688(CV186X)。下面是一些相关名词解释:
名词 | 说明 |
---|---|
BM1688/CV186AHBM1684X | 算能面向深度学习领域推出的两款第五代张量处理器算能面向深度学习领域推出的第四代张量处理器 |
BM1684 | 算能面向深度学习领域推出的第三代张量处理器 |
智能视觉深度学习处理器 | BM1688/CV186AH,BM1684/BM1684X中的神经网络运算单元 |
VPU | BM1688/CV186AH,BM1684/BM1684X中的编解码单元 |
VPP | BM1684/BM1684X中的图形运算加速单元 |
VPSS | BM1688/CV186AH中的的视频处理子系统,包括图形运算加速单元以及解码单元,也称为VPP |
JPU | BM1688/CV186AH,BM1684/BM1684X中的图像JPEG编解码单元 |
SOPHONSDK | 算能基于BM1688/CV186AH,BM1684/BM1684X的原创深度学习开发工具包 |
PCIe Mode | BM1688/CV186AH,BM1684/BM1684X的一种工作形态,作为加速设备来进行使用 |
SoC Mode | BM1688/CV186AH,BM1684/BM1684X的一种工作形态,本身作为主机独立运行,客户算法可以直接运行其上 |
arm_pcie Mode | BM1684/BM1684X的一种工作形态,搭载BM1684/BM1684X的板卡作为PCIe从设备插到ARM处理器的服务器上,客户算法运行于ARM处理器的主机上 |
BMCompiler | 面向智能视觉深度学习处理器研发的深度神经网络的优化编译器,可以将深度学习框架的各种深度神经网络转化为处理器上运行的指令流 |
BMRuntime | 智能视觉深度学习处理器推理接口库 |
BMCV | 图形运算硬件加速接口库 |
BMLib | 在内核驱动之上封装的一层底层软件库,设备管理、内存管理、数据搬运、API发送、A53使能、功耗控制 |
mlir | 由TPU-MLIR生成的中间模型格式,用于迁移或者量化模型 |
BModel | 面向智能视觉深度学习处理器的深度神经网络模型文件格式,其中包含目标网络的权重(weight)、指令流等 |
BMLang | 面向智能视觉深度学习处理器的高级编程模型,用户开发时无需了解底层硬件信息 |
TPUKernel | 基于智能视觉深度学习处理器原子操作(根据BM1688/CV186AH,BM1684/BM1684X指令集封装的一套接口)的开发库。 |
SAIL | 支持Python/C++接口的SOPHON Inference推理库,是对BMCV、sophon-media、 BMLib、BMRuntime等的进一步封装 |
TPU-MLIR | 智能视觉深度学习处理器编译器工程,可以将不同框架下预训练的神经网络,转化为可以在算能智能视觉深度学习处理器上高效运算的bmodel |
1.1BModel
BModel: 是一种面向算能智能视觉深度学习处理器的深度神经网络模型文件格式,其中包含目标网络的权重(weight)、指令流等等。
Stage: 支持将同一个网络的不同batch size的模型combine为一个BModel;同一个网络的不同batch size的输入对应着不同的stage,推理时BMRuntime会根据输入shape的大小自动选择相应stage的模型。也支持将不同的网络combine为一个BModel,通过网络名称来获取不同的网络。
动态编译和静态编译: 支持模型的动态编译和静态编译,可在转换模型时通过参数设定。动态编译的BModel,在Runtime时支持任意小于编译时设置的shape的输入shape;静态编译的BModel,在Runtime时只支持编译时所设置的shape。
备注
优先使用静态编译的模型: 动态编译模型运行时需要BM168X内微控制器ARM9的参与,实时地根据实际输入shape,动态生成智能视觉深度学习处理器运行指令。因此,动态编译的模型执行效率要比静态编译的模型低。若可以,应当优先使用静态编译的模型或支持多种输入shape的静态编译模型。
1.2 bm_image
BMCV: BMCV提供了一套基于 SOPHON Deep learning 处理器优化的机器视觉库,通过利用处理器的 Tensor Computing Processor 和 VPP 模块,可以完成色彩空间转换、尺度变换、仿射变换、透射变换、线性变换、画框、JPEG编解码、BASE64编解码、NMS、排序、特征匹配等操作。
bm_image: BMCV api 均是围绕 bm_image 来进行的,一个 bm_image 对象对应于一张图片。用户通过 bm_image_create 来构建 bm_image 对象,然后供各个 bmcv 的功能函数使用,使用完需要调用 bm_image_destroy 销毁。
BMImage: SAIL库中将bm_image封装为BMImage,相关信息请参考《 SOPHON-SAIL用户手册 》。
如下是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;
};
2.目录结构与说明
SOPHON-DEMO提供的例子从易到难分为 tutorial
、 sample
、 application
三个模块:
注意
tutorial
模块存放一些基础接口的使用示例;sample
模块存放一些经典算法在SOPHONSDK上的串行示例;application
模块存放一些典型场景的典型应用。
模块 | 链接 |
---|---|
tutorial | LINK1 |
sample | LINK2 |
application | LINK3 |
3.版本说明
版本 | 说明 |
---|---|
0.2.1 | 完善和修复文档、代码问题,部分例程补充CV186X支持,YOLOv5适配SG2042,sample模块新增例程GroundingDINO、Qwen1_5,StableDiffusionV1_5新支持多种分辨率,Qwen、Llama2、ChatGLM3添加web和多会话模式。tutorial模块新增blend和stitch例程 |
0.2.0 | 完善和修复文档、代码问题,新增application和tutorial模块,新增例程ChatGLM3和Qwen,SAM添加web ui,BERT、ByteTrack、C3D适配BM1688,原YOLOv8更名为YOLOv8_det并且添加cpp后处理加速方法,优化常用例程的auto_test,更新TPU-MLIR安装方式为pip |
0.1.10 | 修复文档、代码问题,新增ppYoloe、YOLOv8_seg、StableDiffusionV1.5、SAM,重构yolact,CenterNet、YOLOX、YOLOv8适配BM1688,YOLOv5、ResNet、PP-OCR、DeepSORT补充BM1688性能数据,WeNet提供C++交叉编译方法 |
0.1.9 | 修复文档、代码问题,新增segformer、YOLOv7、Llama2例程,重构YOLOv34,YOLOv5、ResNet、PP-OCR、DeepSORT、LPRNet、RetinaFace、YOLOv34、WeNet适配BM1688,OpenPose后处理加速,chatglm2添加编译方法和int8/int4量化。 |
0.1.8 | 完善修复文档、代码问题,新增BERT、ppYOLOv3、ChatGLM2,重构YOLOX,PP-OCR添加beam search,OpenPose添加tpu-kernel后处理加速,更新SFTP下载方式。 |
0.1.7 | 修复文档等问题,一些例程支持BM1684 mlir,重构PP-OCR、CenterNet例程,YOLOv5添加sail支持 |
0.1.6 | 修复文档等问题,新增ByteTrack、YOLOv5_opt、WeNet例程 |
0.1.5 | 修复文档等问题,新增DeepSORT例程,重构ResNet、LPRNet例程 |
0.1.4 | 修复文档等问题,新增C3D、YOLOv8例程 |
0.1.3 | 新增OpenPose例程,重构YOLOv5例程(包括适配arm PCIe、支持TPU-MLIR编译BM1684X模型、使用ffmpeg组件替换opencv解码等) |
0.1.2 | 修复文档等问题,重构SSD相关例程,LPRNet/cpp/lprnet_bmcv使用ffmpeg组件替换opencv解码 |
0.1.1 | 修复文档等问题,使用BMNN相关类重构LPRNet/cpp/lprnet_bmcv |
0.1.0 | 提供LPRNet等10个例程,适配BM1684X(x86 PCIe、SoC),BM1684(x86 PCIe、SoC) |
4.环境依赖
SOPHON-DEMO主要依赖TPU-MLIR、TPU-NNTC、LIBSOPHON、SOPHON-FFMPEG、SOPHON-OPENCV、SOPHON-SAIL,其版本要求如下:
SOPHON-DEMO | TPU-MLIR | TPU-NNTC | LIBSOPHON | SOPHON-FFMPEG | SOPHON-OPENCV | SOPHON-SAIL | 发布日期 |
---|---|---|---|---|---|---|---|
0.2.0 | >=1.6 | >=3.1.7 | >=0.5.0 | >=0.7.3 | >=0.7.3 | >=3.7.0 | >=23.10.01 |
0.1.10 | >=1.2.2 | >=3.1.7 | >=0.4.6 | >=0.6.0 | >=0.6.0 | >=3.7.0 | >=23.07.01 |
0.1.9 | >=1.2.2 | >=3.1.7 | >=0.4.6 | >=0.6.0 | >=0.6.0 | >=3.7.0 | >=23.07.01 |
0.1.8 | >=1.2.2 | >=3.1.7 | >=0.4.6 | >=0.6.0 | >=0.6.0 | >=3.6.0 | >=23.07.01 |
0.1.7 | >=1.2.2 | >=3.1.7 | >=0.4.6 | >=0.6.0 | >=0.6.0 | >=3.6.0 | >=23.07.01 |
0.1.6 | >=0.9.9 | >=3.1.7 | >=0.4.6 | >=0.6.0 | >=0.6.0 | >=3.4.0 | >=23.05.01 |
0.1.5 | >=0.9.9 | >=3.1.7 | >=0.4.6 | >=0.6.0 | >=0.6.0 | >=3.4.0 | >=23.03.01 |
0.1.4 | >=0.7.1 | >=3.1.5 | >=0.4.4 | >=0.5.1 | >=0.5.1 | >=3.3.0 | >=22.12.01 |
0.1.3 | >=0.7.1 | >=3.1.5 | >=0.4.4 | >=0.5.1 | >=0.5.1 | >=3.3.0 | - |
0.1.2 | Not support | >=3.1.4 | >=0.4.3 | >=0.5.0 | >=0.5.0 | >=3.2.0 | - |
0.1.1 | Not support | >=3.1.3 | >=0.4.2 | >=0.4.0 | >=0.4.0 | >=3.1.0 | - |
0.1.0 | Not support | >=3.1.3 | >=0.3.0 | >=0.2.4 | >=0.2.4 | >=3.1.0 | - |
注意
不同例程对版本的要求可能存在差异,具体以例程的README为准,可能需要安装其他第三方库。
BM1688/CV186X与BM1684X/BM1684对应的sdk不是同一套,暂时还未发布到官网上,请联系技术人员获取。
5.技术资料
提示
请通过算能官网 技术资料 获取相关文档、资料及视频教程。