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开发

  • 使用尽可能少的操作

  • 让数据访问只发生在本地存储

    1. 尽量少使用 全局操作;

    2. 集中且连续的使用 本地操作来完成计算;

    3. 编程中相邻 本地操作尽可能是生产者消费者关系。

  • 科学切割数据,合理的Tensor 数据排布将提升 TPU 计算单元使用率

  • 使能数据切分优化(尽量设置 shape 不大于 4 维,若数据很大,在设置 shape 时优先将大数设置在 S2 维度,其次 S0 维度)

7.5. 流程优化

  • 优化模型流水线,多线程方式优化,VPU/JPU/VPP/CPU/TPU的并行

  • 减少不必要的内存拷贝

  • 视频流抽帧处理,我们的ffmpeg支持只解关键帧的设置