基于深度学习的智能PCB板缺陷检测系统(Python+清新界面+数据集)

简介: 基于深度学习的智能PCB板缺陷检测系统(Python+清新界面+数据集)

前言


       随着社会的发展和工业产业的快速发展,工业电子产业随之快速发展。其中PCB板是我们经常用到,但是PCB电路板经常会有一定的缺陷率。PCB电路板常见的缺陷检测技术有自动光学检测技术、计算机视觉检测技术等。工厂车间操作人员需借助电子显微镜或放大镜,根据现场作业操作人员主观经验及视觉测量来确定PCB的合格率,这种传统的检测方式准确率低,缺陷检测效率低,数据集合分析难度大。PCB板缺陷检测机器视觉识别系统应运而生。

       基于深度学习的智能PCB板缺陷检测系统是近年来计算机视觉领域的研究热点,同时也是目标检测领域中的难点。其目的是识别和定位图像中存在的各种缺陷,在许多领域中都有广泛的应用。本系统采用登录注册进行用户管理,对于图片、视频和摄像头捕获的实时画面,系统可检测PCB电路板,系统支持结果记录、展示和保存,每次检测的结果记录在表格中。对此这里给出博主设计的界面,同款的简约风,功能也可以满足图片、视频和摄像头的识别检测,希望大家可以喜欢,初始界面如下图:



       检测类别时的界面截图(点击图片可放大)如下图,可识别画面中存在的多个类别,也可开启摄像头或视频检测:



        详细的功能演示效果参见博主的B站视频或下一节的动图演示,觉得不错的朋友敬请点赞、关注加收藏!系统UI界面的设计工作量较大,界面美化更需仔细雕琢,大家有任何建议或意见和可在下方评论交流。


1. 效果演示


       日常使用的软件颜值非常重要,首先我们还是通过动图看一下识别的效果,系统主要实现的功能是对图片、视频和摄像头画面中的线路进行识别,识别的结果可视化显示在界面和图像中,另外提供多个缺陷处的显示选择功能,演示效果如下。本系统界面上显示的所有文字、图标、图片均可自行修改,修改方式可见上面的视频介绍。

(一)系统介绍

       智能PCB板缺陷检测系统主要用于印刷电路板(PCB)缺陷的智能检测,利用相机采集的PCB图像,基于深度学习技术识别包括漏孔、鼠牙洞、毛刺等6种常见的缺陷类型,输出缺陷处的标记框和对应类别,以辅助自动化PCB质量检测;软件提供登录注册功能,可进行用户管理;软件能有效识别相机采集的图片、视频等文件形式,检测PCB表面缺陷情况,并记录识别结果在界面表格中方便查看;可开启摄像头实时监测和统计流水线上的PCB产品以检测其缺陷,支持结果记录、展示和保存。



(二)主要特点

        (1)YOLOv5算法实现,模型一键切换更新;

        (2)摄像头实时检测PCB,展示、记录和保存缺陷情况;

        (3)检测图片、视频等图像中的PCB缺陷;

        (4)支持用户登录、注册,检测结果可视化功能;

        (5)提供数据集和训练代码可重新训练;

(三)选择图片识别

       系统允许选择图片文件进行识别,点击图片选择按钮图标选择图片后,显示所有识别的结果,可通过下拉选框查看单个结果,以便具体判断某一特定目标。本功能的界面展示如下图所示:



(四)视频识别效果展示

       很多时候我们需要识别视频中PCB板,这里设计了视频选择功能。点击视频按钮可选择待检测的视频,系统会自动解析视频逐帧识别多个PCB板的缺陷,并将结果记录在下方表格中,效果如下图所示:



(五)摄像头检测效果展示

       在真实场景中,我们往往利用摄像头获取流水线的实时画面,对PCB板进行实时识别,因此本文考虑到此项功能。如下图所示,点击摄像头按钮后系统进入准备状态,系统显示实时画面并开始检测画面中的PCB板,识别结果展示如下图:




2. 基于YOLOv5的缺陷检测


(一)PCB检查方法

       电气测试通常测量测试点之间的阻抗特性以检测所有连续性(即开路和短路)。视觉测试通过视觉检查电子元件的特性和印刷电路的特性来发现缺陷。在寻找短路或开路缺陷时,电气测试更加准确。视觉测试可以更容易地检测导体之间的缺陷,包括漏孔、开路、毛刺、鼠牙洞等。目视检查通常在生产过程的早期进行。尝试发现缺陷并修复它们,以确保最高的产品良率。

(1)人工目检PCB板

       电气测试通常测量测试点之间的阻抗特性以检测所有连续性(即开路和短路)。视觉测试通过视觉检查电子元件的特性和印刷电路的特性来发现缺陷。在寻找短路或开路缺陷时,电气测试更加准确。视觉测试可以更容易地检测导体之间的错误间隙。目视检查通常在生产过程的早期进行。尝试发现缺陷并修复它们,以确保最高的产品良率。

