基于飞桨PaddleClas完成半导体晶圆图谱缺陷种类识别

news2024/9/25 15:29:26

0af07e7d94c6bdf7727d545c72187b2c.gif

aa0ddd735b6becfa9c58fd52d02d129b.png

wolfmax老狼,飞桨领航团无锡团团长,飞桨开发者技术专家(PPDE),AICA六期学员,某半导体CIM软件集成商图像算法工程师,主要研究方向为图像检测、图像分割等算法。
作者AI Studio主页
https://aistudio.baidu.com/aistudio/personalcenter/thirdview/80110

3268f3d075fcb45ea64794f24a55d961.png

项目背景

半导体晶圆作为集成电路的载体,在制造过程中需要反复经过复杂的薄膜、光刻、刻蚀等工序。而这些制造过程中工序的异常会导致晶圆缺陷的产生。在晶圆质检中,利用电学测试设备对晶圆片上的每颗晶粒进行电性测试,可得到用于描述晶圆缺陷状态的晶圆图谱,如下图所示。

bd4f426274e25ac6fb1509cfd2cbf24c.png

在上图中,每个小方块即是晶圆上的一颗芯片,有颜色标识的即为测试异常的芯片。对晶圆上有缺陷的芯片的空间分布图谱的模式进行识别分析,可有效辅助识别制造过程中的缺陷根源,并有针对性的进行改进和预防,从而提升晶圆制造的产品良率。例如,上图中有部分长条状的失效可能是划伤等造成。

本项目基于开源的WM-811K晶圆缺陷图谱数据集,使用飞桨图像分类套件PaddleClas进行晶圆缺陷分类图谱分析,演示如何使用PaddleClas快速搭建一个完整的图像分类方案,包括数据集准备、模型训练、验证、测试以及相应的部署。

  • 项目链接

https://aistudio.baidu.com/aistudio/projectdetail/5151210

13992b812d2e8328e708f1fe535627ec.png

数据集介绍

本项目采用开源的WM-811K数据集。原始数据可以从以下网站下载。

  • 下载网址

http://mirlab.org/dataSet/public/

需要注意的是从该网站下载下的数据分为MATLAB格式的.mat文件和python序列化后的.pkl文件。该数据集共收集了811457张晶圆测试后的图片。但是要注意,其中只有172950做了标签,将失效按照芯片的空间分布分类成9个类别(0,1,2...8)。

对每种缺陷的图谱进行可视化预览可以对数据有基本的认识。在数据集中有个label_list.txt文件,该文件中包含了每种缺陷的标签(0-8)及其对应的缺陷名称。下面使用该文件创建缺陷名称,并选择相应的图片进行可视化。

在train.txt文件中,每种缺陷随机选择5个样本进行可视化。

50a01674c97105aaa811b02e1f672491.png

根据图片和缺陷的名称,可以大概了解每种缺陷的分类方法,例如:

  • Center:大部分缺陷的芯粒位于晶圆圆心附近;

  • Donut:缺陷的芯粒空间分布类似于一个甜甜圈;

  • Loc:局部出现缺陷芯粒聚集等。

884d6240a37bbb919efaf87d2373e06c.png

开发环境准备

本项目使用PaddleClas进行图谱分类算法模型的训练和验证,需要安装PaddleClas以及相应的工具,配置PaddleClas的运行环境。

下载PaddleClas

执行git clone命令下载,GitHub比较慢,可以从Gitee上下载。另外,在本项目环境中打包了一份PaddleClas,使用时直接解压即可。

  • git clone

https://gitee.com/paddlepaddle/PaddleClas

安装相应的依赖

使用pip install命令安装PaddleClas根目录下的requirements.txt即可,同时可以设置镜像,加速安装。

  • pip install --upgrade -r requirements.txt -i

https://mirror.baidu.com/pypi/simple

476260d6ee43ef8bf03a5be6d728dcae.png

选择模型训练

配置好PaddleClas的运行环境后,可以使用PaddleClas内的模型直接进行训练,这也是使用套件的好处。模型组网已经完成,直接修改config配置文件即可完成模型的训练,非常高效!

在本项目中,我们使用用于服务器端部署的ResNet模型和移动端部署的MobileNet模型来进行演示。

使用ResNet50模型进行训练

有了PaddleClas开发套件,只需要将对应模型的yaml文件按照自己的项目配置进行更改即可。主要是指定数据集的位置以及相应的优化器配置。

对于ResNet50,相应的config文件位置为:

