当前位置: 首页 > article >正文

半导体数据分析: 玩转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 pd

df=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  float64
 2   lotName         811457 non-null  object 
 3   waferIndex      811457 non-null  float64
 4   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.kler.cn/a/460401.html

相关文章:

  • 跳转至系统设置下某个子模块 - 鸿蒙 Harmony
  • Flume的安装和使用
  • 机器学习-感知机-神经网络-激活函数-正反向传播-梯度消失-dropout
  • AI 助力游戏开发中的常用算法实现
  • LinuxC高级day5
  • git环境配置用户与秘钥
  • 机器学习DAY9:聚类(K-means、近邻传播算法、谱聚类、凝聚聚类、兰德指数、调整互信息、V−mearure、轮廓系数)
  • Python爬虫入门实例:Python7个爬虫小案例(附源码)
  • 解锁节日季应用广告变现潜力,提升应用广告收入
  • Flink读写Kafka(DataStream API)
  • springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic
  • 【数据库系统概念】期末复习笔记
  • Spring MVC (下)小项目实战
  • SD卡恢复数据:快速找回丢失文件!
  • ABP框架8——仓储的作用及其基础Demo
  • 单片机实物成品-009 温度控制系统水温控制系统
  • Midjourney技术浅析(二):文本预处理过程
  • 002 用户数据的构造和渲染
  • 从0到机器视觉工程师(一):机器视觉工业相机总结
  • python23-常用的第三方库01:request模块-爬虫
  • UE(虚幻)学习(三) UnrealSharp插件中调用非托管DLL
  • 前端通过函数方法触发文件上传、限制文件类型、限制文件大小、上传的进度
  • 仿快团团商品详情页底部按钮头像轮播(uniapp)
  • XQR5VFX130-1CN1752V,,具有高度的可编程性和灵活性的FPGA中文技术资料
  • 摄像头监视脚本
  • Wonder Dynamics技术浅析(一)