如果您接触过质量控制或缺陷检测所用的视觉检查系统,便多少了解检查过程中的重重困难。 举个简单的例子:假设有一个传送六角螺母的工厂传送带,以及一个用于拍摄零件图像的检查相机。
假设相机拍摄了四张图像,此时操作人员可目测找出存在缺陷的螺母。
但对于下面这种情况,该怎么办呢?
如果拍摄了成千上万张图像,就需要使用自动系统将缺陷螺母挑选出来,与合格产品相区分。
本电子书说明如何使用 MATLAB® 开发深度学习网络,以对各种类型的异常进行检测和分类。
第 1 章 什么是自动光学检查?
自动检查与缺陷检测系统使用 AI 来检查零部件的故障和缺陷。该方法在各行各业得到广泛应用,可用于检测金属轨道、半导体晶圆和隐形眼镜等各类成品表面的缺陷。以下是一些企业应用自动检查系统的实例:
- 空中客车:检测多个飞机部件中的缺陷
- 武藏精密工业:检查用于汽车部件的圆锥齿轮
- 韩国铁道研究院:检测铁道设施元件(如钢轨、枕木和紧固件)中的表面缺陷、缺失部件以及裂缝
- 关西电力:评估钢管焊缝的蠕变损伤
借助 MATLAB 进行自动光学检查
本电子书说明如何使用 MATLAB® 开发深度学习网络,以对各种类型的异常进行检测和分类。缺陷检测工作流分为三个主要阶段:
- 准备数据,包括去噪、配准以及标注
- 构建并训练深度学习网络
- 在多个硬件平台(如 CPU 与 GPU)上部署网络
这是一种迭代工作流:
完成系统部署后,您将得到更多数据。您可以使用这些数据优化和调整模型,然后重新部署模型,获得更准确的结果。
在数据通过网络的过程中,部分层(卷积层、reLu 层以及池化层)会从图像中学习特征,而 softmax 层则会提供分类。
两种训练网络的方式
您可从头开始训练深度学习网络,或对预训练的网络进行微调。
从头开始训练
这种方法能够给出最准确的结果,同时也最具挑战性。它适合新的应用或输出类别数量较多的应用。不过,从头训练需要大量的数据与深度学习专业知识,因此大部分人会选择尝试第二种方法。
微调预训练的网络
这一方法会使用迁移学习。其主要思路是利用已有网络(如 AlexNet 或 GoogLeNet),向其馈入包含此前未知的类的新数据。在完成网络的调整后,您就可以执行新任务了。
与从头训练相比,迁移学习的速度更快,难度也更低。它的另一个优势是数据需求量小得多:只需数千张图像,而不是上百万张。
试验管理器
试验管理器可用于创建深度学习试验,在各种初始条件下训练网络并对结果进行比较。例如,深度学习试验可用于:
- 扫描一系列超参数值
- 使用不同数据集训练同一个网络,并比较结果
- 重用同一组数据集训练多个网络,以测试多种架构
试验管理器提供了训练图和混淆矩阵等可视化工具,以及用于细化试验结果的筛选器。
第 4 章 故障检测分类器迁移学习
要构建六角螺母分类器,可选择 MobileNet-v2 网络,因为与众多其他网络相比,该网络的速度更快、准确度更高且内存占用量更小。我们将重用特征提取层并替换分类层。
我们可使用深度网络设计器完成整个流程:
- 通过拖放添加新层并新建连接。
- 查看和编辑层属性。
- 分析网络以确保架构定义正确。
- 导入图像数据并选择增强选项。
- 对训练进度进行可视化与监控。
- 生成绘图以评估网络准确度。
评估网络性能
在模型将图像分类为合格和次品后,要确认分类是否准确,一种方式是生成混淆矩阵。
混淆矩阵可逐类显示模型的分类结果,从中可看出各类之间是否存在混淆。
在这里我们可以看到,对于所有 40 个测试样本(20 个合格,20 个次品),真实类与预测类都一致。当存在误分类以及有两类以上的目标时,混淆矩阵往往能提供更深入的信息。
混淆矩阵能解答一部分有关网络性能的问题,但并非全部。我们如何确定模型是在对正确的特征进行分类?以及……网络的工作原理又是什么?
深度学习网络往往被视为一个“黑盒”,我们很难获知它做出某种预测的原因。
类激活映射 (CAM) 和梯度类激活映射 (Grad-CAM) 等可解释 AI 方法能够为 CNN 的预测提供可视化解释。
类激活映射
类激活映射 (CAM) 会生成一张热图,其中突出显示输入图像中被网络用于分类的部分。您可借助这些结果来强化正确的预测,或查看网络中出现“混淆”的原因。
以下面的两个 CAM 可视化为例。
在左侧图中,鼠标的存在可帮助模型确定这是一张键盘的照片。这种分类方法可能是(也可能不是)有效的。
在右侧图中,网络将一张咖啡杯的照片分类为带扣。网络检测并重点关注手表腕带,而不是咖啡杯。那么,究竟什么才是正确的:模型还是真实值?
您可能认为模型出错了,但实际上模型工作正常,只是根据错误的特征做出了预测。您可以纠正训练集中的偏差,方法是收集更具代表性的数据,以反映您希望网络重点关注的场景。
下面对我们的六角螺母分类模型使用 CAM。左侧为拍摄的图像,右侧为分类与 CAM。
如果网络将某个螺母分类为次品,则会重点关注缺陷部分。因此,我们不仅能看到图像得到正确的分类,还能看到模型做出这一决策的原因。
成功开发和训练深度学习模型之后,接下来就要将其整合到更大的系统中以投入使用。
MATLAB 可帮助您将深度学习网络从单一源部署至各类嵌入式硬件平台,如 NVIDIA® GPU、Intel® 与 Arm® CPU、FPGA 或 SoC 设备,还可部署至云或边缘设备,且无需重写原始模型代码。
显然,您需要选择最符合您的功耗与内存占用量要求的部署选项,在此过程中需要有所取舍。举个例子,一个需要考虑的重要因素是延迟。如果光学系统使用高速相机,您可能会要求低延迟,尤其是在强调安全性的情形下。
部署选项对比
设备 | 优点 | 缺点 |
---|---|---|
FPGA | 低延迟,低功耗 | 编程困难 |
CPU | 编程简单灵活 | 吞吐量最低 |
GPU | 吞吐量最高 | 高功耗 |
确定部署选项后,您可在 MATLAB 中进行试用,了解其实际性能。如果想在 FPGA 上进行部署,您可以适当更改网络以满足性能要求,然后重新运行,而且这些操作都可以在 MATLAB 中完成。比如在六角螺母的例子中,由于其中涉及的图像较为简单,您可移除一些卷积层以简化网络。或者,您也可以实施定点量化,这可以提升性能并降低延迟,但可能会牺牲一些准确度。