PaddleClas/ppcls/configs/ImageNet/ResNet/ResNet50.yaml

对于该模型,我们作如下配置进行训练:

  • epochs:200

  • learning rate: 0.01

  • learning rate scheduler: PiecewiseDecay

使用toos/train.py脚本开启一键训练:

python tools/train.py -c /home/aistudio/PaddleClas/ppcls/configs/ImageNet/ResNet/ResNet50.yaml

训练结果可视化:

fecb9d4f7960206ad6d3f1862f2bd96f.png

  • 将训练过程可视化可以方便地观察训练过程的变化。差不多150个epoch之后,模型的精度稳定到0.85以上;

  • 另外,可以直观地看到学习率采用PiecewiseDecay方式衰减的变化趋势。

cb0369e4081aec8f8a35229a711c3438.png

模型评估

在训练过程中,我们可以在训练的脚本中加入--eval,可以实现一边训练一边评估。另外,在训练结束之后,我们也可以单独对模型进行评估,运行tools/eval.py脚本,同时指定模型的位置即可。

执行以下命令评估ResNet50模型的效果:

python tools/eval.py -c /home/aistudio/PaddleClas/ppcls/configs/ImageNet/ResNet/ResNet50.yaml -o Global.pretrained_model=/home/aistudio/PaddleClas/output/ResNet50/best_model

d05f6ed77c243d2e93b7bb890c45aa33.png

模型预测

完成评估后,可以使用tools/infer.py脚本进行单张图片或者多张图片批量预测。在预测脚本中传入使用的模型和测试的图片路径即可。

python tools/infer.py -c /home/aistudio/PaddleClas/ppcls/configs/ImageNet/ResNet/ResNet50.yaml -o Global.pretrained_model=/home/aistudio/PaddleClas/output/ResNet50/best_model -o Infer.infer_imgs=/home/aistudio/work/test/Center_85238.jpg

113cd066b9f262065234f001baa3256a.png

模型导出部署

飞桨支持导出推理模型用于部署推理场景,相比于训练调优场景,推理模型会将网络权重与网络结构进行持久化存储。并且飞桨支持使用预测引擎加载推理模型进行预测推理。在PaddleClas套件中通过tools/export_model.py导出模型。导出后,将生成以下三个文件:

  • inference.pdmodel:用于存储网络结构信息;

  • inference.pdiparams:用于存储网络权重信息;

  • inference.pdiparams.info:用于存储模型的参数信息,在分类模型和识别模型中可忽略。

通过运行如下命令导出模型:

python tools/export_model.py -c /home/aistudio/PaddleClas/ppcls/configs/ImageNet/ResNet/ResNet50.yaml -o Global.pretrained_model=/home/aistudio/PaddleClas/output/ResNet50/best_model -o Global.save_inference_dir=deploy/models/ResNet50

cb40467b6d63c2fdd547d7f5f1bdf529.png

推理

使用ResNet50模型推理及可视化

使用以下指令实现ResNet50模型的推理:

%cd /home/aistudio/PaddleClas/deploy 
!python python/predict_cls.py \ 
   -c configs/inference_cls.yaml

使用ResNet50模型进行推理,可以对照文件名和推理的结果来判断预测是否正确。对于ResNet模型,可以统计出75张图片,有5张预测错误。我们将分类错误的图片单独拿出来分析,直观地分析错误的原因,便于改进。

import osimport pandas as pdimport cv2import matplotlib.pyplot as plt%matplotlib inline

img_root = "/home/aistudio/work/test"wrong_list = ['Edge-Loc_48272.jpg', 'Edge-Loc_58508.jpg', 'Edge-Loc_7413.jpg', 'Loc_87266.jpg', 'Scratch_355662.jpg']wrong_label = ['Loc','Edge-Ring','Loc','Donut','Loc']

plt.figure(figsize = (15,6))for i in range(len(wrong_list)):img_path = os.path.join(img_root, wrong_list[i])img = cv2.imread(img_path)plt.subplot(1,len(wrong_list), i+1)plt.imshow(img[:,:, ::-1])plt.xlabel(wrong_list[i])# plt.axis('off')plt.title("Predict Result: " + wrong_label[i], fontsize = 12)

e76e6fc0edbc951d28b450b91fea2e7f.png

使用MobileNet推理及可视化

将inference_cls.yaml复制一份并更改为inference_cls_mobilenetv3.yaml,同时将该文件内的模型的位置更改成MobileNet的位置,即:

inference_model_dir:"/home/aistudio/PaddleClas/deploy/models/MobileNetV3_large_x0_75"

