将机器视觉提速20倍!瑞萨DRP是怎么做到的?
时间:2023-08-24 08:51来源: 作者: 点击: 次工业生产要实现自动化,必然离不开的帮忙。
RZ/A2M集成了瑞萨特有的(动态可重新配置处理器)技术,拥有超高性能的图形图像处理能力。在拥有硬件级别运算能力的同时,也能够从软件层面对运算逻辑进行实时修改,保证了灵活性的同时也拥有不俗的图像处理能力。本文中,我们将重点介绍RZ/A2M在工业自动化领域应用的优势,包括更高的图像处理能力以及超低的功耗。
视频中的机械臂之所以能够如此灵活的识别并抓取目标物体,是因为有RZ/A2M独有的模块对的图像处理过程进行加速。外接的显示器上可以看到,整个图像处理流程(包括bayer转RGB、阴影校正&白平衡、RGB转二值化图像、寻找轮廓、图像降噪、Bayer转灰阶送显示等)只用了不到3ms,最终达到VGA(640x480)分辨率下60fps的优良性能。
什么是DRP?
DRP全称是Dynamically Reconfigurable Processer,即动态可重配置处理器。是瑞萨独创的体系结构,能够动态的调整硬件运算单元的逻辑电路,实现各式各样的运算功能。
DRP有6个独立的单元称为“Tile”,它们可以加载多个配置数据(即算法库)并且并行的执行,这些算法库存放在系统内存中,在需要的时候由CPU下发指令将其加载到各个Tile中。
任何时候都可以修改各个Tile中的算法库,并且在修改过程中不会影响其它Tile的运行。
DRP采用动态加载的方法可以在极小的硬件资源上实现应用对不同图像处理算法高速处理的需求。
DRP凭什么这么优秀?
DRP是一个硬件资源,所有的运算逻辑都在硬件层面实现,每个Tile都是一个独立的运算单元,Tile拥有的硬件资源是一定的,所以当有算法库用到的硬件资源较多的时候,就需要两个甚至更多的Tile来协同配合,以下是DRP所拥有的硬件资源。
DRP在运行的过程中,会自动的根据算法库的复杂程度,灵活的对硬件资源进行一些整合,比如在一个Tile内,将两个16bit的乘法器合并成一个32bit的乘法器使用;或者将一个16bit的乘法器与一个计数器组合使用等。进一步扩大了DRP的运算能力。
硬件的运算能力我们都非常清楚,比如目前应用非常广泛的FPGA的算力就和CPU完全不在一个量级,然而FPGA的缺陷也很明显,就是运算规模直接和门电路数量挂钩,需要实现复杂的算法就必须用更多的门数,而且一旦算法要求的门数超出了项目初期的FPGA选型,则不得不更换更大规模的FPGA,非常的不方便。
这个时候,DRP的灵活性就体现出来了,它不仅可以在库与库之间灵活切换,在同一个库的内部,也能在不同的时钟周期内,动态调整运算电路之间的逻辑,来实现各种各样的运算方式。通过这种分时复用的方式,最大限度的提升了运算性能,给小体积发挥大能力提供了无限可能。
动态可重配置的性能可以在1个时钟周期内内修改运算电路的组合方式,动态加载可以在1ms内重新装载整个新的算法库。
DRP甚至可以通过多个Tile运行同一个算法库来提高处理速度。比如将一张图片等分为6份,交给6个Tile进行图像处理,性能直接在原有的基础上提升6倍!
一般来说,性能提升往往会伴随着功耗的增加。但是用DRP来提升图像处理能力是一种另辟蹊径的优化方式,而且这种方式的能耗要远远低于CPU的能耗。
如何使用DRP?
前边介绍了诸多DRP的优势,大家可能对于DRP的使用方法有诸多猜测,可能会担心难以上手。但是!不用担心!瑞萨电子为大家提供了完整的服务,目前我们开发了大约50个算法库供大家使用,大部分算法库与opencv库的功能和接口相似,非常方便即可在一个普通的工程中使用DRP。
图为cv库和DRP库的切换
下面我们以Bayer转RGB的库为例,看看在使用DRP的时候需要做哪些事情。
首先是函数接口,需要提供的参数包括输入地址、输出地址、图像宽高以及是否使用tinning(在转换过程中可以同时对图像尺寸进行压缩)。
在函数内部,需要先将DRP的库load到DRP硬件中去,g_drp_lib_bayer_binning2rgb这个数组中存放的就是编译好的二进制格式DRP库。我们使用6个Tile并行处理一张图片的方式,因此给6个Tile都load此库。
Load之后,依次给每个Tile传入计算参数并启动它。由于这里是同一张图裁成6份,所以每个Tile只负责一张图的1/6,因此在这里需要分别计算每个Tile的起始位置和输出位置。计算完毕后下发Start命令让这个Tile开始运行。
最后等待6个Tile全部运算完毕即可。
下面我们来具体看看,机械臂是如何借助DRP的强大功能,实现了如此快速的物体检测与跟踪的。
在机械臂上电初始化以后,暂时没有找到目标,所以工作在物体检测的模式。这个模式的工作流程如下:
可以看到camera采集到一帧图像后,
① 由DRP做了一次Bayer到RGB的转换,这个转换同时将图像的宽高压缩到了原来的1/4,可以在不丢失准确率的前提下加快后续流程的速度;这个库只占用1个tile,所以可以将图片拆分成6份同时进行,耗时0.4ms。
② 给DRP中load阴影校正&白平衡的库,对上一步的结果做矫正,这个库由于使用的资源较多,占用两个tile,所以需要把图像拆分成3份操作,耗时0.8ms。
③ 由RGB图转换为HSV图并提取其中V的值。方便后续的移动物体检测以及轮廓提取,耗时0.2ms。
④ 使用“加权移动平均法”提取运动的物体,此算法耗时0.6ms。
⑤ 根据上一步得出的物体信息,寻找轮廓和中心点。(由CPU完成)
⑥ 如果找到目标,则转入物体跟踪的流程,否则重复这个过程。
⑦ 其它一些显示相关的处理流程。
假如上述流程中找到了目标,那么就会进入物体跟踪的流程,物体跟踪模式的工作流程如下
① 可以看到前两步处理方式都是一样的,Bayer转RGB + 阴影校正&白平衡共消耗1.2ms。
② 由于这个模式中已经确定画面中存在物体,所以直接对图像进行二值化处理,调用DRP中RGB转Binary的库进行转换操作,耗时0.8ms。
③ 由CPU寻找轮廓并计算中心点坐标和角度。 CPU分别计算坐标、角度与画面中心的偏差值,并根据此值调整各个电机的控制量,耗时0.7ms。
④ 由于前序对图像尺寸做了压缩,所以上一步计算的坐标并不是实际坐标,还需要进行一次坐标换算。
⑤ 用于显示的Bayer转灰阶图的库,以及其他显示相关的流程,耗时0.3ms。
目前我们可以提供的约50个库都能实现2~80倍不等的性能提升,这些性能提升是相对于RZ/A2M 528MHz Cortex A9 CPU做的对比。DRP库对性能的提升普遍在10~20倍之间,10倍以下的库提升效果不明显的原因是这些算法本身过于简单,优化空间太小。以下列举了部分现有的库以及运算能力对比供大家参考。
当然,如果客户有想要的库是我们暂时没有的,也可以给瑞萨电子提需求,我们会综合考虑后安排到后续开发计划中。
或者,如果客户有一些自有的比较机密的算法想移植到DRP中使用,我们也可以提供DRP库开发的相关培训,手把手教你开发DRP库。