(2)PCB板子在线测试

       通过电气性能测试识别制造缺陷并测试模拟、数字和混合信号组件电路板检测,以确保它们符合规范。有几种测试方法,例如针床测试仪和飞针测试仪。主要优点是每块板的测试成本低、强大的数字和功能测试能力、快速彻底的短开放测试、可编程固件、高缺陷覆盖率和易于编程。主要缺点是需要测试夹具、编程和调试时间、夹具制造成本高、使用困难。

(3)深度学习检测

       PCB板缺陷检测识别系统通过YoloV5网络深度学习技术,对现场PCB是否存在缺陷部分进行实时分析检测,当检测到PCB本身存在缺陷的时候,立即抓拍存档告警方便后期针对性的进行调整改。Yolo系列算法是一类典型的one-stage目标检测算法,其利用anchor box将分类与目标定位的回归问题结合起来,从而做到了高效、灵活和泛化性能好,所以在工业界也十分受欢迎,接下来我们介绍本系统的Yolo系列算法。

(二)基于YOLOv5的缺陷识别系统

        YOLOv5的整体结构如下图所示,和之前版本的Yolo类似,整个YoloV5可以依然可以分为三个部分,分别是Backbone,FPN以及Yolo Head。



        Backbone可以被称作YoloV5的主干特征提取网络,根据它的结构以及之前Yolo主干的叫法,我一般叫它CSPDarknet,输入的图片首先会在CSPDarknet里面进行特征提取,提取到的特征可以被称作特征层,是输入图片的特征集合。在主干部分,我们获取了三个特征层进行下一步网络的构建,这三个特征层我称它为有效特征层。

       FPN可以被称作YoloV5的加强特征提取网络,在主干部分获得的三个有效特征层会在这一部分进行特征融合,特征融合的目的是结合不同尺度的特征信息。在FPN部分,已经获得的有效特征层被用于继续提取特征。在YoloV5里依然使用到了Panet的结构,我们不仅会对特征进行上采样实现特征融合,还会对特征再次进行下采样实现特征融合。

       Yolo Head是YoloV5的分类器与回归器,通过CSPDarknet和FPN,我们已经可以获得三个加强过的有效特征层。每一个特征层都有宽、高和通道数,此时我们可以将特征图看作一个又一个特征点的集合,每一个特征点都有通道数个特征。Yolo Head实际上所做的工作就是对特征点进行判断,判断特征点是否有物体与其对应。与以前版本的Yolo一样,YoloV5所用的解耦头是一起的,也就是分类和回归在一个1X1卷积里实现。

       因此,整个YoloV5网络所作的工作就是 特征提取-特征加强-预测特征点对应的物体情况。整个项目的实现步骤如下图所示,首先需要配置好Python环境依赖,利用YOLOv5加载训练数据集进行训练,得到pt模型后用于UI界面中的PCB板缺陷检测。



3. PCB板缺陷检测识别


       PCB版缺陷检测数据集的部分截图如下所示,其中训练集6975张图片,验证集1989张图片、测试集包括997张图片,共计9961张图片构成。该数据集涵盖漏孔、鼠牙洞、开路、短路、毛刺、杂铜等类别,所有缺陷处均添加标记框。


python
Chinese_name = {'missing_hole': "漏孔", 'mouse_bite': "鼠牙洞", 'open_circuit': "开路", 'short': "短路", 'spur': "毛刺",
                'spurious_copper': "杂铜"}


       数据集中各类标签、图片的情况如下图所示,从柱状图的统计结果可以看出各类别样本数目接近,发布较均匀,适合用来进行训练模型。



       然后我们可以执行train.py程序进行训练。在深度学习中,我们通常通过损失函数下降的曲线来观察模型训练的情况。而YOLOv5训练时主要包含三个方面的损失:矩形框损失(box_loss)、置信度损失(obj_loss)和分类损失(cls_loss),在训练结束后,我们也可以在logs目录下找到生成对若干训练过程统计图。下图为博主训练PCB板类识别的模型训练曲线图。



       一般我们会接触到两个指标,分别是召回率recall和精度precision,两个指标p和r都是简单地从一个角度来判断模型的好坏,均是介于0到1之间的数值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,为了综合评价目标检测的性能,一般采用均值平均密度map来进一步评估模型的好坏。我们通过设定不同的置信度的阈值,可以得到在模型在不同的阈值下所计算出的p值和r值,一般情况下,p值和r值是负相关的,绘制出来可以得到如下图所示的曲线,其中曲线的面积我们称AP,目标检测模型中每种目标可计算出一个AP值,对所有的AP值求平均则可以得到模型的mAP值。



       以PR-curve为例,可以看到我们的模型在验证集上的均值平均准确率为0.862。

       在训练完成后得到最佳模型,接下来我们将帧图像输入到这个网络进行预测,从而得到预测结果,预测方法(predict.py)部分的代码如下所示:


python
parser = argparse.ArgumentParser()
parser.add_argument('--weights', nargs='+', type=str, default='./weights/pcb-best.pt',
                    help='model.pt path(s)')  # 模型路径仅支持.pt文件
