说明

根据读者反映,咱们的这个PCB素材设置的不对,应该是没有漆,铜线等等,应该是黑白的。额,具体我也知道,但没去过工厂,实在很难获得这些素材。。。
所以就当是一次瑕疵识别的实践,具体的数据集你可以自己定义。代码在Github:
Source code : https://github.com/Ixiaohuihuihui/Tiny-Defect-Detection-for-PCB

一点心路历程,供需要做瑕疵识别的同学参考。
PCB瑕疵识别是毕业设计的题目,要求能够定位印刷电路板上面的瑕疵位置和瑕疵类别。为了完成毕业设计,我们实验室同一级的6个小伙伴对这个印刷电路板瑕疵识别进行了一系列探索。

PCB数据集

现在几乎没有开源的PCB数据集,可以用于深度学习训练的PCB瑕疵数据集,所以我们实验室的wepon同学重点是制作了一个简单的PCB瑕疵数据集,包括拍摄PCB图像,瑕疵是PS的(因为工厂生产出来的很少有缺陷样本),标注数据集。需要注意的是:我们处理的PCB是裸板,也不是多层的。

你可以从这里下载数据集:http://robotics.pkusz.edu.cn/resources/dataset/

瑕疵包括六种:missing hole, mouse bite, open circuit, short, spur, spurious copper. 整个数据集有693张图片,一张图片上有3-5个瑕疵,并提供了相应的annotation_file。

数据集示例:

数据集里的图片是上图这样的,分辨率比较高。而且数据集比较小,所以我进行了一系列的data augmentation操作,包括裁剪,改变亮度等。

我实际跑实验的数据集如上图所示,600*600大小的图片,而且亮度也比原来的图片更高。

Source code : https://github.com/Ixiaohuihuihui/Tiny-Defect-Detection-for-PCB
My paper: https://digital-library.theiet.org/content/journals/10.1049/trit.2019.0019

