OpenVX中 graph与node之间的关系,以及在CNN中的定位
很多小伙伴都知道,OpenVX是用来处理图像的一组API,核心是kernel函数的实现,OpenVX对于图像处理是调用底层硬件的GPU或者PPU等硬件加速器,所以相比于OpenCV,速度快了不止亿点点。
在OpenVX当中,有一个关键词叫做kernel,这里的kernel并不是指操作系统的kernel,而是指OpenVX中的一种功能,比如对一个图片进行高通滤波的功能就是openVX的一个功能,这在OpenVX里面叫做一个user kernel。既然kernel是一种提供给用户使用的功能,那么这个功能函数一般支持传参,通过参数的不同来改变kernel的运行结果(比如传入的图片就算一个参数)。在OpenVX当中,把参数定义初始化好后的kenrel叫做node, 因此,node就是kernel的一个实例化即拥有指定参数的kernel。
在CNN中,OpenVX的node就是一个layer层,而OpenVX的运行是基于node来运行的,所有的node会被链接到图(graph)中,最后由graph统一运行。 深度神经网络最近已成为解决各种计算机视觉问题的标准工具。虽然训练一个神经网络不在OpenVX的范围内,但导入一个预先训练过的网络并在其上运行推理是OpenVX功能的一个重要组成部分。表示函数的节点和表示数据的链接的graph API的概念对于使用OpenVX实现深度神经网络非常方便。事实上,每个神经网络单元都可以表示为一个graph node。OpenVX有一种特殊的数据类型来表示张量,以提供这些node之间的数据交换,而这些node本身是在OpenVX神经网络扩展中实现的。 另一种将神经网络导入到OpenVX中的方法是使用OpenVX内核导入扩展.这里就不细讲了, 有兴趣的小伙伴可以自己去官方提供的编程手册查阅,或者我的资源里也有相应的中文版翻译资料openvx programmming user guide 上图就很清楚的看出,处理图片数据流程中,data node graph三者之间的关系了。
|