6.1. 算法移植概述
目录
对于基于深度学习的视频/图片分析任务来说,通常都包括如下几个步骤:
视频/图片解码
输入预处理
模型推理
输出后处理
视频/图片编码
实际任务中,算法往往还会包含多个不同神经网络模型,因此,步骤2-4会根据需要反复执行多次。
硬件加速支持情况
实践证明,单纯针对神经网络运算进行加速,已经无法满足真实场景的需求。为了提高算法运行效率,BM1684/BM1684X 中除张量运算硬件加速单元TPU外,还集成了针对编解码、图像处理等操作的若干硬件加速模块,用户通过 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(图片) |
值得一提的是,为了提高算法效率以及硬件特性的要求,用户在调用硬件加速接口的时候需要注意以下几个方面,后续的文档会通过实例来进行具体阐述:
内存零copy
申请物理连续内存
将多个预处理步骤进行合并
凑4batch进行推理
C/C++/Python三种编程接口
目前支持C/C++/Python三种编程接口:
其中:BMRuntime模块支持C/C++接口编程,BMCV、BMLib支持C接口编程;Python/C++编程接口基于SAIL库实现。
SAIL(Sophon Artificial Intelligent Library),是对 SophonSDK 中的 BMRuntime、 BMCV、 BMLib、BMDecoder库的高级封装,将 SophonSDK中原有的“加载 BModel 并驱动 TPU 推理”、“驱动 TPU+VPP 做图像处理”、“驱动 VPU 做图像和视频解码”等功能抽象成更为简单的 C++ 接口对外提供;并且使用 pybind11 再次封装,提供了简洁易用的 Python 接口。目前, SAIL 模块中所有的类、枚举、函数都在 “sail” 命名空间下, 关于SAIL C++/Python 接口详细内容请阅读 《 sophon-sail使用手册 》。