使用计算机视觉进行PCB缺陷检测

该项目表明,我们可以在裸PC上实现零制造缺陷

使用计算机视觉进行PCB缺陷检测
在线工具推荐:三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 -  3D模型预览图生成服务

使用机器学习识别 PCB 缺陷

为了减少PCB上的缺陷数量,在装配线的各个点进行了多次检查。随着越来越多的PCB制造商和开发商希望获得更紧凑、更小的电路布局,公司已经开发了先进的检测系统,但有时缺陷仍然会被忽视。该项目旨在研究 PCB 上的三个缺陷,以及如何使用机器学习来识别它们。缺陷之一是缺孔,这可能是由于工具错误或加工过度造成的。这阻碍了将组件或安装件放置在 PCB 上。接下来是故障缺陷:开路和短路。这两者可能会导致设备无法正常工作。开路会产生无限高的电阻,从而阻止电流流动。另一方面,短路会产生低电阻,导致大电流流动,从而损坏组件甚至引起火灾。

快速上手

您可以在此处找到公共项目:制造的PCB缺陷检测.要将此项目添加到您的 Edge Impulse 项目中,请单击窗口顶部的“克隆”。或者,要创建类似的项目,请在创建新的 Edge Impulse 项目后执行以下步骤。

数据采集

本项目中使用的数据集来源于Kaggle PCB 缺陷数据集。该数据集由 1366 张 PCB 图像组成,具有 6 种缺陷。但是,对于此演示,我们将仅使用 3 种(漏孔、开路和短路)进行检测。这是因为此数据集的注释采用 XML 格式,但 Edge Impulse Uploader需要一个 bounding_boxes.labels 文件,其中包含唯一 JSON 结构中的边界框。对于这个项目演示,我们必须为所有图像绘制边界框,因此需要减小数据集的大小。此数据集使用了 9 个 PCB。为了创建包含缺陷的数据集,将人工缺陷添加到不同位置的PCB图像中,并保存为多个图像。这些是高分辨率图像,这是此目标检测的一个关键因素,因为较低分辨率的图像会减少对目标检测有用的信息,从而降低模型的准确性。我们总共有 887 张用于训练的图像和 253 张用于测试的图像。对于每个缺陷,我们总共有 380 张图像用于训练和测试。

训练数据

测试数据人工智能辅助标注不支持这个项目,因为我们的对象不是可以用 YOLOv5 识别的常见对象。想要获得YOLO模型支持的数据集,我们可以采用另一个合成数据生成工具:UnrealSynth虚幻合成数据生成器 - NSDT,UnrealSynth 虚幻合成数据生成器利用虚幻引擎的实时渲染能力搭建逼真的三维场景,为 YOLO 等 AI 模型的训练提供自动生成的图像和标注数据。UnrealSynth 生成的合成数据可用于深度学习模型的训练和验证,可以极大地提高各种行业细分场景中目标识别任务的实施效率,例如:安全帽检测、交通标志检测、施工机械检测、车辆检测、行人检测、船舶检测等。

标记数据

脉冲设计

有了数据集,我们现在需要配置重要功能:输入、处理和学习块。这是一个机器学习管道,用于指示输入数据类型,从数据中提取特征,最后是神经网络,用于训练数据中的特征。可以找到有关脉冲设计的文档这里.我们首先点击“创造冲动”。在这里,将图像宽度和高度设置为 1024x1024,将调整大小模式设置为 Squash。处理模块设置为“图像”,学习模块设置为“对象检测(图像)”。单击“Save Impulse”以使用此配置。

接下来,我们转到处理块“图像”并将颜色深度设置为灰度,因为我们使用的是 FOMO。保存参数,这将打开“生成特征”选项卡。

图像 - 参数我们通过单击“生成特征”按钮来生成特征。完成后,我们可以在 Edge Impulse 生成的 2D 空间中看到我们的功能数据资源管理器.

图像 - 功能构建模型的最后一步是训练步骤。在脉冲设计下,我们点击“对象检测”。接下来,我们点击“选择不同的模型”,选择FOMO(更快的对象,更多的对象)MobileNetV2 0.35。我们将训练周期数设置为 100,学习率设置为 0.01。单击“开始训练”,当任务完成时,我们会得到一个神经网络。训练过程完成后,我们可以查看模型的不同性能数据。其中包括 F1 分数、Raspberry Pi 4B 上的推理时间,以及 Pi 4B 上的峰值 RAM 和闪存使用率。

讨论模型性能

使用 FOMO(更快的对象,更多的对象)进行训练 MobileNetV2 0.35

训练模型后,我们得到了 48% 的 F1 分数。但是,F1 分数 48% 是好是坏?这取决于预测(我们想要解决的问题类型)。

训练表现F1 分数将精确率和召回率合并为一个指标。精确度是真阳性数除以真阳性数加上假阳性数(图片来源:Joos Korstanje)

精密配方召回率是从所有实际阳性病例中正确识别出的阳性病例的度量,即真阳性数除以真阳性数加上假阴性数。当在数据中找到所有阳性病例时,具有高召回率的模型会成功,而较低的召回率模型无法在数据中找到大部分阳性病例。简单地说,精确度告诉我们“在分类为漏孔/开路/短路的类别中,有多少或实际漏孔/开路/短路的比例是多少?另一方面,回想一下告诉我们“在实际漏孔/开路/短路的类别中,有多少实际上被归类为漏孔/开路/短路。下表显示了每个类别的模型性能:

