共计 4980 个字符,预计需要花费 13 分钟才能阅读完成。
wolfmax 老狼,飞桨领航团无锡团团长,飞桨开发者技术专家(PPDE),AICA 六期学员,某半导体 CIM 软件集成商图像算法工程师,次要钻研方向为图像检测、图像宰割等算法。
• 作者 AI Studio 主页
https://aistudio.baidu.com/ai…
我的项目背景
半导体晶圆作为集成电路的载体,在制作过程中须要重复通过简单的薄膜、光刻、刻蚀等工序。而这些制作过程中工序的异样会导致晶圆缺点的产生。在晶圆质检中,利用电学测试设施对晶圆片上的每颗晶粒进行电性测试,可失去用于形容晶圆缺点状态的晶圆图谱,如下图所示。
在上图中,每个小方块即是晶圆上的一颗芯片,有色彩标识的即为测试异样的芯片。对晶圆上有缺点的芯片的空间散布图谱的模式进行辨认剖析,可无效辅助辨认制作过程中的缺点本源,并有针对性的进行改良和预防,从而晋升晶圆制作的产品良率。例如,上图中有局部长条状的生效可能是划伤等造成。
本我的项目基于开源的 WM-811K 晶圆缺点图谱数据集,应用飞桨图像分类套件 PaddleClas 进行晶圆缺点分类图谱剖析,演示如何应用 PaddleClas 疾速搭建一个残缺的图像分类计划,包含数据集筹备、模型训练、验证、测试以及相应的部署。
- 我的项目链接
https://aistudio.baidu.com/ai…
数据集介绍
本我的项目采纳开源的 WM-811K 数据集。原始数据能够从以下网站下载。
- 下载网址
http://mirlab.org/dataSet/pub…
须要留神的是从该网站下载下的数据分为 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/paddlepaddl…
装置相应的依赖
应用 pip install 命令装置 PaddleClas 根目录下的 requirements.txt 即可,同时能够设置镜像,减速装置。
- pip install –upgrade -r requirements.txt -i
https://mirror.baidu.com/pypi…
抉择模型训练
配置好 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
训练后果可视化:
- 将训练过程可视化能够不便地察看训练过程的变动。差不多 150 个 epoch 之后,模型的精度稳固到 0.85 以上;
- 另外,能够直观地看到学习率采纳 PiecewiseDecay 形式衰减的变化趋势。
模型评估
在训练过程中,咱们能够在训练的脚本中退出 –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
模型预测
实现评估后,能够应用 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
模型导出部署
飞桨反对导出推理模型用于部署推理场景,相比于训练调优场景,推理模型会将网络权重与网络结构进行长久化存储。并且飞桨反对应用预测引擎加载推理模型进行预测推理。在 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
推理
应用 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)
应用 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)
根据上述两节的可视化后果来看,能够发现分类谬误的图谱大部分是 Loc、Edge-Loc 等图片,这种景象与晶圆图谱分类的特殊性无关,与一般的图片分类不同,晶圆图谱的生效模式类别和区域地位强相干,例如同样是 loc 生效,在两头为 center 类别,在边缘为 Edge-Loc 类别,在其余地位为 Loc,这个和图片分类中的地位不变性相矛盾。对此,前期能够通过减少相应类别的样本数量来改善成果。
总结
本我的项目次要介绍如何在半导体制作中引入深度学习技术解决问题。半导体制作作为高端制造业,其整个产业链的平安十分重要。本我的项目展现应用飞桨图像分类套件 PaddleClas 来疾速解决问题,心愿能在此畛域抛砖引玉,心愿更多的小伙伴能开掘更多的利用,一起助力半导体智能制作产业的倒退!大国崛起,吾辈自强!