执行以下命令实现MobileNet模型的推理:

%cd /home/aistudio/PaddleClas/deploy 
!python python/predict_cls.py \ 
   -c configs/inference_cls_mobilenetv3.yaml

最终,仅有3张图片分错,Test_Acc达到 96%,进一步改进即可上demo!

wrong_list = ['Donut_7334.jpg', 'Edge-Loc_48272.jpg', 'Loc_94941.jpg']
wrong_label = ['Random','Loc','Donut']
plt.figure(figsize = (15,6))
for i in range(3):
img_path = os.path.join(img_root, wrong_list[i])
img = cv2.imread(img_path)
plt.subplot(1,3, i+1)
plt.imshow(img[:,:, ::-1])
plt.xlabel(wrong_list[i])
# plt.axis('off')
plt.title("Predict Result: " + wrong_label[i], fontsize = 12)

fa16d48fbcd174071e947aa356a077fd.png

根据上述两节的可视化结果来看,可以发现分类错误的图谱大部分是Loc、Edge-Loc等图片,这种现象与晶圆图谱分类的特殊性有关,与普通的图片分类不同,晶圆图谱的失效模式类别和区域位置强相关,例如同样是loc失效,在中间为center类别,在边缘为Edge-Loc类别,在其他位置为Loc,这个和图片分类中的位置不变性相矛盾。对此,后期可以通过增加相应类别的样本数量来改善效果。

e96a90b9ca13958f640a59397d3ee398.jpeg

总结

本项目主要介绍如何在半导体制造中引入深度学习技术解决问题。半导体制造作为高端制造业,其整个产业链的安全非常重要。本项目展示使用飞桨图像分类套件PaddleClas来快速解决问题,希望能在此领域抛砖引玉,希望更多的小伙伴能挖掘更多的应用,一起助力半导体智能制造产业的发展!大国崛起,吾辈自强!

13c09acebf03d0eff966aa8dee9a4225.gif

关注【飞桨PaddlePaddle】公众号

获取更多技术内容~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/356242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android开发:Activity启动模式

1.怎样设置Activity的启动模式 可以在清单文件中自己添加活动的启动模式, android : launchMode"standard", 不写的话系统默认就是标准模式. 2.启动模式 2.1.默认启动模式 标准启动模式就是栈, 打开一个活动就将活动压入栈中, 返回就将活动退出栈中. 不同的Activit…

老大react说:schedule,我们今年的小目标是一个亿

hello,这里是潇晨,今天来讲个故事 讲个故事: 从前,有家z公司,z公司的ceo叫react,它收下有个小弟或者叫小leader,schedule schedule每天负责消化老大react画的大饼,然后将拆解成一…

如何开始写Python爬虫?给入门Python小白一条清晰的学习路线

记录一下我自己从零开始写Python爬虫的心得吧! 我刚开始对爬虫不是很了解,又没有任何的计算机、编程基础,确实有点懵逼。从哪里开始,哪些是最开始应该学的,哪些应该等到有一定基础之后再学,也没个清晰的概…

Java程序怎么运行?final、static用法小范围类型转大范围数据类型可以吗?

文章目录1.能将int强制转换为byte类型的变量吗?如果该值大于byte类型的范围,将会出现什么现象?2. Java程序是如何执行的?3.final 在 Java 中有什么作用?4.final有哪些用法?5.static都有哪些用法?1.能将int强制转换为…

Rust学习入门--【16】Rust 借用所有权 Borrowing / 引用

系列文章目录 Rust 语言是一种高效、可靠的通用高级语言,效率可以媲美 C / C 。本系列文件记录博主自学Rust的过程。欢迎大家一同学习。 Rust学习入门–【1】引言 Rust学习入门–【2】Rust 开发环境配置 Rust学习入门–【3】Cargo介绍 Rust学习入门–【4】Rust 输…

KubeSphere 社区双周报 | OpenFunction 集成 WasmEdge | 2023.02.03-02.16

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为:2023.02.03-2023.…

众德全自动批量剪辑工具,批量去重伪原创视频,全自动合成探店带货等视频

众德全自动批量剪辑工具已连续更新两年,服务了大大小小的自媒体公司工作室共200多个,成就了几百个草根创业者,实现月入10万,自从创办众德传媒之前,我一直坚信自媒体才是年轻草根创业者的出路,不需要技术门槛…

整合K8s+SpringCloudK8s+SpringBoot+gRpc