F1 分数
精度
召回
缺失孔
0.55
0.54
0.56
开路
0.41
0.56
0.32
短路
0.44
0.54
0.37

在某些问题中,需要更高的精度。在我们的例子中,我们不想产生误报并通知一个好的 PCB 有短路,我们也不想漏报,这意味着通知有短路的 PCB 没有短路。与开路或短路相比,漏孔具有更好的预测性,因为它的特征更加明显。但是,在混淆矩阵中,我们从后台看到了很多误报。这可能是由于裸露的 PCB 往往具有看起来相似的部分,但每个部分的电路都非常不同。让我们看一下下图中数据集中的示例:

数据集示例在这张图片中,红色椭圆显示了一个区域,我们的模型可以预测为开路,因为铜走线没有到达铜焊盘。然而,我们人类可以看出铜迹线实际上是铜浇注,因此这不是一个开路点。因此,在标记数据集时,我们不会在此区域绘制边界框。同样的情况也适用于蓝色椭圆形,它显示一些铜焊盘连接到铜浇注上,并带有一些痕迹。这可以是与接地平面的连接,我们在这里不画边界框,但我们的机器学习模型无法进行这种复杂的分析,因此可以说这是一个短路区域。

模型测试

要测试我们的模型,我们转到“模型测试”,然后单击“全部分类”。我们的模型有 13% 的准确率,但等等!还有更多。让我们讨论一下这个结果。让我们看一下 F1 分数为 0% 的测试图像的模型性能。这张图片有 3 个短路标签,我们的模型能够准确地检测到 PCB 中的一个短路。

令人振奋的测试

令人振奋的测试放大了预测现在,让我们看另一个 F1 分数为 28% 的测试样本。该样本有 3 个标记的短路,我们的模型能够准确地确定它们。

测试样品 2

测试样本 2 放大预测在这个测试样品中,FOMO能够检测到两条铜走线之间的短路,这非常令人印象深刻,因为与其他短路情况相比,走线不是笔直和平行的。

测试样本 3 放大预测在模型测试中,准确度是精度分数高于 80% 的所有样本的百分比。 在我们的案例中,由于任何PCB缺陷都可能导致设备无法正常工作,因此即使在众多缺陷中检测一个缺陷也是可以接受的。这样,如果在PCB上发现缺陷,则可以在PCB上进行更详细的检查。

使用 YOLOv5 进行训练

在使用 FOMO 进行训练并分析结果后,我决定使用相同的数据集和类使用 YOLOv5 训练另一个模型。为了在此自定义数据集上训练 YOLOv5 模型,我使用Edge Impulse 自定义学习模块文档并将其推送到我的 Edge Impulse 帐户。该模型使用各种训练周期和学习率进行训练。在 100 个训练周期(epochs)和 0.01 的学习率下,该模型的精度得分为 0.0%,不可接受。

YOLOv5 模型测试这种性能可能是 YOLOv5 的局限性之一,它很难检测到成群出现的小物体。此外,建议使用每个类超过 1500 张照片和每个类超过 10,000 个实例来训练 YOLOv5 模型,以生成健壮的 YOLOv5 模型。这是一个非常庞大的数据集,我们通常采用UnrealSynth虚幻合成数据生成器 - NSDT  来生成YOLO模型训练的数据集。

部署到 Raspberry Pi 4

要将我们的模型部署到 Raspberry Pi,我们首先必须将 Raspberry Pi OS 映像闪存到 SD 卡,在 Raspberry Pi 上安装 Edge Impulse 依赖项,并将摄像头连接到 Pi。我使用 800 万像素 V2 相机模块来捕捉图像。Edge Impulse 具有文档了解如何设置 Raspberry Pi 以连接到 Edge Impulse 工作室,以及如何将模型部署到 Pi。设置 Raspberry Pi 后,我们可以运行命令 edge-impulse-linux  从 Raspberry Pi 中选择我们的项目,然后运行命令 edge-impulse-linux-runner 来运行我们的模型。在运行我们的模型时,我们可以看到 Raspberry Pi 相机捕获的内容和推理的实时分类。为此,我们将计算机连接到Raspberry Pi所连接的同一网络。接下来,在 Web 浏览器中,我们输入 Raspberry Pi 提供的 url(可能是 IP 地址)。

Pi4 脉冲转轮下面是在 Raspberry Pi 4 上运行的实时分类的屏幕截图,该模型成功检测到 PCB 上的 3 个缺失孔。

Pi4 实时分类在 Raspberry Pi 4 上,该模型的延迟为 ~1500 毫秒,等于 ~1 fps。在需要检查许多PCB的工业设置中,Raspberry Pi 4可能不是运行此模型的理想硬件。更高性能的硬件,如Jetson Nano开发者套件,它完全受Edge Impulse的支持,并具有针对边缘AI应用的GPU(Nvidia Tegra),可能更合适。

结论

该项目表明,通过集成机器学习进行视觉检测,我们可以在裸露的 PCB 上接近零制造缺陷。一个有趣的未来项目可能是将目标检测扩展到多层PCB,并使用深度学习模型来获得更好的性能。

NSDT场景编辑器 | NSDT 数字孪生 | GLTF在线编辑器 | 3D模型在线转换 | UnrealSynth虚幻合成数据生成器 | 3D模型自动纹理化工具
2023 power by nsdt©鄂ICP备2023000829号