/ Brandon TreeceNI高级产品市场经理

 

长期以来,机器视觉一直被用于工业自动化系统中,通过替代传统的人工手动检查来提高生产质量和产量。在我们的日常生活中,各种相机和摄像头产品已经在计算机、移动设备和汽车等产品广泛应用,但是机器视觉领域最大的进步是处理能力。随着处理器的性能每两年增加一倍、并且持续关注并行处理技术(如多核CPUFPGA),视觉系统设计人员现在可以应用高度复杂的算法,来实现数据可视化并创建更智能的系统。

 

处理器性能的提升,意味着设计人员可以获得更高的数据吞吐量,从而实现更快的图像采集、使用更高分辨率的图像传感器、并充分利用市场上能提供最高动态范围的一些最新相机产品。性能的提高不但能帮助设计人员更快地获取图像,而且也可以更快地处理图像。预处理算法(如阈值处理和过滤)或处理算法(如模式匹配)可以执行得更快。这最终使设计人员能够比以前更快地基于视觉数据做出决策。

 

随着更多的包含最新一代多核CPU和强大的FPGA的视觉系统进入市场,视觉系统设计人员需要了解使用这些处理单元的好处和需要作出的权衡。他们不仅需要知道在正确的目标上使用正确的算法,而且还要了解作为他们的设计基础的最佳架构。

 

 

1:在FPGA协同处理中,使用CPU获取图像,然后通过DMA发送到FPGA,以便FPGA可以执行操作。

 

 

内部处理与协同处理

 

在考虑哪种类型的算法最适合每个处理单元之前,应该先了解哪种类型的架构最适合每种应用。在开发基于CPUFPGA的异构架构视觉系统时,需要考虑两种主要情况:内部处理和协同处理。通过FPGA协同处理,FPGACPU一起工作,共同完成处理任务。这种架构最常用于GigE VisionUSB3 Vision相机中,因为它们的采集逻辑最好使用CPU实现。可以使用CPU获取图像,然后通过直接存储器访问(DMA)将其发送到FPGA,这样FPGA就可以执行诸如滤波或颜色平面抽取等操作了。然后,可以将图像发回到CPU,以进行更高级的操作,如光学字符识别(OCR)或模式匹配。在某些情况下,也可以在FPGA上进行所有处理步骤,然后只将处理结果发回到CPU。这样,CPU可以将更多的资源用于其他操作,如运动控制、网络通信和图像显示等。

 

FPGA内部处理架构中,可以将相机接口直接连接到FPGA的引脚,这样像素便从相机直接传递到FPGA。这种架构通常用于Camera Link相机中,因为它们的采集逻辑可以使用FPGA上的数字电路轻松实现。这种架构主要有两大优势。首先,如同协同处理一样,内部处理方式也可以通过在FPGA上执行预处理功能,将部分工作从CPU转移到FPGA上执行。例如,在将像素发送到CPU之前,可以使用FPGA实现高速预处理功能,如过滤或阈值。这也减少了CPU必须处理的数据量,因为它实现了仅捕获来自感兴趣区域的像素的逻辑,这增加了整个系统的吞吐量。该架构的第二个好处是,它允许在FPGA内实现高速控制操作,无需使用CPUFPGA是控制应用的理想选择,因为它们的运行速度极快,具有非常确定的循环速率。其中一个例子是高速分拣,在这个过程中,FPGA将脉冲发送到执行器,然后执行器在零件经过时对其进行分类。

 

 

2:在FPGA内部处理架构中,相机接口直接连接到FPGA的引脚,这样像素能从相机直接传递到FPGA

 

CPUFPGA视觉算法比较

 

对构建异构视觉系统的不同方式有了基本的了解后,便可以考虑在FPGA上运行的最佳算法。首先,要了解CPUFPGA是如何运行的。为了说明这个概念,考虑在一幅图像上执行四种不同操作的一种理论算法,并检查每种操作在CPUFPGA上是如何运行的。

 

CPU按顺序执行操作,因此第一个操作必须在第二个操作开始之前在整个图像上运行。在这个例子中,假设算法中的每个操作步骤在CPU上运行需要6ms;因此,完成这个算法的总处理时间为24ms。现在考虑在FPGA上运行相同的算法。FPGA本质上是大规模并行运行的,因此该算法中的四个操作步骤中的每一个步骤,可以同时在图像中的不同像素上操作。FPGA接收第一个处理像素的时间只有2ms,处理整个图像的时间长度为4ms,总共的处理时间为6ms。很显然,FPGA的处理速度比CPU快。即使使用FPGA协同处理架构并将图像在CPU之间进行传输,包括传输时间在内的总体处理时间,还是远少于单独使用CPU所用的时间。

 

例如,为粒子计数准备一幅图像。首先,应用卷积滤镜来锐化图像。接下来,通过阈值运行图像以生成二进制图像。这不仅可以通过将其从8位单色图像转换为二进制图像来减少图像中的数据量,还可以为二元形态学(binary morphology)准备图像。最后一步是使用形态学来实施关闭功能。这能够去除二进制粒子中的任何孔。

 

 

3FPGA在本质上是大规模并行运行的,它们能比CPU有明显的性能提升。

 

如果仅在CPU上执行上述算法,则必须在阈值步骤开始之前完成整个图像上的卷积步骤。使用NI公司面向LabVIEW的视觉开发模块(Vision Development Module)和基于Xilinx Zynq-7020全可编程SoCcRIO-9068 CompactRIO控制器时,执行上述算法需要的时间为166.7ms。但是,如果在FPGA上运行相同的算法,则可以并行执行每个步骤。

 

FPGA上运行相同的算法只需8ms即可完成。请记住,8ms的时间中包括将图像从CPU发送到FPGADMA传输时间,以及算法完成的时间。在某些应用中,可能需要将处理后的图像发回到CPU,以供应用中的其他部分使用。如果加上这个时间的话,整个过程也只需8.5ms。总的来说,FPGA执行这个算法要比CPU20倍。

 

那么,为什么不在FPGA上运行每个算法呢?尽管FPGACPU更有益于视觉处理,但是要享受这些优势也要做出一定的权衡。例如,考虑CPUFPGA的原始时钟频率。FPGA的时钟频率在100~200MHz数量级。很显然,FPGA的时钟频率低于CPU的时钟频率,CPU可以轻松地在3GHz或更高的频率下运行。因此,如果一个应用需要一种必须迭代运行的图像处理算法,并且不能利用FPGA的并行性,那么CPU能够更快地进行处理。前面讨论的示例算法在FPGA上运行可以获得20倍的速度提升。该算法中的每个处理步骤同时对各个像素或一组像素进行操作,因此该算法可以利用FPGA的并行优势来处理图像。然而,如果算法使用诸如模式匹配和OCR这样的处理步骤,这些要求立即分析整个图像,这时候FPGA的优势就比较勉强了。这是由于缺少处理步骤的并行化,以及需要大量内存进行图像与模板之间的比对分析。虽然FPGA可以直接访问内部和外部存储器,但通常情况下,FPGA可用的存储器数量远不及CPU可用的数量,或是这些处理操作所需的数量。

 

4:使用FPGA协同处理架构运行视觉算法,性能比仅用CPU运行同样的算法提高了20倍。

 

克服编程复杂性

 

FPGA用于图像处理的优势,取决于每种应用要求,包括应用的特定算法、延迟或抖动要求、I/O同步和功耗等因素。

 

通常使用具有FPGACPU的架构,能充分利用FPGACPU各自的优势,并且在性能、成本和可靠性方面都具有竞争优势。然而,实现基于FPGA的视觉系统面临的最大挑战之一是克服FPGA的编程复杂性。视觉算法开发本质上是一个迭代过程。完成任何一项任务都必须尝试多种方法。大多数情况下,需要确定的不是哪种方法可行,而是哪种方法最好,而“最好方法”的判定则因应用的不同而不同。例如,对于某些应用而言,速度至关重要;而对于另一些应用,则更看重准确度。至少,需要尝试几种不同的方法才能为特定应用找到最好的方法。

为了实现生产率的最大化,不论使用哪种处理平台,都需要立即获得关于算法的反馈和基准测试信息。当使用迭代探索性方法时,实时查看算法结果将会节省大量时间。

 

 

5:在一种基于配置的工具中为FPGA开发算法,能减少等待代码编译的时间,加快开发速度。

 

什么是正确的阈值?用二元形态滤波器剔除的颗粒有多大或多小?哪种图像预处理算法和算法参数,能最好地清理一幅图像?这些都是开发视觉算法时的常见问题,并且能够进行更改、并快速查看结果是关键。然而,传统的FPGA开发方法可能会减缓创新,因为算法的每个设计变化之间需要编译时间。

 

克服这一弊端的一种方法是使用算法开发工具,帮助您在同一环境下开发CPUFPGA,而不会陷入FPGA编译时间的困境。NIVision Assistant是一种算法工程工具,其能帮助您开发在CPUFPGA上部署的算法,从而简化视觉系统设计。您还可以使用Vision Assistant在算法在目标硬件上编译和运行之前,测试算法,同时轻松地访问吞吐量和资源利用信息。