yolov5的PCB缺陷检测,引入CVPR 2023 BiFormer
向AI转型的程序员都关注了这个号👇👇👇
一、数据集介绍
印刷电路板(PCB)瑕疵数据集:数据下载链接,是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。选取其中445张图像进行了训练。
数据样本示例:
1.PCB数据集介绍
PCB是最具竞争力的产业之一,其产品的优良则关系到企业的发展。由于产品外观缺陷的种类非常广泛,所以较一般电子零部件的缺陷检测更加困难。PCB 板缺陷包括短路、多铜及少铜、断路、缺口、毛刺等。利用深度学习技术采用人工智能学习PCB图像,可以分析复杂的图像,大幅提升自动化视觉检测的图像判读能力和准确度,并可将缺陷进行分类。针对不同产品不同的缺陷标准,智能系统能够灵活应对。
PCB数据集共有六种缺陷,分别是"missing_hole","mouse_bite","open_circuit","short","spur","spurious_copper",缺陷属于小目标缺陷检测
下图为每个类别的数据量、标签,center xy, labels 标签的长和宽
1.1 通过split_train_val.py得到trainval.txt、val.txt、test.txt
1.2 通过voc_label.py得到适合yolov5训练需要的
3.实验结果分析
众所周知,Transformer相比于CNNs的一大核心优势便是借助自注意力机制的优势捕捉长距离上下文依赖。正所谓物极必反,在原始的 Transformer 架构设计中,这种结构虽然在一定程度上带来了性能上的提升,但却会引起两个老生常态的问题:
内存占用大
计算代价高
因此,有许多研究也在致力于做一些这方面的优化工作,包括但不仅限于将注意力操作限制在:
让我们先简单的看下上图:其中图(a)是原始的注意力实现,其直接在全局范围内操作,导致高计算复杂性和大量内存占用;而对于图(b)-(d),这些方法通过引入具有不同手工模式的稀疏注意力来减轻复杂性,例如局部窗口、轴向条纹和扩张窗口等;而图(e)则是基于可变形注意力通过不规则网格来实现图像自适应稀疏性;
总的来说,作者认为以上这些方法大都是通过将 手工制作和 与内容无关
的稀疏性引入到注意力机制来试图缓解这个问题。因此,本文通过双层路由(bi-level routing)提出了一种新颖的动态稀疏注意力(dynamic sparse attention ),以实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性,如图(f)所示。
此外,基于该基础模块,本文构建了一个名为BiFormer的新型通用视觉网络架构。由于 BiFormer 以查询自适应的方式关注一小部分相关标记,而不会分散其他不相关标记的注意力,因此它具有良好的性能和高计算效率。最后,通过在图像分类、目标检测和语义分割等多项计算机视觉任务的实证结果充分验证了所提方法的有效性。
方法
Bi-Level Routing Attention
Title: BiFormer: Vision Transformer with Bi-Level Routing Attention
Paper: https://arxiv.org/pdf/2303.08810.pdf
Code: https://github.com/rayleizhu/BiFormer
为了缓解多头自注意力(Multi-Head Self-Attention, MHSA)的可扩展性问题,先前的一些方法提出了不同的稀疏注意力机制,其中每个查询只关注少量的键值对,而非全部。然而,这些方法有两个共性问题:
要么使用手工制作的静态模式(无法自适应);
要么在所有查询中共享键值对的采样子集(无法做到互不干扰);
为此,作者探索了一种动态的、查询感知的稀疏注意力机制,其关键思想是在粗糙区域级别过滤掉大部分不相关的键值对,以便只保留一小部分路由区域(这不就把冗余的信息干掉了吗老铁们)。其次,作者在这些路由区域的联合中应用细粒度的token-to-token注意力。
整个算法的伪代码流程如下所示:
可以看到,整个模块主要包含三个组件,即:
Region partition and input projection
Region-to-region routing with directed graph
Token-to-token attention
简单梳理下。假设我们输入一张特征图,通过线性映射获得QKV;其次,我们通过领接矩阵构建有向图找到不同键值对对应的参与关系,可以理解为每个给定区域应该参与的区域;最后,有了区域到区域路由索引矩阵 ,我们便可以应用细粒度的token-to-token注意力了。
基于BRA模块,本文构建了一种新颖的通用视觉转换器BiFormer。如上图所示,其遵循大多数的vision transformer架构设计,也是采用四级金字塔结构,即下采样32倍。
具体来说,BiFormer在第一阶段使用重叠块嵌入,在第二到第四阶段使用块合并模块来降低输入空间分辨率,同时增加通道数,然后是采用连续的BiFormer块做特征变换。需要注意的是,在每个块的开始均是使用 3 × 3 3\times33×3 的深度卷积来隐式编码相对位置信息。随后依次应用BRA模块和扩展率为 e ee 的 2 层 多层感知机(Multi-Layer Perceptron, MLP)模块,分别用于交叉位置关系建模和每个位置嵌入。
上表展示了不同模型变体的网络宽度和深度。其中FLOP是基于 224 × 224 输入计算的。
所有模型都在分辨率为 224 × 224 224 \times 224224×224 的图像上进行训练和评估。其中星号表示该模型是使用标记标签进行训练的。据笔者所知,这是在没有额外训练数据或训练技巧所能取得的最佳结果。此外,使用基于标记的蒸馏技术,BiFormer-S的准确率可以进一步提高到 84.3 % !
可以看到,本文方法貌似对小目标检测效果比较好。这可能是因为BRA
模块是基于稀疏采样而不是下采样,一来可以保留细粒度的细节信息,二来同样可以达到节省计算量的目的。
为了进一步了解双层路由注意力的工作原理,作者将路由区域和注意力响应进行可视化。从图中我们可以清楚地观察到语义相关区域已被成功定位。例如,在第一个场景中的街景所示,如果查询位置在建筑物或树上,则对应的路由区域覆盖相同或相似的实体。而在第二个室内场景中,当我们将查询位置放在鼠标上时,路由区域包含主机、键盘和显示器的一部分,即使这些区域彼此不相邻。这意味着双层路由注意力可以捕获远距离对上下文依赖。
Yolov5/Yolov7 引入CVPR 2023 BiFormer
机器学习算法AI大数据技术
搜索公众号添加: datanlp
长按图片,识别二维码
阅读过本文的人还看了以下文章:
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx