文章来源:EDC
作者:Reese Grimsley德州仪器系统应用工程师
计算机视觉是指将人类视觉(一种信息丰富且直观的传感器)引入计算机的技术目标,使装配线检查、安全系统、驾驶员辅助和机器人等应用成为可能。
不幸的是,计算机缺乏像人类那样直觉视觉和图像的能力。相反,我们必须为计算机提供算法来解决特定领域的任务。
我们经常认为我们的愿景是理所当然的,以及这种生物能力如何解释我们的周围环境,从看冰箱检查食物保质期到专心观察红绿灯变绿。
计算机视觉可以追溯到 1960 年代,最初用于从页面读取文本(光学字符识别)和识别圆形或矩形等简单形状等任务。此后,计算机视觉已成为人工智能(AI)的核心领域之一,它涵盖了任何试图从数据中感知,合成或推断更深层次含义的计算机系统。有三种类型的计算机视觉:传统或“基于规则”、经典机器学习和深度学习。
在本文中,我将从让计算机使用视觉来更像人类一样感知世界的角度来考虑人工智能。我还将描述每种类型的计算机视觉的权衡,特别是在本地收集、处理和处理数据的嵌入式系统中,而不是依赖基于云的资源。
传统计算机视觉
传统的计算机视觉是指解决运动估计、全景图像拼接或线条检测等任务的编程算法。
传统的计算机视觉使用标准的信号处理和逻辑来解决任务。Canny边缘检测或光流等算法可以分别找到运动的轮廓或矢量,这对于隔离图像中的对象或后续图像之间的运动跟踪非常有用。这些类型的算法依赖于过滤器、转换、启发式和阈值,从图像或视频中提取有意义的信息。这些算法通常是特定于应用程序的算法的前身,例如解码一维条形码中的信息,其中一系列规则在检测到单个条形时对条形码进行解码。
传统的计算机视觉在其简单性和可解释性方面是有益的,这意味着开发人员可以在每一步分析算法并解释算法为什么会如此。这在软件审核或安全关键型应用程序中非常有用。然而,传统的计算机视觉往往需要更多的专业知识才能正确实现。
算法通常具有一小组参数,需要调整这些参数才能在不同环境中实现最佳性能。实施可能很困难,特别是对于优化的高通量应用程序。某些规则、算法决策或参数值可能会对不符合原始期望的图像产生意想不到的影响,从而有可能欺骗算法。如果不暴露新的边缘情况或增加算法的复杂性,此类漏洞和边缘情况可能很难修复。
用于计算机视觉的经典机器学习
机器学习是一类算法,它使用数据在算法中设置参数,而不是直接编程或校准。这些算法,如支持向量机、多层感知器(人工神经网络的前身)和k-最近邻,被用于传统计算机视觉难以解决的应用。例如,在传统的计算机视觉算法上编程“识别狗”是一项艰巨的任务,尤其是在存在复杂场景和物体的情况下。训练机器学习算法以从 100 秒或 1000 秒的样本图像中学习参数更容易处理。通过使用包含这些边缘情况示例的数据集来解决边缘情况。
训练是计算密集型的,但在新数据上运行算法需要的计算资源要少得多,因此可以实时运行。这些经过训练的模型通常具有较低的可解释性,但对数据中的小计划外变化(例如对象的方向或背景噪音)更具弹性。可以通过使用更多数据重新训练来修复无法很好地处理的变体。具有更多参数的较大模型通常具有更高的精度,但具有更长的训练时间以及运行时所需的更多计算,这在历史上阻止了非常大的模型在嵌入式处理器上的实时应用程序中使用。
基于机器学习的经典计算机视觉方法仍然需要专家来“制作”训练机器学习模型的特征集。其中许多功能在传统的计算机视觉应用程序中是通用的。并非所有功能都有用,因此需要分析以修剪无信息功能。有效实现这些算法需要图像处理和机器学习方面的专业知识。
深度学习
深度学习是指在大部分未处理或“原始”数据上运行的非常大的神经网络模型。深度学习通过将特征提取操作拉入模型本身,对计算机视觉产生了巨大影响,从而使算法根据需要学习信息量最大的特征。图1显示了每种计算机视觉方法中的数据流。
深度学习在计算机视觉类型中具有最普遍性;神经网络是通用函数逼近器,这意味着它们能够学习输入和输出之间的任何关系(只要存在这种关系)。深度学习擅长在数据中发现微妙和明显的模式,并且对输入变化最宽容。物体识别、人体姿势估计和像素级场景分割等应用是常见的用例。
深度学习需要最少的直接调谐和图像处理专业知识。这些算法依赖于大型和高质量的数据集,通过逐步找到在训练期间优化损失或错误指标的参数来帮助通用算法学习模式。新手开发人员可以有效地利用深度学习,因为重点从算法的实现转移到数据集管理。此外,许多深度学习模型是公开可用的,因此可以针对特定用例对其进行重新训练。使用这些公开可用的模型很简单;但是,开发完全自定义的体系结构确实需要更多的专业知识。
与传统的计算机视觉和经典机器学习相比,深度学习具有更高的准确性,并且由于在研究(以及不断增长的商业)社区中的巨大普及而迅速提高。然而,深度学习通常具有较差的可解释性,因为算法非常大且复杂;与训练数据集完全不同的图像可能会导致意外、不可预测的行为。由于它们的大小,深度学习模型的计算量非常大,因此需要特殊的硬件来加速它们的实时操作。在大型数据集上训练大型模型的成本可能很高,并且管理大型数据集通常既耗时又乏味。
然而,处理能力、速度、加速器(如神经处理单元和图形处理单元)的改进,以及对矩阵和矢量运算的软件支持的改进,使得计算需求的增加变得不那么重要,即使在嵌入式系统上也是如此。AM6xA 产品组合等嵌入式微处理器利用硬件加速器以高帧速率运行深度学习算法。
比较不同类型的计算机视觉
那么哪种类型的计算机视觉最好呢?
这最终取决于其应用,如图 2 所示。
简而言之,对于大多数属性,具有经典机器学习的计算机视觉介于其他两种方法之间;与其他两种方法相比,受益的应用程序集很小。传统的计算机视觉在简单、高通量或安全关键型应用中可以足够准确和高效。深度学习是最通用的,最容易开发的,并且在复杂的应用和环境中具有最高的精度,例如在高密度设计的PCB组装验证期间识别微小的缺失组件。
一些应用程序受益于串联使用多种类型的计算机视觉算法,以便它们覆盖彼此的弱点。这种方法在处理高度可变环境的安全关键应用中很常见,例如驾驶员辅助系统。例如,您可以使用传统的计算机视觉方法和深度学习模型来跟踪附近的车辆,并使用算法融合结果以确定这两种方法是否相互一致。如果他们不这样做,系统可以警告驾驶员或开始优雅的安全操作。或者,可以按顺序使用多种类型的计算机视觉。条形码阅读器可以使用深度学习来定位感兴趣的区域,裁剪这些区域,然后使用传统的CV计算机视觉算法进行解码。
计算机视觉实践
计算机视觉的进入门槛正在逐步降低。OpenCV 等开源库提供了边缘检测和颜色转换等常见功能的高效实现。像tensorflow-lite和ONNX运行时这样的深度学习运行时使深度学习模型能够在嵌入式处理器上高效运行。这些运行时还提供了自定义硬件加速器可以实现的接口,以简化开发人员在准备将算法从 PC 或云上的训练环境移动到嵌入式处理器上进行推理时的体验。许多深度学习架构也是公开发布的,因此它们可以重用于各种任务。
德州仪器 (TI) AM6xA 产品组合中的处理器(如 AM62A7)包含深度学习加速硬件以及针对各种传统和深度学习计算机视觉任务的软件支持。C66x 等数字信号处理器内核和用于光流和立体深度估计的硬件加速器也支持高性能的传统计算机视觉任务。
借助能够同时进行传统和深度学习计算机视觉的处理器,可以构建可与科幻梦想相媲美的工具。自动购物车将简化购物;手术和医疗机器人将引导医生发现疾病的早期迹象;移动机器人将修剪草坪并运送包裹。如果您可以设想它,那么您将要构建的应用程序也可以。
声明:转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。