基于飞桨 PaddleClas 完成半导体晶圆图谱缺陷种类识别
wolfmax 老狼,飞桨领航团无锡团团长,飞桨开发者技术专家(PPDE),AICA 六期学员,某半导体 CIM 软件集成商图像算法工程师,主要研究方向为图像检测、图像分割等算法。
• 作者 AI Studio 主页
https://aistudio.baidu.com/aistudio/personalcenter/thirdview/80110
项目背景
半导体晶圆作为集成电路的载体,在制造过程中需要反复经过复杂的薄膜、光刻、刻蚀等工序。而这些制造过程中工序的异常会导致晶圆缺陷的产生。在晶圆质检中,利用电学测试设备对晶圆片上的每颗晶粒进行电性测试,可得到用于描述晶圆缺陷状态的晶圆图谱,如下图所示。
在上图中,每个小方块即是晶圆上的一颗芯片,有颜色标识的即为测试异常的芯片。对晶圆上有缺陷的芯片的空间分布图谱的模式进行识别分析,可有效辅助识别制造过程中的缺陷根源,并有针对性的进行改进和预防,从而提升晶圆制造的产品良率。例如,上图中有部分长条状的失效可能是划伤等造成。
本项目基于开源的 WM-811K 晶圆缺陷图谱数据集,使用飞桨图像分类套件 PaddleClas 进行晶圆缺陷分类图谱分析,演示如何使用 PaddleClas 快速搭建一个完整的图像分类方案,包括数据集准备、模型训练、验证、测试以及相应的部署。
项目链接
https://aistudio.baidu.com/aistudio/projectdetail/5151210
数据集介绍
本项目采用开源的 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 个样本进行可视化。
根据图片和缺陷的名称,可以大概了解每种缺陷的分类方法,例如:
Center:大部分缺陷的芯粒位于晶圆圆心附近;
Donut:缺陷的芯粒空间分布类似于一个甜甜圈;
Loc:局部出现缺陷芯粒聚集等。
开发环境准备
本项目使用 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
选择模型训练
配置好 PaddleClas 的运行环境后,可以使用 PaddleClas 内的模型直接进行训练,这也是使用套件的好处。模型组网已经完成,直接修改 config 配置文件即可完成模型的训练,非常高效!在本项目中,我们使用用于服务器端部署的 ResNet 模型和移动端部署的 MobileNet 模型来进行演示。
使用 ResNet50 模型进行训练
有了 PaddleClas 开发套件,只需要将对应模型的 yaml 文件按照自己的项目配置进行更改即可。主要是指定数据集的位置以及相应的优化器配置。对于 ResNet50,相应的 config 文件位置为:
对于该模型,我们作如下配置进行训练:
epochs:200
learning rate: 0.01
learning rate scheduler: PiecewiseDecay
使用 toos/train.py 脚本开启一键训练:
训练结果可视化:
将训练过程可视化可以方便地观察训练过程的变化。差不多 150 个 epoch 之后,模型的精度稳定到 0.85 以上;
另外,可以直观地看到学习率采用 PiecewiseDecay 方式衰减的变化趋势。
模型评估
在训练过程中,我们可以在训练的脚本中加入--eval,可以实现一边训练一边评估。另外,在训练结束之后,我们也可以单独对模型进行评估,运行 tools/eval.py 脚本,同时指定模型的位置即可。执行以下命令评估 ResNet50 模型的效果:
模型预测
完成评估后,可以使用 tools/infer.py 脚本进行单张图片或者多张图片批量预测。在预测脚本中传入使用的模型和测试的图片路径即可。
模型导出部署
飞桨支持导出推理模型用于部署推理场景,相比于训练调优场景,推理模型会将网络权重与网络结构进行持久化存储。并且飞桨支持使用预测引擎加载推理模型进行预测推理。在 PaddleClas 套件中通过 tools/export_model.py 导出模型。导出后,将生成以下三个文件:
inference.pdmodel:用于存储网络结构信息;
inference.pdiparams:用于存储网络权重信息;
inference.pdiparams.info:用于存储模型的参数信息,在分类模型和识别模型中可忽略。
通过运行如下命令导出模型:
推理
使用 ResNet50 模型推理及可视化
使用以下指令实现 ResNet50 模型的推理:
使用 ResNet50 模型进行推理,可以对照文件名和推理的结果来判断预测是否正确。对于 ResNet 模型,可以统计出 75 张图片,有 5 张预测错误。我们将分类错误的图片单独拿出来分析,直观地分析错误的原因,便于改进。
使用 MobileNet 推理及可视化
将 inference_cls.yaml 复制一份并更改为 inference_cls_mobilenetv3.yaml,同时将该文件内的模型的位置更改成 MobileNet 的位置,即:
执行以下命令实现 MobileNet 模型的推理:
最终,仅有 3 张图片分错,Test_Acc 达到 96%,进一步改进即可上 demo!
根据上述两节的可视化结果来看,可以发现分类错误的图谱大部分是 Loc、Edge-Loc 等图片,这种现象与晶圆图谱分类的特殊性有关,与普通的图片分类不同,晶圆图谱的失效模式类别和区域位置强相关,例如同样是 loc 失效,在中间为 center 类别,在边缘为 Edge-Loc 类别,在其他位置为 Loc,这个和图片分类中的位置不变性相矛盾。对此,后期可以通过增加相应类别的样本数量来改善效果。
总结
本项目主要介绍如何在半导体制造中引入深度学习技术解决问题。半导体制造作为高端制造业,其整个产业链的安全非常重要。本项目展示使用飞桨图像分类套件 PaddleClas 来快速解决问题,希望能在此领域抛砖引玉,希望更多的小伙伴能挖掘更多的应用,一起助力半导体智能制造产业的发展!大国崛起,吾辈自强!
评论