半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习

在半导体行业,工程师依靠 CP Yield(生产过程中芯片的合格率)、WAT(晶圆验收测试)和 Particle 的晶圆图模式来识别工艺问题。然而,在没有人工干预的情况下将这些晶圆图模式分类是一项重大挑战。许多论文都研究了这个问题,从这一篇纹章旗,我将和您一起来学习使用深度学习的技术来解决该问题的方法。

一、半导体质量控制概念

(1)CP Yield

CP Yield 是指 Critical Process Yield,即“关键工艺良率”。它衡量的是在半导体制造过程中特定关键工艺步骤的良品率,反映了该工艺步骤的生产效率和质量控制水平。

具体来说,CP Yield 聚焦于那些对最终产品质量和性能影响最大的工艺步骤,如掩膜制作、光刻、离子注入、化学机械抛光(CMP)等。这些工艺步骤被认为是生产过程中最为“关键”的环节,因为它们直接决定了最终芯片的性能、功能和良率。

关键点:

  1. 影响因素: CP Yield 受到多种因素的影响,包括设备精度、工艺参数的控制、环境条件(如温湿度)、原材料的质量等。

  2. 重要性: 高的 CP Yield 表示该工艺步骤具有较好的稳定性和可控性,能够生产出更多符合要求的合格芯片,降低了缺陷率和返工成本。相反,低的 CP Yield 可能意味着工艺中存在问题,需要调整或优化。

  3. 与总良率的关系: CP Yield 是影响整体生产良率(Total Yield)的重要因素,特别是在复杂的集成电路制造过程中,良好的 CP Yield 能显著提高整体良率。

(2)WAT

WAT 通常是指 Wafer Acceptance Test(晶圆验收测试)。WAT 是一种测试过程,用于评估和验证半导体晶圆在生产过程中是否符合质量标准,通常在晶圆的加工和封装过程之前进行。它通常包括以下几个方面:

  1. 电性能测试: 确保晶圆上的每个芯片是否正常工作,符合电气性能规格。这可能包括测量电流、电压、功耗等。

  2. 物理尺寸测量: 确保晶圆的物理尺寸、厚度等参数是否符合设计要求。

  3. 缺陷检测: 检查晶圆表面是否有任何可见的缺陷或污染物,例如划痕、裂纹、气泡等。

  4. 光学检查: 通过光学显微镜或其他仪器检测晶圆表面的质量,确认没有严重的缺陷。

WAT 的目的是在进入下游的封装、测试和最终出货之前,确保每片晶圆的质量符合规范,避免不良产品流入生产线或市场,节省后期处理的成本。

 

二、WM-811K Wafermap

(1) 简介

WM-811K Wafermap 数据集是一个用于缺陷检测和分类的公开数据集,主要用于研究半导体制造过程中的晶圆缺陷分析。这一数据集由许多晶圆的缺陷模式组成,其中每个晶圆被标记为正常或存在某种类型的缺陷模式。研究人员和从业者可以利用该数据集来开发和评估机器学习和深度学习算法,以自动化地检测和识别晶圆上的缺陷模式。

通常情况下,一片8英寸wafer上往往可以放置数百到上千颗芯片(die - 晶粒),具体视芯片的面积大小。

WM-811K Wafermap 数据集包含 811,457 幅图像,其中172,950 幅图像具有手动缺陷标签,总共包含 9 个缺陷标签:0、1、2、3、4、5、6、7 和 8。其中,标签 8(代表无模式 -no pattern)占总数的 85.2%。在wafer测试中。

9种缺陷标签分别是:0 中心(4294(2.5%))、1 甜甜圈(555(0.3%))、2 边缘位置(5189(3.0%))、3 边缘环(9680(5.6%))、4 局部( 3593(2.1%))、5随机(866(0.5%))、6 划痕(1193(0.7%))、7 接近满(149(0.1%))、8无(638507 (85.2%))。

WM-811k 数据集中半导体晶片故障类型的示例。

