技术论文
建设和部署深学习神经网络的5个步骤
发表于04/24/2020.
| By: FLIR Systems, Administrator
介绍
“一张图片胜过千言万语”从来没有如此真实的机器愿景如今。随着深入的学习,数千个甚至数百万条代码都可以被图像培训的简单神经网络替换,并且很少的编码。
伟大的消息是,深度学习不再是一种用于研究人员或人员具有高度专业技能和/或大预算的方法。今天,许多工具是免费的,教程很容易找到,硬件成本低,甚至没有成本提供的训练数据。这提出了机会和威胁 - 因为新的球员出现扰乱建立的名称和刺激创新。它还为您的机器视觉系统提供了以前无法造成的事情的机会 - 例如,深入学习可用于识别意外的异常,通常很难实现传统编码。
部署深度学习神经网络的一个值得注意的好处是,它允许在边缘以最少的硬件和很少的处理能力执行复杂的决策——基于ARM或FPGA的低成本系统和像FLIR Firefly DL这样的新型推理摄像机使这成为可能。
在本文中,您将学习:
- 深度学习的基本术语
- 机器视觉任务的类型深入学习最适合
- 开发和部署神经网络以推动边缘的5个步骤
- 可用的工具和框架即可开始
- 提示使过程更容易
- 深度学习考虑的潜在缺点
什么是深度学习:基本面
深度学习是机器学习的一个子集,灵感来自于人类大脑的工作方式。深度学习之所以叫做“深度”,是因为它有多个不同权重的神经元“层”,这些神经元帮助神经网络做出决策。深度学习可以分为训练和推理两个阶段。
在训练阶段,你定义神经元的数量和你的神经网络将组成的层,并将其暴露给标记的训练数据。有了这些数据,神经网络就可以自己学习什么是“好”,什么是“坏”。例如,如果您正在对水果进行分级,您将显示标记为“A级”、“B级”、“C级”等的水果的神经网络图像。然后神经网络计算出每个等级的属性;如大小、形状、颜色、颜色的一致性等。你不需要手动定义这些特征,甚至不需要编程什么太大或太小,神经网络自己训练。一旦训练阶段结束,结果就是一个经过训练的神经网络。
使用神经网络评估新图像的过程被称为推断。当您使用新图像呈现训练有素的神经网络时,它将提供推理(即答案):例如“级别达到95%的信心”。
开发深度学习申请的5个步骤
深度学习申请的发展广泛需要5个步骤。每个步骤的高级描述遵循:
步骤1]确定适当的深度学习功能
在深度学习的世界中,任务被分类为几个功能。我们考虑最常见的机器愿景是:
分类
深入学习的第一和最基本的应用是分类。该过程涉及基于公共属性将图像分类为不同的类别和分组图像。例如,您可以使用分类来将缺陷部分与良好的分类分开在生产线上的良好一线,或者在下面的图1中所示的PCB焊接检查(使用FLIR FirFly DL推理相机)。
图。1。用于使用FLIR FIREFLY DL识别缺陷焊料的分类。
检测和本地化
另一个理想的机器视觉深度学习任务是检测和定位。使用此函数,您可以识别图像中的特征,并提供边界框坐标来确定其位置和大小。例如,它可以用于检测一个人违反了生产线上机器人的安全参数,或识别生产/装配线输送系统上的单个坏零件。
分割
第三种类型的深度学习是细分;通常用于识别图像中的哪些像素属于哪个对应对象。分段是确定对象的上下文的应用的理想选择,并且需要彼此的关系(例如自动车辆/高级驾驶员辅助系统,俗称作为ADA)。
图2用于识别目标及其位置的检测、定位和分割。
异常检测
这种类型的深度学习任务可用于识别与模式不匹配的区域。一个典型的应用程序的示例,其中异常检测可以增加价值是在杂货店的库存控制和库存管理,如图4所示。此应用程序涉及使用推理相机来检测和突出显示空或即将需要补充的货架,提供实时通知和提高效率。
第2步]选择您的框架
确定您打算使用的深度学习功能后,您需要一个工具集(开发人员称之为“框架”)最适合您的需求。这些框架将提供初学者神经网络和用于训练和测试网络的工具的选择。
凭借一些世界上最大的技术公司在深入学习市场中争夺主导地位,框架就像TensorFlow通过谷歌,Caffe2.由Facebook和OpenVino.通过英特尔(免费)展示流入深度学习市场的投资和资源量。在该频谱的另一端,您也有Pytorch.,一个开源的解决方案,现在是Facebook的一部分。这些工具易于使用,并提供了很好的文档(包括示例),因此即使是新手也可以用最少的努力训练和部署神经网络。
讨论所有可用框架将保证单独的文章,但以下指针列出了3个最受欢迎的框架中的3个关键优势和缺点:
Pytorch.
- 简单易用。
- 用于许多研究项目。
- 不常用于大型部署。
- 只支持Python。
TensorFlow
- 具有良好文档的大用户群。
- 与Pytorch相比的高学习曲线。
- 提供可扩展的生产部署并支持移动部署。
Caffe2.
- 轻量级,转化为高效部署。
- 最古老的框架之一(广泛支持的CNN和计算机愿景的库)。
- 最适合使用OpenCV的移动设备。
您选择的神经网络最终将取决于手头任务的复杂性和您需要运行推理的速度。例如,一个人可以选择一个有更多层和更多神经元的神经网络,但推理会运行得更慢。通常,一个经过训练的神经网络只需要很少的计算能力,并且可以在几毫秒内产生结果。这使得复杂的深度学习推理可以通过低功耗的ARM板在边缘执行,或者通过特殊制造的推理摄像头(如FLIR Firefly DL)在边缘执行。
此外,甚至缺乏资源和雇员的公司甚至学习和实施深度学习解决方案,也可以依赖第三方顾问;谁可以通过整个开发周期帮助各种利益相关者 - 从概念化到部署。一个这样的示例是谜图案。
步骤3]为神经网络准备培训数据
Depending on the type of data you want to evaluate, you’ll require a repository of images with as many characteristics you hope to utilize in your evaluation and they need to be labelled appropriately As an example, if your neural network needs to identify a good solder from a bad one, it would need hundreds of variations of what a good solder looks like and a similar set of what bad solders look like with labels that identify them as such.
有几个途径获取图像数据集:
- 对于常见的使用情况,您可能会找到一个预先标记的数据集,它与您的特定要求匹配在线购买(在许多情况下,甚至是免费的)。
- 生成合成数据可能是若干应用的有效选项;特别是因为不需要标记。类似的公司Cvedia;由FLIR支持模拟技术和先进的计算机视觉理论,以建立高保真合成训练套装。这些数据集被注释并针对算法培训进行了优化。
- 如果不可用的前两个选项,则需要使用自己的图像并单独标记它们。通过市场上提供的几种工具(缩短了以下缩短开发时间表的几种工具和技术),这一过程变得简单。
有用的提示:
在构建自己的深度学习码的过程中,几个开发人员开源了他们的解决方案,很乐意免费分享它们。如果数据集未预先标记,则调用一个这样的工具特别有用,称为LabelImg;一个图形图像注释工具,可帮助将对象标记为图像中的边界框。或者,整个过程可以外包给第三方。
另一种缩短数据准备阶段的方法需要通过对它们进行图像处理来增加一个图像到许多不同的图像中(旋转,调整大小,拉伸,亮,亮/变暗......等)。这也将释放开发时间,因为捕获训练数据和标记图像的过程可以卸载到新手用户。
此外,如果您具备特定的硬件限制或偏好,这变得更加重要,因为下一节中讨论的深度学习工具支持有限的硬件,并且通常不能互换。
步骤4]列车并验证神经网络以确保准确性
在数据准备好之后,您将需要训练、测试和验证您的神经网络的准确性。这个阶段包括在您的计算机上配置和运行脚本,直到培训过程为您的特定用例提供可接受的准确性水平。建议的最佳实践是将培训和测试数据分开,以确保在培训期间不使用用于评估的测试数据。
通过利用转移学习,可以加速该过程:该过程涉及利用预先训练的网络并将其重新展示另一个任务。由于深神经网络中的许多层进行了特征提取,因此不需要撤退这些层以对新对象进行分类。因此,您可以将转移学习技术应用于预先训练的网络作为起点,并且只备删除几层而不是训练整个网络。流行的框架喜欢Caffe2.和TensorFlow免费提供这些。
此外,添加要检测到已经训练的神经网络的新功能与向有缺陷的图像集添加其他图像并应用转移学习以恢复网络。这比基于逻辑的编程更容易且更快地更易于;在您必须将新逻辑添加到代码,重新编译和执行,同时确保新添加的代码不会引入无标记错误。
如果您缺乏培训您自己的神经网络的编码专业知识,则有几种基于GUI(图形用户界面)的软件,可以使用不同的框架。这些工具使培训和部署过程非常直观,即使不太经验丰富的用户。Matrox Mil.是来自机器视觉世界的一个这样的例子。
步骤5]部署神经网络并在新数据上运行推理
最后一步需要在所选硬件上部署培训的神经网络,以测试性能并收集现场的数据。最初的推理阶段应理想地在该字段中使用以收集额外的测试数据,可用作未来迭代的培训数据。
以下部分简要概述了具有一些相关优势和缺点的典型方法:
云部署
- 关于硬件成本的大大节省
- 能够快速扩展
- 能够部署和传播多个位置的变化
- 需要互联网连接是一个关键的缺点
- 与边缘部署相比的更高延迟(由于本地硬件和云之间的数据传输量)
- 降低可靠性(连接问题可能导致关键故障)
边缘(标准PC)
- 适用于高性能应用
- 高度可自定义(构建与应用程序相关的部分)
- 灵活定价(可以根据应用选择组件)
- 成本更高
- 通常,更大的足迹
边缘(手臂,FPGA和推理相机,如FLIR FIRFLY DL)
- 低功耗
- 外围硬件的大量节省
- 高可靠性
- 适用于在一个系统中需要多个摄像机的应用程序(有助于将处理要求卸载到多个摄像机)。
- 安全(因为硬件可以与其他干扰隔离)
- 适用于需要紧凑尺寸的应用
- 不适合计算苛刻的任务
- 与FPGA解决方案相比,基于VPU的解决方案具有更高的性能/功率比
- 与基于VPU的解决方案相比,FPGA解决方案具有更好的性能
图像:DL推理相机的一个例子 - FLIR FIREFLY DL
深度学习的潜在缺点
既然我们概述了开发和部署过程的概述,它将与一些缺点看起来有关。
- 深度学习在很大程度上是一个黑盒子,很难真正说明/弄清楚神经网络是如何做出决策的。这可能对某些应用无关紧要,但医疗、健康和生命科学领域的公司对FDA或其他地区的同行批准的产品有严格的文件要求。在大多数情况下,您需要充分了解您的软件是如何工作的,并且需要详细地记录整个操作。
- 在部署深度学习时争辩的另一个问题是,以可预测的方式优化您的神经网络非常困难。许多目前正在接受培训和使用的神经网络,利用转移学习来重写现有网络,同时发生很少的优化。
- 甚至在标签训练数据中的次要错误甚至可能因人为错误而发生,可以丢弃神经网络的准确性。此外,调试问题非常繁琐,因为您可能必须单独查看所有培训数据以查找错误的标签。
除了这些缺点之外,许多应用程序在概念上更适合基于逻辑的解决方案。例如,如果您的问题是明确的,确定性和可预测的,则使用基于逻辑的解决方案可以提供与深度学习相比的更好的结果。典型示例包括条形码读数,部分对准,精确测量等。
结论
即使有一些上面突出的一些缺点,深度学习累积的潜在好处远远超过了否定(快速发展,解决复杂问题,易用和部署的能力 - 只是为了命名几个)。此外,在克服这些缺点的深度学习领域,存在持续的改进。例如,激活映射可用于在视觉上检查当神经网络在做出决定时正在考虑图像中的像素,以便我们可以更好地了解网络的结论。此外,通过更广泛的采用,许多公司现在正在开发自己的神经网络,而不是依赖转移学习 - 提高性能并定制对特定问题的解决方案。即使在适用于基于逻辑的编程的应用中,深度学习也可以帮助底层逻辑来提高系统的整体精度。作为一个离别说明,它比以往任何时候都更容易和更便宜,开始开发自己的深度学习系统:点击这里了解如何建立低于600美元的DL分类系统。