5 步构建并部署深度学习神经网络
使用深度学习简化和加快机器视觉的执行。
简介
“一张图片胜过千言万语”在现在的机器视觉领域里尤为真实。机器视觉可以将数千乃至数百万行代码用简单的经过图片和少量编码训练后的神经网络代替。
重要的是,深度学习不再只是具备专业技能和/或拥有大量预算的研究人员才可以使用的方法。现在,许多工具都是免费的,可以轻松找到试用版,硬件成本较低,甚至训练数据都可以免费获得。这种情况下,机遇和危险并存——随着新的参与者涌现,瓦解知名,刺激创新。同时它也使您的机器视觉系统有机会进行以往无法想象的工作——举例说明,深度学习可以用于传统编码通常难以或几乎无法识别的突发异常。
部署深度学习神经网络的一项值得关注的优势在于它允许通过少量硬件和处理功率在边缘作出复杂决定——低成本 ARM 或 FPGA 基础系统和全新推断摄像头,如 FLIR Firefly DL 可以做到。
您可以从本文学习:
- 深度学习使用的基础术语表
- 深度学习最适合进行的机器视觉任务类型
- 开发和部署一个用于边缘推断的神经网络的 5 个步骤
- 着手部署的可用工具和框架
- 简化过程的小贴士
- 需考虑的深度学习潜在缺陷
什么是深度学习:原理
深度学习是机器学习的一部分,后者受人脑工作方式启发。深度学习的“深度”是指重要性不等的神经元存在多“层”,能帮助神经网络作出决定。深度学习可以分为两个阶段:训练和推断。
在训练阶段,您将确定神经网络包含的神经元和层的数量,并使之接触已标签化的训练数据。通过此数据,神经网络将自行学习什么是“良好”或“不良”。例如,进行水果分级时,您会向神经网络展示标记为“A 级”、“B 级”、“C 级” 等图像。然后神经网络识别出每一级的属性;包括尺寸、形状、颜色、颜色一致性等等。您不需要手动确定这些特征或对大小的程度进行编程,神经网络将会自行训练。训练阶段完成后便获得经过训练的神经网络。
使用某一神经网络评估新图像的过程叫做推断。当您向经过训练的神经网络展示新图像时,它会提供一个推断(即一个答案):如“A 级,置信度为 95%”。
开发深度学习应用的 5 个步骤
深度学习应用的开发大体需要 5 步。以下为每个步骤的概括性描述:
步骤 1] 识别适当的深度学习功能
深度学习领域中,任务按数种功能分类。我们认为对机器视觉最为常见的有:
分类
深度学习的第一种也是最基础的应用是“分类”。其过程涉及将图像分为不同等级并按照常见属性分组。例如,您可以使用分类从生产线的良好部件中分离出瑕疵部件,用于质量控制或执行 PCB 焊锡检查——如下面图 1 所示(使用 FLIR Firefly DL 推断摄像头)。
Fig.1. 用于通过 FLIR Firefly DL 识别瑕疵焊锡的分类。
检测和定位
机器视觉的另一理想的深度学习任务称为“检测和定位”。您可以使用此功能识别某一图像的特征并提供边界框坐标以确定其位置和尺寸。例如,它可用于查明违反生产线机器人安全参数的人员,或识别生产/装配线输送系统上的单个不良部件。
分割
第三类深度学习是分割;通常用于识别某一图像的像素属于哪些对应对象。对于需确定对象上下文及其相互关系的应用(例如自动驾驶汽车/高级驾驶员辅助系统,通常称为 ADAS),分割是其理想选择。
图 2 用于识别对象及其位置的检测、定位和分割。
异常检测
这类深度学习任务可用于识别与模式不匹配的区域。杂货店的存货控制和库存管理作为典型示例,说明了异常检测可以获得增值,如图 4 所示。此应用使用推断摄像头检测到并突显空货架或需补充的货架,提供实时通知并提高效率。
Step 2] 选择您的框架
确定想要使用的深度学习功能后,您需要一个最匹配需求的的工具集(开发人员称其为“框架”)。这些框架将提供神经网络启动选择和网络的训练和测试工具。
一些全球科技巨头正在争夺深度学习市场的主导,谷歌的 TensorFlow、Facebook 的 Caffe2 以及Intel 的 OpenVino(全部免费)等框架均向深度学习市场投入了大量资金和资源。此外,您也可以使用 Pytorch 这一开源解决方案,目前已并入 Facebook。这些工具使用简单,但提供出色的文档(包括示例),因此即便是新手用户也可以轻松训练和部署一个神经网络。
讨论所有可用框架需要单独一篇文章的篇幅,不过我们在下面指针中列出了 3 种流行框架的主要优势和劣势:
Pytorch
- 简单易用。
- 用于许多研究项目。
- 大型部署不常用。
- 只完全支持 Python。
TensorFlow
- 用户基数大,文档优质。
- 学习曲线高于 Pytorch。
- 提供规模可变的生产部署,而且支持移动部署。
Caffe2
- 轻量级,转化为高效部署。
- 最早的框架之一(用于 CNN 和机器视觉的受广泛支持的库)。
- 使用 OpenCV 的移动设备最为适用。
神经网络的选择最终取决于手头任务的复杂性以及推断需要的运行速度。例如,我们可以选择更多层和神经元的神经网络,但推断运行速度会变慢。通常,经过训练的神经网络只需占用很少的计算能力,并且可以在几毫秒内得出结果。因此它允许使用低功耗 ARM 板在边缘执行复杂的深度学习推断,或者使用 FLIR Firefly DL 等特制的推断摄像头进行边缘推断。
此外,即便公司缺乏学习和实施深度学习解决方案的资源和员工,也可以依靠第三方顾问;后者将在整个开发周期——从概念设计到部署——为各种客户提供帮助。Enigma Pattern (https://www.enigmapattern.com) 便是其中一种。
注册获取更多类似文章
Step 3] 为神经网络准备训练数据
根据待评估的数据类型,您需要一个图像库,其中的图像具有评估中预计使用数量的特征,并需要进行适当标记。例如,如果您的神经网络需要从不良焊锡中识别良好的焊锡,则需要数百种良好焊锡的外观特征变化,也需要一组可同理识别的相似的不良焊锡外观标记。
获取图像数据集的途径有以下几种:
- 对于常见的用例,您可能需要一个满足您特定需求的预标记数据集,可以在线购买(许多情况下甚至免费)。
- 合成数据可以作为许多应用的有效选择,特别是不需要标记的时候。Cvedia 这类公司受 FLIR (https://www.cvedia.com) 支持,采用模拟技术和高级计算机视觉理论来构建高保真合成训练数据集包。这些数据集已为算法训练进行了注释和优化。
- 如果前两种选项不可用,您需要使用自有图像,逐个标记。这一过程可通过市场上的许多工具简化(下面将简要讨论可以缩短开发时间线的一些工具和技术)。
实用小贴士:
许多开发人员在构建自己的深度学习代码过程中开源了解决方案,并乐于免费共享。如果您的数据库未预标记,有一种叫做 LabelImg 的工具特别有用;它是一种图形图像注释工具,帮助将对象标记到图像的边界框中 (https://github.com/tzutalin/labelImg)。另外也可以将整个过程外包给第三方。
另一种缩短数据准备阶段的方法是对图像进行处理(旋转、调整大小、拉伸、变亮/变暗等),将一个图像扩充为许多不同的图像。这种方法也可以节省开发时间,因为新手用户可以完成训练数据捕获和图像标记的过程。
此外,它对于具有特定硬件限制或偏好的人员更加重要,因为深度学习工具(下一部分讨论)支持有限的硬件组,且通常不可互换。
Step 4] 训练并验证神经网络以确保精度
数据准备完毕后,您需要训练、测试以及验证神经网络的精度。此阶段需要在您的计算机上配置和运行脚本,直至训练过程达到具体用例的可接受精度水准。建议最好保持训练和测试数据分离,以确保您用于评估的测试数据不会在训练期间使用。
过程加速可以借助迁移学习:将预训练网络改用于另一任务的过程。由于深度神经网络中有许多层在执行特征提取,因此它们无需重新训练便可分类新对象。这样的话,您可以向预训练网络应用迁移学习技术作为起始点,然后只重新训练几层,而不是训练整个网络。Caffe2 和 TensorFlow 等常用框架可免费提供这些功能。
而且,添加新功能以检测已完成训练的神经网络,和在缺陷图像集中添加其他图像并应用转移学习进行网络重新训练一样轻松。它比基于逻辑的编程更简单快速;编程时,您必须在代码中添加新逻辑,然后再编译和执行,同时还要确保新添代码不会引发不必要的错误。
如果您缺乏自己训练神经网络的编码知识,可以借助几款基于 GUI(图形用户界面)的软件,它们可用于不同框架。即便对经验不足的用户,这些工具也使训练和部署过程变得非常直观。Matrox MIL 是机器视觉领域的一种此类工具。
Step 5] 部署神经网络并在新数据上运行推断
最后一步涉及在选定硬件上部署已训练神经网络,以测试性能并收集现场数据。理想情况下,前几个推断阶段应在现场使用以收集其他测试数据,然后用作后续迭代的训练数据。
下面部分将概述部署的常用方法及相关优势和劣势:
云部署
- 大量节省硬件成本
- 快速扩展的能力
- 在数个位置部署和普及变更的能力
- 最大劣势是需要互联网连接
- 比边缘部署延迟更高(因本地硬件和云端间的数据传输量大)
- 可靠性较低(连接问题会造成严重故障)
边缘(标准 PC)
- 适合高性能应用
- 高度可定制(通过与应用相关的部件构建)
- 价格灵活(可按应用选择组成部分)
- 成本更高
- 通常占用大得多
边缘(ARM、FPGA 和 FLIR Firefly DL 这类推断摄像头)
- 低功耗
- 外设成本大幅节省
- 可靠性高
- 适合一个系统需要多个摄像头的应用(有助于将处理需求分载到数个摄像头)。
- 安全(硬件可与其他推断设备分离)
- 适合要求紧凑尺寸的应用
- 不适用于艰巨的计算任务
- 相较于 FPGA 解决方案,基于 VPU 的解决方案性能/功率比更高
- FPGA 解决方案比基于 VPU 的解决方案性能更优
图像:DL 推断摄像头示例——FLIR Firefly DL
深度学习潜在缺陷
既然我们已经概述了开发和部署过程,那么也有必要考量其缺陷。
- 在大多数情况下深度学习是一个黑匣子,很难真正解释/阐明神经网络如何做出决定。这对于某些应用而言可能无关紧要,但是医疗、健康与生命科学领域的公司对于需要 FDA 或其他地区的同类审批机构予以批准的产品有严格的文档要求。多数情况下,您需要完全了解软件的功能并详细记录完整操作。
- 难以用可预测方式优化您的神经网络是部署深度学习时需解决的另一个问题。许多目前正在训练和应用的神经网络利用了迁移学习来重新训练已有的网络,但很少进行优化。
- 因此即便是训练数据标记时经常因人为失误而导致的小错误,也会降低神经网络精度。而且,问题纠错异常繁琐,因为您可能要逐一检查所有训练数据才能找出错误标记。
除上述缺陷外,许多应用在理论上还是更适合使用基于逻辑的解决方案。比如,如果是界定清晰、确定性和可预测的问题,使用基于逻辑的解决方案相较于深度学习可能会提供更好的结果。其中一般包括条码读取、部件对齐、精密测量等。
结论
即便深度学习存在上述强调的缺陷,其潜在优点仍然大于缺点(快速开发、解决复杂问题的能力、易于使用和部署——仅举几项说明)。另外,深度学习领域正在不断改进以克服这些缺陷。例如,可以利用激活图直观查看神经网络作出决定时考量了图像中的哪些像素,以便我们更好地了解网络得出结论的方式。而随着采用度越来越广,许多公司目前已经在开发自有的神经网络,而不再依赖于迁移学习——提高性能并针对具体问题定制解决方案。即使是适用基于逻辑的编程的应用,深度学习也能协助基础逻辑提高系统的总体精度。值得一提的是,现在着手开发您自己的深度学习系统比以往越来越简单和实惠:点击此处了解如何用少于 $600 的成本构建一套 DL 分类系统。
我们随时提供帮助!
现在联系一位摄像头专家。