一点经验

  1. 刚开始做印刷电路板的瑕疵识别是在2018年的3月,那时候经过调研,知道了有传统方法,最简单的是拿标准图片和待测图片进行pixel to pixel的XOR操作,这样可以得到瑕疵的位置。至于瑕疵的分类,可以设计一系列的规则,如欧拉数,连通数等。
  2. 我当时毕业设计走的不是这条路,而是转化为了分类问题。因为当时采集的数据库,没有标注瑕疵。比如说一张有瑕疵的图,和标准图片对比,知道可能有瑕疵的位置,然后把这个瑕疵位置抠出来,然后分类问题就比较简单了,我用过SVM+BoW, 还用了一个简单的CNN网络去分类,效果还不错。但这不是一个end-to-end的,即得到瑕疵位置和瑕疵类别是分开进行的。真心塞。。。但起码还是顺利毕业了,并且没有打算再研究瑕疵检测问题。
  3. 至此为止,我能想到的创新点有:(1)在提取瑕疵位置阶段,你可以设计robust feature,或similarity metric 去判断标准图像和待测图像哪里不同,这个位置就是疑似瑕疵位置;(2)在瑕疵分类阶段:可以做的工作多了,在当时,将深度学习运用到工业瑕疵检测也算一个创新点,不过现在不行了。在这个阶段,你可以设计合适的网络将深度学习运用到瑕疵检测上,也可以设计更合理的feature提取规则。
  4. 为什么要用deep learning? 弱语义信息不代表没有语义信息;PCB多种多样,传统方法不能适应所有的规则。
  5. 天有不测风云,研究生入学一个月以后,boss又要求我们做PCB的瑕疵检测。
  6. 这个阶段我就开始思考,瑕疵检测是一个目标检测问题,即给定一张待检测PCB图片,要回归出瑕疵的位置和得到瑕疵的类别。这就是大火的目标检测问题呀。
  7. 于是我直接用Faster R-CNN去训练了一个模型,https://github.com/smallcorgi/Faster-RCNN_TF, 效果不好,就没一个能检测出来的;总结原因有:图片太大了,瑕疵又非常的小,Faster R-CNN又不适合检测小物体;原来拍数据集的时候,亮度太暗了等等;
  8. 深度学习从低层到高层不断去提炼高层语义信息,特征的深入,层数的增大,细节的信息丢失得越来越多,对于缺陷检测,细节是很重要的东西。
    从这张特征可视化图片看到,随着提取特征层数的增加,电路板的特征越来越模糊 。(还能利用这种特征检测什么?
  9. 这是一个底层视觉任务,轻语义信息,重纹理信息。
  10. 接下来查资料,发现FPN适用于多尺度检测问题,最后我也是采用这个解决方案。说一下我的流程吧:
    (1) 扩充数据集,最终的数据集有10668张,可训练的瑕疵有21664个。
    (2)设计合理的anchor;
    (3)不同尺度的特征融合,参考FPN;重点就是这个multi-scale feature fusion,提升小目标检测的关键;
    (4)一些策略吧:roi align,ohem, soft nms
    总结:设计合适的网络是关键,各种tricks都可以试一下,当然,数据集的质量也特别重要。
    放一些我检测PCB瑕疵的效果图:

    这是检测短路,是的,这是毕设时候P的瑕疵,好假。

    这是检测的断路。这是入学以后P的瑕疵了,同学P的瑕疵还可以。

    这是检测鼠咬,其中把P的那个圈圈也检测成missing_hole了,不过这种工业检测更担心的是漏检率,也就是recall。

总结

这个项目还是让我打下了一点目标检测的基础,好好学习。

基于深度学习的印刷电路板瑕疵识别相关推荐

  1. 【camera】基于深度学习的车牌检测与识别系统实现(课程设计)

    基于深度学习的车牌检测与识别系统实现(课程设计) 代码+数据集下载地址:下载地址 用python3+opencv3做的中国车牌识别,包括算法和客户端界面,只有2个文件,surface.py是界面代码, ...

  2. 基于深度学习的手写数字识别、python实现

    基于深度学习的手写数字识别.python实现 一.what is 深度学习 二.加深层可以减少网络的参数数量 三.深度学习的手写数字识别 一.what is 深度学习 深度学习是加深了层的深度神经网络 ...

  3. 基于深度学习的手写数字识别Matlab实现

    基于深度学习的手写数字识别Matlab实现 1.网络设计 2. 训练方法 3.实验结果 4.实验结果分析 5.结论 1.网络设计 1.1 CNN(特征提取网络+分类网络) 随着深度学习的迅猛发展,其应 ...

  4. 基于深度学习的花卉检测与识别系统(YOLOv5清新界面版,Python代码)

    摘要:基于深度学习的花卉检测与识别系统用于常见花卉识别计数,智能检测花卉种类并记录和保存结果,对各种花卉检测结果可视化,更加方便准确辨认花卉.本文详细介绍花卉检测与识别系统,在介绍算法原理的同时,给出 ...

  5. 【论文笔记】《基于深度学习的中文命名实体识别研究》阅读笔记

    作者及其单位:北京邮电大学,张俊遥,2019年6月,硕士论文 摘要 实验数据:来源于网络公开的新闻文本数据:用随机欠采样和过采样的方法解决分类不均衡问题:使用BIO格式的标签识别5类命名实体,标注11 ...

  6. 【毕业设计_课程设计】基于深度学习网络模型训练的车型识别系统

    文章目录 0 项目说明 1 简介 2 模型训练精度 3 扫一扫识别功能 4 技术栈 5 模型训练 6 最后 0 项目说明 基于深度学习网络模型训练的车型识别系统 提示:适合用于课程设计或毕业设计,工作 ...

  7. 《智能步态识别门禁系统》,基于深度学习的多人步态识别系统

    本文章仅仅提供一种自认为比较科学的方式去实现多人步态识别,如果对多人步态识别感兴趣,却又不知道如何实现的话,这篇文章将会有莫大的帮助.以下方法作者皆实验过是可行的方案.(训练集124人,准确率96%, ...

  8. 毕业设计 - 题目:基于深度学习卷积神经网络的花卉识别 - 深度学习 机器视觉

    文章目录 0 前言 1 项目背景 2 花卉识别的基本原理 3 算法实现 3.1 预处理 3.2 特征提取和选择 3.3 分类器设计和决策 3.4 卷积神经网络基本原理 4 算法实现 4.1 花卉图像数 ...

  9. 基于深度学习的高精度交警检测识别系统(PyTorch+Pyside6+YOLOv5模型)

    摘要:基于深度学习的高精度交警检测识别系统可用于日常生活中检测与定位交警目标,利用深度学习算法可实现图片.视频.摄像头等方式的交警目标检测识别,另外支持结果可视化与图片或视频检测结果的导出.本系统采用 ...

最新文章

  1. 各大网站屏蔽搜索引擎抓取分析
  2. go 实现斐波那契数列
  3. FFmpeg简易播放器的实现5-音视频同步
  4. jQuery live事件说明及移除live事件方法
  5. .NET Core Web APi大文件分片上传研究
  6. Hystrix降级逻辑中如何获取触发的异常 1
  7. 达文西画中的数学密码
  8. JQuery Datatables 实现对某一列的数据合计汇总
  9. mysql geometry 附近的人_mysql中geometry类型的简单使用(搜索附近的人)
  10. HDU 4417 划分树写法
  11. 常用数据类型使用转换详解
  12. Ubuntu18.04中安装virtualenv和virtualenvwrapper
  13. ccna学习指南,入门必备
  14. python手机号信息查询身份证_Python使用xpath爬虫查询身份证信息和手机号信息并写入Excel表格...
  15. 房屋租赁管理系统(Java源码+论文)
  16. 抖音高贵气质的签名_抖音签名大全2020最新版-抖音个性签名男生女生-抖音个性签名霸气-腾牛个性网...
  17. mysql端口establish_establish_connection使用方法
  18. Description Resource Path Location Type Cannot change version of project fac(导入maven项目出现红叉问题)...
  19. java逻辑循环经典案例(不死神兔、百钱百鸡、逢七过、评委打分、数组翻转)
  20. h5学习笔记:rem单位在一些安卓机计算异常

热门文章

  1. PTA | 实验二 查询自动售货机中商品的价格
  2. 使用networkx绘制网络图及模块使用
  3. Android便签开发源码
  4. 中国最有意境的33句
  5. 神经网络算法对车牌价格的预测
  6. 批量备份交换机路由器配置
  7. Day2-《青春有你2》选手信息爬取
  8. 365天挑战LeetCode1000题——Day 120 基于时间的最大报酬问题模板
  9. 《计算机网络:自顶向下方法(原书第6版)》一1.8 小结
  10. python基金预测分析_基金定投选星期几更划算?[python统计分析]