晶圆(wafer)是半导体材料(通常为硅)制成的薄片,是集成电路(IC)制造的基础。每个晶圆上可以切割出多个裸片(Die),每个裸片上都包含一个集成电路。为了测试这些集成电路的性能,自动检测机器会对晶圆上的每个IC进行测试,并生成晶圆图(或称映射图),通过这些图像可以识别出哪些芯片性能符合标准(合格),哪些芯片存在性能问题(不合格)。

晶圆图上,合格和不合格裸片的分布模式往往能够反映出制造过程中可能存在的特定问题。深度学习技术能够有效地分析大量晶圆图中的缺陷模式,从而帮助快速识别制造问题。这种方法可以及时调整制造流程,减少浪费,提高生产效率。

在晶圆测试分析中,一般会对单张晶圆上的数据进行分析,也会对多上晶圆叠加后,对单个die进行属性据分析,以此来筛选出异常值,判断工艺过程中的品质和良率。

(2)数据集PKL

经过上面的介绍,我想您一定已经基本了解了半导体测试中的数据分析概要,现在我们来使用这个数据集。为了方便学习,我们仍采用AI大杀器PYTHON来作为编程语言。所以采用的这个数据集是已经转化为 PKL文件的数据集。

这个数据集 ,你可以从这里下载:

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

在 Python 中,很多数据集使用 PKL 格式(即 pickle 格式)存储,主要是因为 pickle 是 Python 内置的对象序列化模块,它非常方便地将 Python 对象转换为字节流,从而可以保存到文件中,或者将其传输到其他地方。具体来说,有以下几个原因:

  1. 支持存储复杂数据结构pickle 可以序列化几乎所有的 Python 数据结构,包括字典、列表、元组、类实例等复杂对象,因此,很多机器学习和数据处理框架(如 scikit-learn、TensorFlow 等)使用 pickle 格式来存储训练好的模型、数据集或者其他中间结果。

  2. 高效性:与其他格式(如 JSON 或 CSV)相比,pickle 在存储和加载数据时通常更加高效。它可以直接存储 Python 对象,不需要转换为字符串或其他格式,因此避免了额外的开销。

  3. 与 Python 环境兼容pickle 格式是 Python 专用的,因此能够无缝地与 Python 环境集成。当你使用 pickle 保存数据时,保存的对象将保持 Python 的原始数据类型和结构,这使得在相同的 Python 环境中加载时非常方便和直观。

  4. 简便性:使用 pickle 可以直接将数据或模型保存到文件中,且仅需要几行代码即可实现保存和加载操作。与其他格式(如 HDF5 或 Parquet)相比,pickle 格式在操作上通常更加简单。

  5. 广泛的应用:很多机器学习库(如 scikit-learn)将训练好的模型保存为 .pkl 文件。这样用户可以方便地将模型保存下来,以便在之后的时间点加载使用。

 (3) 基础用法

mp_file = "/data/public_lib/wm811k_wafer_map/in/LSWMD.pkl"
import pandas as pddf=pd.read_pickle(mp_file)
df.info()

首先我们将这个数据集放在一个固定的位置,然后引用它,并使用pandas 来读取。

上面代码的意思请看解释:

import pandas as pd
  • 这一行导入了 pandas 库,并给它起了个别名 pdpandas 是一个强大的数据分析和处理库,提供了很多方便的数据结构(如 DataFrame 和 Series)和数据处理功能。
df = pd.read_pickle(mp_file)
  • 这一行使用 pandasread_pickle 函数来加载存储在 mp_file 路径中的 pickle 文件,并将其内容加载到一个名为 df 的变量中。这个 df 可能是一个 pandas DataFrame 对象,通常用于存储表格数据。read_pickle 会自动反序列化 pickle 文件的内容,恢复为 Python 对象(在这里是一个 DataFrame)。 pandas DataFrame 对象是一个强大的数据结构方法。
df.info()
  • 这一行调用了 df 对象的 info() 方法,这个方法会打印出 DataFrame 的概述信息,包括:
    • 列的数量和名称
    • 每列的数据类型
    • 非空值的数量
    • 内存使用情况等 这些信息有助于了解数据的基本结构和数据完整性。

执行结果如下:

 

从上面的结果来看,这个脚本运行时间比较长,总计35.5秒,这是因为数据集比较大,读取的时间比较长。 

df.info() 输出的结果提供了有关 DataFrame df 的一些基本信息。下面是详细的解释:

输出解析:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 811457 entries, 0 to 811456
  • <class 'pandas.core.frame.DataFrame'> 表示 df 是一个 pandas.DataFrame 对象,这是 Pandas 中用于存储表格数据的主要数据结构。
  • RangeIndex: 811457 entries, 0 to 811456 显示 DataFrame 包含了 811,457 行数据,索引范围从 0 到 811,456(即共有 811,457 个数据条目)。
Data columns (total 6 columns):#   Column          Non-Null Count   Dtype  
---  ------          --------------   -----  0   waferMap        811457 non-null  object 1   dieSize         811457 non-null  float642   lotName         811457 non-null  object 3   waferIndex      811457 non-null  float644   trianTestLabel  811457 non-null  object 5   failureType     811457 non-null  object 
  • Data columns (total 6 columns): 表示 DataFrame 中有 6 列数据。

  • Column 列显示了每一列的名称:

    • waferMap
    • dieSize
    • lotName
    • waferIndex
    • trianTestLabel
    • failureType
  • Non-Null Count 显示每一列非空(non-null)值的数量。在这个 DataFrame 中,所有列都有 811,457 个非空值,意味着每一列的所有数据都已填充,没有缺失值。

  • Dtype 列显示了每一列的数据类型:

    • waferMap, lotName, trianTestLabel, failureType 的数据类型为 object,表示它们是字符串类型(通常用于存储文本数据)。
    • dieSize, waferIndex 的数据类型为 float64,表示它们是浮动点数字(可能表示大小和索引等数值数据)。
dtypes: float64(2), object(4)
  • 表示 DataFrame 中有 2 列数据类型为 float64,4 列数据类型为 object
memory usage: 37.1+ MB
  • 显示了 DataFrame 占用的内存大小。该 DataFrame 占用约 37.1 MB 的内存。

上面的info,让我们对该数据集有了一个总体结构的了解。我们后面在使用这个数据集的时候,需要根据这个结构来调用想用的对象。

接下来,我们在程序后面加上一句:

df.head()

 执行后结果如下:

 它显示了这个数据集的前5行数据。

结果分析(各列解释):

  1. waferMap:

    • 内容:这列包含了类似 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...]] 这样的列表数据。
    • 解释waferMap 是一个二维数组或矩阵(以嵌套列表形式表示),它可能代表晶圆的一个映射或状态,表示每个位置的检测结果或者晶圆测试的结果。每个 0 可表示没有问题的位置,而其他值(例如 1 或其他)代表特定的检测结果。这里的数据用嵌套列表表示,所以每个晶圆或测试的状态以列表形式存储。
  2. dieSize:

    • 内容:这一列包含了 1683.0 等数值。
    • 解释dieSize 可能表示晶圆的尺寸或测试区域的大小。每一行的 dieSize 都是 1683.0,这表明所前5行的数据对应相同的尺寸,是固定的晶圆大小。
  3. lotName:

    • 内容:这一列包含了如 lot1 的字符串。
    • 解释lotName 表示数据的批次名称。lot1 表示前5行是第一个批次的数据,行的 lotName 都是 lot1,说明这些数据来自于同一个批次。
  4. waferIndex:

    • 内容:这一列包含了类似 1.0, 2.0, 3.0, 4.0, 5.0 等数值。
    • 解释waferIndex 表示晶圆的编号或在批次中的索引位置。每一行数据的 waferIndex 依次递增,表示批次中的不同晶圆。
  5. trianTestLabel:

    • 内容:这一列包含了类似 [[Training]] 的数据。
    • 解释:这一列的数据结构是一个嵌套的列表,表示与训练相关的标签。在这些行中,trianTestLabel 的值是 [[Training]],说明这些数据条目是标记为“训练”的数据集。
  6. failureType:

    • 内容:这一列包含了 [[none]] 的数据。
    • 解释:这一列也包含了嵌套的列表,表示故障类型。failureType 在这些行中的值是 [[none]],意味着这些数据没有出现任何故障或失败。

接着,我们在后面再加上一句:

df.tail()

执行结果如下:

df.tail() 显示了 DataFrame 的最后 5 行数据。

和前5行不同的是,failureType:故障类型标签,部分行有标注(如 Edge-Ring, Edge-Loc),者对应了我们前面列出的9中故障模式。有些行没有标注故障类型(空列表 [])。

这些行数据展示了同一批次(lot1)中多个晶圆的状态,包含了晶圆的映射、尺寸、索引以及相关的训练标签和故障类型。

好的,今天我们就熟悉到这里,通过理解半导体测试开始,熟悉这个数据集,然后使用python来初步了解这个数据集的结构,为我们后面玩转这个数据集做准备。

你学会了吗? 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初学者关于对机器学习的理解

一、机器学习&#xff1a; 1、概念&#xff1a;是指从有限的观测数据中学习(或“猜 测”)出具有一般性的规律&#xff0c;并利用这些规律对未知数据进行预测的方法.机器学 习是人工智能的一个重要分支&#xff0c;并逐渐成为推动人工智能发展的关键因素。 2、使用机器学习模型…

GPU算力平台|在GPU算力平台部署Qwen-2通义千问大模型的教程

文章目录 一、GPU平台介绍算力平台概述 二、人工智能应用开发需要GPU算力平台GPU算力原理账号注册流程Qwen-2通义千问大模型的部署登录/注册选择SettingsURL配置选择模型部署完成进行问答 一、GPU平台介绍 算力平台概述 GPU算力平台是一个专注于GPU加速计算的专业云服务平台&…

Vue3(elementPlus) el-table替换/隐藏行箭头,点击整行展开

element文档链接&#xff1a; https://element-plus.org/zh-CN/component/form.html 一、el-table表格行展开关闭箭头替换成加减号 注&#xff1a;Vue3在样式中修改箭头图标无效&#xff0c;可能我设置不对&#xff0c;欢迎各位来交流指导 转变思路&#xff1a;隐藏箭头&…

【C++】C++11(二)

目录 九、可变参数模板十、lambda表达式10.1 C98中的一个例子10.2 lambda表达式10.3 lambda表达式语法10.3.1 lambda表达式各部分说明10.3.2 捕获列表说明 10.4 函数对象与lambda表达式 十一、包装器11.1 function包装器11.2 bind 十二、线程库12.1 线程12.1.1 thread类的简单介…

针对数据库系统安全的漏洞扫描加固工具【WebSocket + MySQL】

一、系统背景 随着信息技术的迅猛发展和互联网的普及&#xff0c;数据库作为存储、管理和检索大量数据的关键组件&#xff0c;其安全性对于企业和组织来说至关重要。然而&#xff0c;由于网络环境的复杂性和攻击手段的多样性&#xff0c;数据库面临着越来越多的安全威胁&#…

Photon最新版本PUN 2.29 PREE,在无网的局域网下,无法连接自己搭建的本地服务器

1.图1为官方解答 2.就是加上这一段段代码&#xff1a;PhotonNetwork.NetworkingClient.SerializationProtocol SerializationProtocol.GpBinaryV16; 完美解决 unity 商店最新PUN 2 插件 不能连接 &#xff08;环境为&#xff1a;本地局域网 无外网情况 &#xff09; …

贪心算法(五)

目录 一、单调递增的数字 二、坏了的计算器 三、合并区间 四、无重叠区间 五、用最少数量的箭引爆气球 一、单调递增的数字 单调递增的数字 贪心策略&#xff1a; 对于这道题&#xff0c;相邻数字相等&#xff0c;也表示是递增的。 解题代码&#xff1a; class Soluti…

数据结构——栈的实现

今天&#xff0c;我们来写一下关于栈的博文。 1.首先我们先了解一下什么是栈&#xff1f; 一&#xff1a;概念&#xff1a; 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端称为栈顶&#xff0c;另…

Vue进阶(贰幺贰)npm run build多环境编译

文章目录 一、前言二、实施三、总结&#xff1a;需要打包区分不同环境四、拓展阅读 一、前言 项目开发阶段&#xff0c;会涉及打包部署到多个环境应用场景&#xff0c;在不同环境中&#xff0c;需要进行项目层面的区分&#xff0c;做不同的操作&#xff0c;可以利用打包的--mo…

【C++/控制台】2048小游戏

源代码&#xff1a; #include <iostream> #include <windows.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h>// #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)…

web作业

作业一 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> </head&g…

一块钱的RISC-V 32位芯片

‍‍ ‍‍之前跟一个朋友聊天&#xff0c;说以后的芯片一定是越来越趋向于定制化&#xff0c;比如我们需要一个ADC芯片&#xff0c;这颗ADC芯片需要有串口功能&#xff0c;那就只开发一颗这样的芯片就好了&#xff0c;其他的功能都可以裁剪掉。 ➵➵➵➵➵➵➵➵➵➵➵➵➵➵➵…

CES 2025|美格智能高算力AI模组助力“通天晓”人形机器人震撼发布

当地时间1月7日&#xff0c;2025年国际消费电子展&#xff08;CES 2025&#xff09;在美国拉斯维加斯正式开幕。美格智能合作伙伴阿加犀联合高通在展会上面向全球重磅发布人形机器人原型机——通天晓&#xff08;Ultra Magnus&#xff09;。该人形机器人内置美格智能基于高通QC…

【llm/ollama/qwen】在本地部署qwen2.5-coder并在vscode中集成使用代码提示功能

说在前面 操作系统&#xff1a;windows11ollama版本&#xff1a;0.5.4vscode版本&#xff1a;1.96.2continue插件版本&#xff1a;0.8.66 ollama安装 访问官网&#xff0c;点击下载安装即可 默认装在了C盘&#xff0c;比较蛋疼&#xff1b;但是可以指定路径安装&#xff1a;Ol…

力扣刷题:二叉树OJ篇(上)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 目录 1.单值二叉树&#xff08;1&#xff09;题目描…

C++实现图书管理系统(Qt C++ GUI界面版)

前瞻 本项目基于【C】图书管理系统(完整版) 图书管理系统功能概览&#xff1a; 登录&#xff0c;注册学生,老师借书&#xff0c;查看自己当前借书情况&#xff0c;还书。管理员增加书&#xff0c;查看当前借阅情况&#xff0c;查看当前所有借阅人&#xff0c;图书信息。 效果…

云计算基础,虚拟化原理

文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟&#xff08;Emulation&#xff09;方式半虚拟化…

机器学习基础-概率图模型

&#xff08;一阶&#xff09;马尔科夫模型的基本概念 状态、状态转换概率、初始概率 状态转移矩阵的基本概念 隐马尔可夫模型&#xff08;HMM&#xff09;的基本概念 条件随机场&#xff08;CRF&#xff09;的基本概念 实际应用中的马尔科夫性 自然语言处理&#xff1a; 在词性…

设计模式学习[15]---适配器模式

文章目录 前言1.引例2.适配器模式2.1 对象适配器2.2 类适配器 总结 前言 这个模式其实在日常生活中有点常见&#xff0c;比如我们的手机取消了 3.5 m m 3.5mm 3.5mm的接口&#xff0c;只留下了一个 T y p e − C Type-C Type−C的接口&#xff0c;但是我现在有一个 3.5 m m 3.…

【简博士统计学习方法】第1章:2. 统计学习方法的基本分类

2. 统计学习方法的基本分类 监督学习所学习的数据都是已经标注过的&#xff1b;无监督学习所学习的数据没有标注信息&#xff1b;半监督学习只含有少量标注&#xff0c;大多数没有标注&#xff08;利用已标注的数据来学习去标注未标注的数据&#xff09; 2.1 监督学习 图里的…