7. 程序优化常见问题¶
7.1. 前后处理加速¶
编解码使用bm_ffmpeg/bm_opencv
前处理中图片处理部分尽量采用bmcv来进行加速,优先使用带有vpp的接口
必要时候使用libyuv,基于ARM neon加速(SoC)
nms等后处理使用硬件加速接口
7.2. 模型编译¶
精度满足的条件下,使用轻量级的模型
打开Winograd选项(使能Winograd需要在calibration_use_pb和bmnetu命令中同时打开相应选项;Winograd优化仅针对卷积核为3x3的卷积运算)
7.3. 推理加速¶
推理的时候采用4N batch模式
使用INT8量化模型推理
对动态网络使能cache
7.4. bmlang开发¶
使用尽可能少的操作
让数据访问只发生在本地存储
尽量少使用 全局操作;
集中且连续的使用 本地操作来完成计算;
编程中相邻 本地操作尽可能是生产者消费者关系。
科学切割数据,合理的Tensor 数据排布将提升 TPU 计算单元使用率
使能数据切分优化(尽量设置 shape 不大于 4 维,若数据很大,在设置 shape 时优先将大数设置在 S2 维度,其次 S0 维度)
7.5. 流程优化¶
优化模型流水线,多线程方式优化,VPU/JPU/VPP/CPU/TPU的并行
减少不必要的内存拷贝
使用多线程
视频流抽帧处理,我们的ffmpeg支持只解关键帧的设置