本文使用K8s当做服务注册与发现、配置管理&#xff0c;使用gRpc用做服务间的远程通讯一、先准备K8s我在本地有个K8s单机二、准备service-providerpom<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.…

2023年PMP考试教材有哪些?(含pmp资料)

PMP考试教材是《PMBOK指南》&#xff0c;但这次的考试因为大纲的更新&#xff0c;而需要另外的敏捷书籍来备考。且官方发了通知&#xff0c;3、5月还是第六版指南&#xff0c;8月及8月之后&#xff0c;使用第七版教材。 新版考纲将专注于以下三个新领域: 人 – 强调与有效领导项…

java设计模式——观察者模式

概述 定义:又被称为发布-订阅(Publish/Subscribe)模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时&#xff0c;会通知所有的观察者对象&#xff0c;使他们能够自动更新自己。 结构 在观察者模式…

数据分析:旅游景点销售门票和消费情况分析

数据分析&#xff1a;旅游景点销售门票和消费情况分析 文章目录数据分析&#xff1a;旅游景点销售门票和消费情况分析一、前言二、数据准备三、分析数据四、用户购买门票数量分析五、用户复购分析六、用户回购分析七、占比分析1.每个月分层用户占比情况。2.每月不同用户的占比3…

网络模型OSI

网络模型OSI定义模型分布数据封装、解封过程数据链路层1.LLC逻辑链路控制子层(Logic Link Control Sub Layer)2.MAC媒介访问控制子层(Medium Acess Control Sub Layer)CSMA/CARST-CST原理OSI定义 OSI&#xff1a;Open Systems Interconnection Reference Model&#xff0c;开放…

2023年前端开发的八大趋势,值得你关注下

随着新年的到来&#xff0c;许多人制定了提高自己和工作的决心。对于前端开发人员而言&#xff0c;跟上最新的潮流趋势是成功的关键。特别是在经济不好的情况下&#xff0c;很多科技专家在最近一个季度内被解雇&#xff0c;这更加强调了这一点。在2023年&#xff0c;有许多令人…

学习 Python 之 Pygame 开发坦克大战(五)

学习 Python 之 Pygame 开发坦克大战&#xff08;五&#xff09;坦克大战完善地图1. 创建砖墙2. 给砖墙增加子弹击中的碰撞效果3. 给砖墙坦克不能通过的碰撞效果坦克大战完善地图 我的素材放到了百度网盘里&#xff0c;里面还有原版坦克大战素材&#xff0c;我都放在一起来&am…

Blazor入门100天 : 身份验证和授权 (2) - 角色/组件/特性/过程逻辑

目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…

Flink03: 集群安装部署

Flink支持多种安装部署方式 StandaloneON YARNMesos、Kubernetes、AWS… 这些安装方式我们主要讲一下standalone和on yarn。 如果是一个独立环境的话&#xff0c;可能会用到standalone集群模式。 在生产环境下一般还是用on yarn 这种模式比较多&#xff0c;因为这样可以综合利…

C++入门:引用

目录 一. 什么是引用 1.1 引用的概念 1.2 引用的定义 二. 引用的性质和用途 2.1 引用的三大主要性质 2.2 引用的主要应用 三. 引用的效率测试 3.1 传值调用和传引用调用的效率对比 3.2 值返回和引用返回的效率对比 四. 常引用 4.1 权限放大和权限缩小问题 4.2 跨…

【超好用】自定义的mybatis-plus代码生成器

BACKGROUND你是否也有这样的烦恼&#xff1a;每次写代码都需要创建很多包很多层很多类很多接口&#xff1f;耗时且费力姑且不谈&#xff0c;有时可能还大意了没有闪&#xff0c;搞出一堆bug这谁顶得住啊都3202年了&#xff0c;让程序自力更生吧&#xff01;&#xff01;教程 le…

原创|关于一次产品需求程序设计及优化的经历

文章目录一、流程梳理二、设计梳理三、技术方案3.1、下单接口扩展3.3.1、Request类新增deviceType3.3.2、申请单新增字段产品策略(productStrategy)3.3.3、下单产品策略的处理逻辑3.2、询价模块的设计3.2.1、Context设计3.2.2、ProductStrategy类设计3.2.2.1、AbstractProductS…

k8s篇之概念介绍

文章目录时光回溯什么是K8SK8S不是什么一、K8S构成组件控制平面组件&#xff08;Control Plane Components&#xff09;kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-managerNode 组件kubeletkube-proxy容器运行时&#xff08;Container Runtime&…