今年嵌入式视觉峰会的论文为以光为输入的嵌入式系统建议了多种方法,以及使这些输入发挥作用所需要的各种算法和硬件实现。应用包括了简单的静态机器视觉直至实时多路摄像机视频的分类和分析。而硬件则包括微控制器到专用超级计算机,以及神经网络仿真器阵列等。 可能令人吃惊的是,有如此需求和实现要求的大部分这类系统都可以描述为一个处理流水线的组成。最简单的系统只实现流水线最前面几级。要求更高的系统实现深一些的流水线级,到了机器智能这一点,流水线的所有级都出现了,可以构成一个巨大的神经网络模型。 每一级即使实现起来很难,但很容易描述(图1)。在第一级,通常是一个简单的算法,从图像中提取出特征。特征是很容易探测到的模式,例如,边沿、拐角,或者小波等,是物体出现时稳定的属性——即使是位置或者光照等外部因素变化时。印刷字符的线段或者弧段,人脸上的明亮区域分布等都是这方面的例子。取决于您要提取的特性种类,最好的工具,例如,图像的卷积内核扫描,或者基于梯度的矩阵分析等,找到像素颜色或者亮度大幅度变化的某一点。
图 1.大部分视觉系统都遵循可预测的流水线。
在下一级,系统寻找特征列表中的模式。一个简单的系统可能只是寻找空间关系——靠近竖条顶部是不是有一个环?或者,系统会寻找时间关系——每一种特征在这一帧和前一帧之间是怎样移动的:是不是有总是一起移动的特征?可以重复这种模式搜索,找到模式之间的模式,以此类推。可以通过基于规则的算法来完成这类模式搜索,或者通过卷积神经网络进行。 下一级更具挑战性:找到目标。从抽象的感觉出发,目标是持续的一组有相关因素的模式,例如,彼此靠近,颜色相同,被边界围住,或者总是一起移动,等等。还是可以通过基于规则的系统——尽管这可能会非常复杂,或者卷积神经网络来完成目标提取。 下一级尝试对目标分类:对其命名,加上属性。分类可以使用观察到的信息,例如,位置、形状和颜色;关于位置的先验信息,例如,知道所有目标必须是十进制数字;或者神经网络中学到的参数。 最后,要求最高的系统的最后一级会使用分类目标和它们之间的关系来建立可预测的场景模型——目标在干什么,下面会发生什么事件等。这一级也会在这些事件上附加价值判断。一般而言,在卡尔曼滤波器或者神经网络层上实现。 找到特征 几乎所有视觉系统的第一步都是特征提取。非常合理的是,系统寻找的特征种类取决于它要实现什么。但是有一些通用分类。 可能最简单的是纯粹的人工特征:专门针对视觉系统的优点而特别标记在目标上的模式。例子包括条形码、快速响应(QR)码,以及对齐码型等。条形码读码器一直保持扫描,直至扫描到产生有效二进制字符串的码型。QR和对齐码型是不同的,它们支持采用简单算法来探测码型的出现和位置,从中提取出数据。 在真实环境中,QR码和对齐码型还有其他要求。提取过程通常要识别接收到的场景中的区别性特征。能完成这一工作的几乎所有方法都取决于临近像素之间强度和颜色变化率的计算。在一圈像素中,其变化率最大,则充分表明了其本身的特征。通过这种方法,字符识别器减少了对笔画、位置和方向列表的手动写入。更通用的特征提取器将摄影场景缩减为由边沿和拐角组成的线条图,或者一些特征点。 一个有趣的特殊的情况主要用在人脸识别上。类哈儿特征——实际上是亮暗交替的一组矩形,可以用于抽象出人脸等图像,这类图像的边沿和拐角不是很明显,也不稳定。例如,人脸在面颊上有长而窄的浅色水平矩形区域,而在眼睛上则有大小类似的黑色矩形区域(图2)。基于规则的算法计算每一矩形中像素值之和,找出两个和之间的最大差值,甚至能够从对比度非常低的图像中提取出这些矩形。把这些矩形组合放到脸部的不同地方,生成基于矩形位置、形状和像素和的索引,这相对于一张人脸是相对稳定的,但是不同的人脸则不相同,从而对人做出判断。
图 2.亮暗矩形构成的类哈儿模式可以适配到人脸图像上
无论算法如何,特征提取器的工作是生成图像中的特征列表,一般会对每一特征附上属性。这一列表被送入更深的流水线中,进行模式识别。 获得目标 视觉流水线的下一级会把提取出的特征组织到模式中,这些看起来有稳定的联系,从这些特征模式中推断出场景中出现了目标物体。例如,在光字符读码器中,连接在一起的一组笔画——或者与其他笔画相比,彼此更靠近的笔画,就构成了一个字符。 把这些特征绑定在一起而形成目标物体,这一难题在照片或者视频等色调连续变化的系统中变得越来越难以处理。这些系统会有模式提取的几个连续层,按照距离、颜色、周围边沿,或者物体先验知识提供的其他规则对特征进行分组。把特征分组到模式中后,系统一般要应用更多的规则来识别目标特征模式。或者,系统会使用受过训练的卷积神经网络层,找到模式,推断出目标。 对于很多系统,只是找到目标,而不对其分类是不够的。嵌入式视觉峰会的两篇论文指出了这一点:Videantis营销副总裁Marco Jacobs关于单路摄像机3D视觉的报告,以及Dyson电子业务主任Mike Aldred关于公司视觉驱动机器人真空吸尘器,“360眼睛”的主题演讲。 Jacobs介绍了算法开发公司Viscoda开发的3D方法,Videantis然后将其用在自己的单指令、多数据视觉处理芯片中。算法并不是隔离目标然后测量其距离,而是通过基于像素值梯度的一系列矩阵操作,找到场景中的区别性特征——Jacobs称其为大量的特征点。通过找到梯度变化最大的像素,算法基本上能够作为拐角探测器。 摄像机移动一点后,算法再次对采集到的图像进行提取操作。通过对比两副图像中的特征点位置,算法指出两副图像之间的哪些特征点是匹配的,开发运动矢量,这与视频压缩中所使用的运动矢量相同。统计解算器使用这些矢量来估算摄像机的运动,每一特征点的距离,不是由视差造成的运动,从而表示出特征点所在目标的运动。 Jacobs说,“寻找帧之间的特征点时,会有很多模棱两可的地方。您要有大约1,000至1,500个特征点才能很好的理解目标范围。” Aldred描述了在“360眼睛”上所采用的相似的方法。他解释说,Dyson决定开发机器人后,一个简单的事实表明要采用基于视觉的系统。Dyson的签名离心式真空吸尘器需要功能强大的高转速电机。Aldred说到,“电池只能为我们提供45分钟的使用时间进行吸尘,然后就得回到充电状态。因此,我们不能进行随机扫地——我们不得不开发精确的地图,有条理的覆盖它。” 开发人员选择了垂直安装的摄像机以及环形镜头,输出360度图像——从“360眼睛”周围的地板一直到屋子的墙上。Aldred指出,“大部分屋子的天花板没有什么有用的信息。” 使用与Viscoda相似的方法,Dyson视觉处理器安装在圆柱形表面,处理区别性特征点。Aldred观察到,“它有非常丰富的特性。在墙上什么也没有的空屋子里,机器人工作的并不好。”从连续图像中,系统使用卡尔曼滤波器,计算运动矢量,提取出目标,进行同时定位和映射(SLAM)。 Aldred报告说到目前为止,已经测试了开发360眼睛中最长的过程,精炼了算法。他说:“想法是在2008年形成的。我们记录真实的数据——大量的真实数据,在仿真中验证了数学算法,按照我们的计划继续开发仿真器。而且,我们还进行了室内测试。8年多来,我们已经运行了100,000多次。” 使用神经元 大量测试考虑到基于规则的算法的成本。除非您能够非常严格的限制环境,仿真所有可能的情形,否则,您就会面对您的规则遇到新情况,去做一些不需要的工作。这种没有限度的风险使得某些研究人员回到采用老方法上,以解决难以界定的问题:神经网络。 一般的系统在图像上应用经过预定义的数学函数和分类规则来提取特征、找到目标并进行分类,建立可预测的模型,神经网络与这些系统不同,是节点阵列简单的连续层——称之为,生物学类比,神经元。每一个神经元在t+1时间的输出是前一层某些或者全部神经元在时间t的输出的函数——一般是非线性的,有时候还有些随机(图3)。
图 3.神经网络模型连接前一层的所有输出和当前层每一神经元的输入。
并不是为每一神经元选择输入函数,而是使用指导性的搜索过程来训练神经网络。其实,确定了您希望每一神经元要执行的函数后,您可以对所有神经元函数中的所有参数进行随机赋值,网络的第一层是一副图像,看看网络距离正确的对图像分类还有多远。例如,网络最后一级的一路输出可能会表示图像中是否出现了一头狮子。您测量实际网络输出与正确分类之间的误差,然后,使用这一误差来调整函数参数,使得网络向减少误差的方向发展。重复——通过大量的训练图像进行。 神经网络是数十年前视觉处理最先采用的方法。但是有两个问题阻碍了其进展。第一,随着图像分辨率的提高,神经元的数量以及连接的数量呈爆炸式增长。第二,随着网络的增长,训练时间长的让人难以忍受。 但是,两种技术发展解决了这些问题。第一个是卷积神经网络(CNN)的出现。CNN采用小的卷积引擎替代了前面几层的神经元。其中,每一个神经元可以连接至大量的像素或者前一层的输入,卷积引擎处理少量信号输入——例如,16*16像素阵列。并不是必须要训练任意函数,卷积引擎只是做一件事情:将其输入与内核程序进行卷积。您只需要通过训练来建立内核程序中的数值就可以了。 一次业界基准测试体现了CNN的重要性——Imagenet大规模视觉识别公开赛,这是由一些对此感兴趣的研究机构赞助的,包括,Facebook、谷歌、斯坦福大学,以及北卡罗来纳大学等。大量的测试图像,结合更多的训练图像,这已经成为测量静止图像识别系统的标准。 CNN很快在Imagenet挑战中脱颖而出,其目标分类结果准确率要比基于规则的系统高很多。但是,要达到这种结果的训练过程非常长。 Ren Wu是百度研究院深度学习杰出科学家,在一次主题演讲中介绍了他的组织是怎样在Imagenet挑战结果中遥遥领先的,至少目前是这样,其分类错误率只有4.58%。之所以实现了如此低的错误率,是因为百度使用了16层CNN,只有最后三层或者四层是由全连接神经元构成的。 而真正的投入是在训练上。百度生成Imagenet训练组变量,调整颜色和亮度,引入光失真,扩展已经穷尽的训练图像组。结果是一组二十亿副训练图像——这看起来即使是是基于超级计算机的CNN模型也无法完成。 这带来了第二个技术进步——硬件加速。百度CNN是在定制超级计算机上实现的。在训练过程中,系统使用了随机梯度递减算法,精简卷积内核程序和神经元输入函数。而CNN模型本身运行在CPU上,训练算法在32个Nvidia Tesla图形处理单元(GPU)中执行,这些单元连接了私有Infiniband网络。 训练完成后,执行CNN模型的计算负载大幅度下降。Wu说,您可以使用完整的经过训练的CNN非常快的训练较小的CNN。即使是非常小的设备,通过这种方式也能获得良好的性能。Wu宣称,“如果您释放出GPU内核的能力,即使是手机也能运行训练模型。我们有一个自动运行在智能手机上的OpenCL™模型演示,使用了手持式的Imagination Technology GPU。” 同时,IBM采用了完全不同的方法实现硬件加速。并不是在异构CPU/GPU系统上执行CNN模型,IBM的TrueNorth程序仍然是在全连接的神经网络上,是在定制芯片阵列上执行模型,这些芯片直接仿真神经轴突、神经元突触和神经元细胞。 目前的芯片在每个管芯中封装了大约一百万个神经元,有2.56亿个神经突连接。而整个计算机是大量的这些芯片通过网络连接起来,任何一个神经元的轴突都能够连接至任何其他神经元的突触。对于每个神经元的行为,每一个突触的行为和阈值都是可编程的。IBM表明,系统非常灵活,足以仿真生物神经元任何记录到的行为。 除了是全连接和非常灵活之外,TrueNort设计还具有另一个重要的特性。与在存储程序CPU上执行的模型不同,神经元芯片工作频率相对较低,使用了非常简单的内部运算。这样,一个芯片可以运行在100 mW,即使是采用现有的45 nm绝缘体硅片工艺,移动设备也完全胜任。 可以采用预先确定的函数对TrueNorth模型进行编程,也可以对其进行设计,然后采用传统的后向传播方法进行训练。使用后一种方法,IBM研究人员在分类场景中展示了令人印象深刻的结果。 我们研究了一些视觉处理系统,每一种都需要连续的提取特性,进行目标分类,执行可预测的模型等。我们注意到,这一连续的过程包括,从简单数学算法提取特性开始,还要采用基于复杂规则的分类器和卡尔曼滤波器,或者神经网络模型。我们尽量不去预测神经网络和CNN将来能否会成为这类具有挑战性的系统的优选实现方法,也不预测能否成为最有前途的终极方法。
|