基于飛槳PaddleClas完成半導(dǎo)體晶圓圖譜缺陷種類識別

wolfmax老狼,飛槳領(lǐng)航團(tuán)無錫團(tuán)團(tuán)長,飛槳開發(fā)者技術(shù)專家(PPDE),AICA六期學(xué)員,某半導(dǎo)體CIM軟件集成商圖像算法工程師,主要研究方向為圖像檢測、圖像分割等算法。
? 作者AI Studio主頁
https://aistudio.baidu.com/aistudio/personalcenter/thirdview/80110
項目背景
半導(dǎo)體晶圓作為集成電路的載體,在制造過程中需要反復(fù)經(jīng)過復(fù)雜的薄膜、光刻、刻蝕等工序。而這些制造過程中工序的異常會導(dǎo)致晶圓缺陷的產(chǎn)生。在晶圓質(zhì)檢中,利用電學(xué)測試設(shè)備對晶圓片上的每顆晶粒進(jìn)行電性測試,可得到用于描述晶圓缺陷狀態(tài)的晶圓圖譜,如下圖所示。

在上圖中,每個小方塊即是晶圓上的一顆芯片,有顏色標(biāo)識的即為測試異常的芯片。對晶圓上有缺陷的芯片的空間分布圖譜的模式進(jìn)行識別分析,可有效輔助識別制造過程中的缺陷根源,并有針對性的進(jìn)行改進(jìn)和預(yù)防,從而提升晶圓制造的產(chǎn)品良率。例如,上圖中有部分長條狀的失效可能是劃傷等造成。
本項目基于開源的WM-811K晶圓缺陷圖譜數(shù)據(jù)集,使用飛槳圖像分類套件PaddleClas進(jìn)行晶圓缺陷分類圖譜分析,演示如何使用PaddleClas快速搭建一個完整的圖像分類方案,包括數(shù)據(jù)集準(zhǔn)備、模型訓(xùn)練、驗證、測試以及相應(yīng)的部署。
項目鏈接 ?
https://aistudio.baidu.com/aistudio/projectdetail/5151210
數(shù)據(jù)集介紹
本項目采用開源的WM-811K數(shù)據(jù)集。原始數(shù)據(jù)可以從以下網(wǎng)站下載。
下載網(wǎng)址 ?
http://mirlab.org/dataSet/public/
需要注意的是從該網(wǎng)站下載下的數(shù)據(jù)分為MATLAB格式的.mat文件和python序列化后的.pkl文件。該數(shù)據(jù)集共收集了811457張晶圓測試后的圖片。但是要注意,其中只有172950做了標(biāo)簽,將失效按照芯片的空間分布分類成9個類別(0,1,2…8)。
對每種缺陷的圖譜進(jìn)行可視化預(yù)覽可以對數(shù)據(jù)有基本的認(rèn)識。在數(shù)據(jù)集中有個label_list.txt文件,該文件中包含了每種缺陷的標(biāo)簽(0-8)及其對應(yīng)的缺陷名稱。下面使用該文件創(chuàng)建缺陷名稱,并選擇相應(yīng)的圖片進(jìn)行可視化。
在train.txt文件中,每種缺陷隨機選擇5個樣本進(jìn)行可視化。

根據(jù)圖片和缺陷的名稱,可以大概了解每種缺陷的分類方法,例如:
Center:大部分缺陷的芯粒位于晶圓圓心附近;
Donut:缺陷的芯??臻g分布類似于一個甜甜圈;
Loc:局部出現(xiàn)缺陷芯粒聚集等。
開發(fā)環(huán)境準(zhǔn)備
本項目使用PaddleClas進(jìn)行圖譜分類算法模型的訓(xùn)練和驗證,需要安裝PaddleClas以及相應(yīng)的工具,配置PaddleClas的運行環(huán)境。
下載PaddleClas
執(zhí)行g(shù)it clone命令下載,GitHub比較慢,可以從Gitee上下載。另外,在本項目環(huán)境中打包了一份PaddleClas,使用時直接解壓即可。
git clone ?
https://gitee.com/paddlepaddle/PaddleClas
安裝相應(yīng)的依賴
使用pip install命令安裝PaddleClas根目錄下的requirements.txt即可,同時可以設(shè)置鏡像,加速安裝。
pip install —upgrade -r requirements.txt -i ?
https://mirror.baidu.com/pypi/simple
選擇模型訓(xùn)練
配置好PaddleClas的運行環(huán)境后,可以使用PaddleClas內(nèi)的模型直接進(jìn)行訓(xùn)練,這也是使用套件的好處。模型組網(wǎng)已經(jīng)完成,直接修改config配置文件即可完成模型的訓(xùn)練,非常高效!在本項目中,我們使用用于服務(wù)器端部署的ResNet模型和移動端部署的MobileNet模型來進(jìn)行演示。
使用ResNet50模型進(jìn)行訓(xùn)練
有了PaddleClas開發(fā)套件,只需要將對應(yīng)模型的yaml文件按照自己的項目配置進(jìn)行更改即可。主要是指定數(shù)據(jù)集的位置以及相應(yīng)的優(yōu)化器配置。對于ResNet50,相應(yīng)的config文件位置為:
對于該模型,我們作如下配置進(jìn)行訓(xùn)練:
epochs:200
learning rate: 0.01
learning rate scheduler: PiecewiseDecay
使用toos/train.py腳本開啟一鍵訓(xùn)練:
訓(xùn)練結(jié)果可視化:

將訓(xùn)練過程可視化可以方便地觀察訓(xùn)練過程的變化。差不多150個epoch之后,模型的精度穩(wěn)定到0.85以上;
另外,可以直觀地看到學(xué)習(xí)率采用PiecewiseDecay方式衰減的變化趨勢。
模型評估
在訓(xùn)練過程中,我們可以在訓(xùn)練的腳本中加入—eval,可以實現(xiàn)一邊訓(xùn)練一邊評估。另外,在訓(xùn)練結(jié)束之后,我們也可以單獨對模型進(jìn)行評估,運行tools/eval.py腳本,同時指定模型的位置即可。執(zhí)行以下命令評估ResNet50模型的效果:
模型預(yù)測
完成評估后,可以使用tools/infer.py腳本進(jìn)行單張圖片或者多張圖片批量預(yù)測。在預(yù)測腳本中傳入使用的模型和測試的圖片路徑即可。
模型導(dǎo)出部署
飛槳支持導(dǎo)出推理模型用于部署推理場景,相比于訓(xùn)練調(diào)優(yōu)場景,推理模型會將網(wǎng)絡(luò)權(quán)重與網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行持久化存儲。并且飛槳支持使用預(yù)測引擎加載推理模型進(jìn)行預(yù)測推理。在PaddleClas套件中通過tools/export_model.py導(dǎo)出模型。導(dǎo)出后,將生成以下三個文件:
inference.pdmodel:用于存儲網(wǎng)絡(luò)結(jié)構(gòu)信息;
inference.pdiparams:用于存儲網(wǎng)絡(luò)權(quán)重信息;
inference.pdiparams.info:用于存儲模型的參數(shù)信息,在分類模型和識別模型中可忽略。
通過運行如下命令導(dǎo)出模型:
推理
使用ResNet50模型推理及可視化
使用以下指令實現(xiàn)ResNet50模型的推理:
使用ResNet50模型進(jìn)行推理,可以對照文件名和推理的結(jié)果來判斷預(yù)測是否正確。對于ResNet模型,可以統(tǒng)計出75張圖片,有5張預(yù)測錯誤。我們將分類錯誤的圖片單獨拿出來分析,直觀地分析錯誤的原因,便于改進(jìn)。

使用MobileNet推理及可視化
將inference_cls.yaml復(fù)制一份并更改為inference_cls_mobilenetv3.yaml,同時將該文件內(nèi)的模型的位置更改成MobileNet的位置,即:
執(zhí)行以下命令實現(xiàn)MobileNet模型的推理:
最終,僅有3張圖片分錯,Test_Acc達(dá)到 96%,進(jìn)一步改進(jìn)即可上demo!

根據(jù)上述兩節(jié)的可視化結(jié)果來看,可以發(fā)現(xiàn)分類錯誤的圖譜大部分是Loc、Edge-Loc等圖片,這種現(xiàn)象與晶圓圖譜分類的特殊性有關(guān),與普通的圖片分類不同,晶圓圖譜的失效模式類別和區(qū)域位置強相關(guān),例如同樣是loc失效,在中間為center類別,在邊緣為Edge-Loc類別,在其他位置為Loc,這個和圖片分類中的位置不變性相矛盾。對此,后期可以通過增加相應(yīng)類別的樣本數(shù)量來改善效果。
總結(jié)
本項目主要介紹如何在半導(dǎo)體制造中引入深度學(xué)習(xí)技術(shù)解決問題。半導(dǎo)體制造作為高端制造業(yè),其整個產(chǎn)業(yè)鏈的安全非常重要。本項目展示使用飛槳圖像分類套件PaddleClas來快速解決問題,希望能在此領(lǐng)域拋磚引玉,希望更多的小伙伴能挖掘更多的應(yīng)用,一起助力半導(dǎo)體智能制造產(chǎn)業(yè)的發(fā)展!大國崛起,吾輩自強!