6.1. 算法移植概述

对于基于深度学习的视频/图片分析任务来说,通常都包括如下几个步骤:

  1. 视频/图片解码

  2. 输入预处理

  3. 模型推理

  4. 输出后处理

  5. 视频/图片编码

实际任务中,算法往往还会包含多个不同神经网络模型,因此,步骤2-4会根据需要反复执行多次。

6.1.1. 硬件加速支持情况

实践证明,单纯针对神经网络运算进行加速,已经无法满足真实场景的需求。为了提高算法运行效率,BM1684/BM1684X 中除智能视觉深度学习处理单元外,还集成了针对编解码、图像处理等操作的若干硬件加速模块。 用户通过 SOPHONSDK 中提供的相应软件接口库,可以对如上几个步骤进行针对性地加速,从而便捷地开发出高效的算法和应用。

为了满足客户对不同风格接口使用的偏好,我们还对硬件加速接口库进行了多次封装,用户可以自行选取合适的接口库进行开发,具体情况总结如下:

任务流程

是否支持硬件加速

SAIL高级接口库

OPENCV接口库

FFMPEG接口库

Native接口库

视频/图片解码

支持

sail::Decoder

Y

Y

BMCV(图片)

输入预处理

支持

sail::Bmcv

Y

N

BMCV

模型推理

支持

sail::Engine

N

N

BMruntime

输出后处理

部分支持

sail::Bmcv

N

N

BMCV

视频/图片编码

支持

sail::Bmcv

Y

Y

BMCV(图片)

值得一提的是,为了提高算法效率以及硬件特性的要求,用户在调用硬件加速接口的时候需要注意以下几个方面,后续的文档会通过实例来进行具体阐述:

  1. 内存零copy

  2. 申请物理连续内存

  3. 将多个预处理步骤进行合并

  4. 凑4nbatch进行推理;其中在BM1684X上由于架构原因,F32、F16 、INT8模型均不需要凑4nbatch也可以达到最高效率

6.1.2. C/C++/Python三种编程接口

目前支持C/C++/Python三种编程接口:

BMRuntime模块支持C/C++接口编程,BMCV、BMLib支持C++接口编程;Python/C++编程接口基于SAIL库实现。

为进一步方便开发使用,sophon-demo在调用BMLib时,进行了简易的封装,用户可参考sophon-demo/include目录。

SAIL(SOPHON Artificial Intelligent Library),是对 SOPHONSDK 中的 BMRuntime、BMCV、BMLib、sophon-mw/sophon-media库的高级封装,将SOPHONSDK中原有的“加载 BModel 并驱动智能视觉深度学习处理器推理”、“驱动视频处理子系统VPP做图像处理以及编解码”等功能抽象成更为简单的 C++ 接口对外提供;并且使用 pybind11 再次封装,提供了简洁易用的 Python 接口。

目前, SAIL 模块中所有的类、枚举、函数都在 “sail” 命名空间下, 关于SAIL C++/Python 接口详细内容请阅读 《 SOPHON-SAIL用户手册 》。

6.1.3. 图像类算法调用流程图

../_images/CV%E7%B1%BB%E6%A8%A1%E5%9E%8B%E7%AE%97%E6%B3%95%E6%B5%81%E7%A8%8B%E5%9B%BE.png

6.1.4. 图像类模型精度调试流程图

../_images/CV%E7%B1%BB%E7%AE%97%E6%B3%95%E7%B2%BE%E5%BA%A6%E6%8E%92%E6%9F%A5%E6%AD%A5%E9%AA%A4.png