抓图后处理优化之图优化

抓图后处理优化之图优化

背景

定义一系列虚拟抓图设置G1,G2,G3,.. GN

每个虚拟抓图对应一系列的抓图和后处理,

Gi = grab(i,1) + .. grab(i,m) + pp(i, 1) +.. + pp(i, k)

如何以最快的时间拿到所有图?

假设: 不同的grab有机会相同,pp有机会相同。这种情况不需要重复处理

思路

把处理用data flow表达的graph表示,该graph的输入为N个Grabsetting,输出为N个image

消除公共子表达式

参考资料

openvx

graph优化

Includes a “graph optimizer” that looks at the entire processing pipeline and removes/replaces/merges functions to improve performance and minimize bandwidth at runtime
https://gpuopen-professionalcompute-libraries.github.io/MIVisionX/amd_openvx/#amd-openvx-amd_openvx
https://github.com/GPUOpen-ProfessionalCompute-Libraries/MIVisionX/blob/master/amd_openvx/README.md

openvx
https://software.intel.com/en-us/openvino-ovx-guide-whats-new-in-this-release#

TensorFlow计算图优化

https://zhuanlan.zhihu.com/p/52019183
Tensorflow也使用了编译原理中常用的3中优化方案 1. 常量折叠 constant folding 2. 内联函数展开 3. 公共表达式折叠CSE(common-subexpression elimination)。

GraphOptimizer类(http://graph_optimizer.cc

https://zhuanlan.zhihu.com/p/25932160

https://my.oschina.net/u/3800567/blog/2248224

https://www.cnblogs.com/jesse123/p/7017317.html

XLA

XLA(Accelerated Linear Algebra)

内核融合,就是将一个计算图中的节点所对应的内核函数融合成一个函数,使得整个数据流图只需要通过一次函数调用即可完成

DAG optimization

https://www.google.com/search?newwindow=1&sxsrf=ACYBGNTM-33yYNB6t-YxjZgxn5z3px1mng%3A1571064645210&ei=RYukXY-xDNHahwPkv4HICA&q=dag+optimization&oq=DAG+optimi&gs_l=psy-ab.3.0.0i19j0i8i30i19j0i5i30i19l2j0i8i30i19j0i10i30i19.4196264.4199390..4200506...0.0..0.64.587.10......0....1..gws-wiz.......35i39j0i67j0j0i131j0i12j0i12i30j0i30j0i12i30i19j0i30i19j0i12i10i30i19.pNwN6S1iSEI

OpenCV G-API

https://docs.opencv.org/4.0.0/d3/d7a/tutorial_gapi_anisotropic_segmentation.html

他的api设计很值得参考

抓圖後處理優化特殊需求

  • 常見的要有:公共值表達式消除,常量折疊 --》有现成的思路,参考tensorflow
  • 復雜的要有:tiling,把几个表达式一起求值,内核融合 --》??
  • 特殊的有:部分表达式求值。抓到一張圖之後立刻trigger相關的後處理 --》 ??自己写应该可以,但是用openvx不确定行不行

TODO

  • 研究openvino
  • 研究amd openvx
  • 自己写一个简单的graph executor。基于openvx接口
  • 研究openvx是否支持部分表达式求值

posted on 2019-10-12 12:39  cutepig  阅读(386)  评论(0编辑  收藏  举报

导航