parser.add_argument('--img-size', type=int, default=480, help='inference size (pixels)')  # 检测图像大小,仅支持480
parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')  # 置信度阈值
parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')  # NMS阈值
# 选中运行机器的GPU或者cpu,有GPU则GPU,没有则cpu,若想仅使用cpu,可以填cpu即可
parser.add_argument('--device', default='',
                    help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
parser.add_argument('--save-dir', type=str, default='inference', help='directory to save results')  # 文件保存路径
parser.add_argument('--classes', nargs='+', type=int,
                    help='filter by class: --class 0, or --class 0 2 3')  # 分开类别
parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')  # 使用NMS
opt = parser.parse_args()  # opt局部变量,重要
out, weight, imgsz = opt.save_dir, opt.weights, opt.img_size  # 得到文件保存路径,文件权重路径,图像尺寸
device = select_device(opt.device)  # 检验计算单元,gpu还是cpu
half = device.type != 'cpu'  # 如果使用gpu则进行半精度推理
model = attempt_load(weight, map_location=device)  # 读取模型
imgsz = check_img_size(imgsz, s=model.stride.max())  # 检查图像尺寸
if half:  # 如果是半精度推理
    model.half()  # 转换模型的格式
names = model.module.names if hasattr(model, 'module') else model.names  # 得到模型训练的类别名
colors = [[random.randint(0, 255) for _ in range(3)] for _ in range(len(names))]  # 给每个类别一个颜色
img = torch.zeros((1, 3, imgsz, imgsz), device=device)  # 创建一个图像进行预推理
_ = model(img.half() if half else img) if device.type != 'cpu' else None  # 预推理


       执行得到的结果如下图所示,图中PCB板缺陷的种类和置信度值都标注出来了,预测速度较快。基于此模型我们可以将其设计成一个带有界面的系统,在界面上选择图片、视频或摄像头然后调用模型进行检测。



       博主对整个系统进行了详细测试,最终开发出一版流畅得到清新界面,就是博文演示部分的展示,完整的UI界面、测试图片视频、代码文件,以及Python离线依赖包(方便安装运行,也可自行配置环境),均已打包上传,感兴趣的朋友可以通过下载链接获取。


相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
9天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
134 55
|
8天前
|
机器学习/深度学习 数据可视化 TensorFlow
使用Python实现深度学习模型的分布式训练
使用Python实现深度学习模型的分布式训练
121 73
|
19天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
107 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
16天前
|
机器学习/深度学习 数据采集 搜索推荐
使用Python实现深度学习模型:智能食品消费行为预测
使用Python实现深度学习模型:智能食品消费行为预测
58 8
|
16天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
72 5
|
8天前
|
机器学习/深度学习 网络架构 计算机视觉
深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过研究卷积神经网络(CNN)的结构和原理,本文展示了深度学习如何提高图像识别的准确性和效率。同时,本文也讨论了数据不平衡、过拟合、计算资源限制等问题,并提出了相应的解决策略。
50 19
|
8天前
|
机器学习/深度学习 传感器 人工智能
探索深度学习在图像识别中的应用与挑战
【10月更文挑战第21天】 本文深入探讨了深度学习技术在图像识别领域的应用,并分析了当前面临的主要挑战。通过介绍卷积神经网络(CNN)的基本原理和架构设计,阐述了深度学习如何有效地从图像数据中提取特征,并在多个领域实现突破性进展。同时,文章也指出了训练深度模型时常见的过拟合问题、数据不平衡以及计算资源需求高等挑战,并提出了相应的解决策略。
51 7
|
18天前
|
机器学习/深度学习 自动驾驶 算法
深度学习在图像识别中的应用
本文将探讨深度学习技术在图像识别领域的应用。我们将介绍深度学习的基本原理,以及如何利用这些原理进行图像识别。我们将通过一个简单的代码示例来演示如何使用深度学习模型进行图像分类。最后,我们将讨论深度学习在图像识别领域的未来发展趋势和挑战。
|
18天前
|
机器学习/深度学习 数据采集 算法
深度学习在图像识别中的应用与挑战
本文探讨了深度学习技术在图像识别领域的应用,重点分析了卷积神经网络(CNN)的基本原理、优势以及面临的主要挑战。通过案例研究,展示了深度学习如何提高图像识别的准确性和效率,同时指出了数据质量、模型泛化能力和计算资源等关键因素对性能的影响。
|
18天前
|
机器学习/深度学习 计算机视觉
深度学习在图像识别中的应用与挑战
本文深入探讨了深度学习技术在图像识别领域的应用及其面临的挑战。通过分析深度学习模型如卷积神经网络(CNN)的工作原理,我们揭示了这些模型如何有效地处理和识别图像数据。同时,文章也指出了当前深度学习在图像识别中遇到的一些主要问题,包括过拟合、数据集偏差和模型解释性等,为读者提供了对这一领域全面而深入的理解。

热门文章

最新文章