top of page

​研究背景與動機

AOI(Automated Optical Inspection,自動光學檢查) ,被廣泛運用在高科技產品、國防、民生等領域。透過機器視覺的技術,以取代人力判別產品是否存在刮痕、孔洞、污損等等的瑕疵,是一項非常厲害的技術。

在製造業中,產品的良率是關鍵,提升了產品的良率,可以讓生產更有效率,也減少了成本。過去,產業中產品的品質管理主要是由人工進行檢測,由人眼檢查是否有瑕疵,這種重複性高且注重細節的工作,以人工的方式進行並不適合,導致效率很低,而機器就非常適合這種單調且不斷重複工作,相比於人力,不但效率高且成本低廉,除此之外,機器的準確度也遠比人眼來的高,可以更有效的檢測出不良品。

AOI的原理為利用光學儀器取得待測物的表面,再經過影像處理和演算法來檢測出表面的異常,對比待測物與標準物品之間的差異,從中檢測出產品的瑕疵。優點在於AOI為自動化,可以高效率的取代人眼的作業,但缺點在於光學儀器取得的是物體的表面形狀,主要也是針對形狀的異常來檢測瑕疵,如果發生瑕疵的為光線無法照到的地方,則難以檢測出來,雖然可以透過各個方向角度的光照來彌補,但沒辦法完美的偵測出所有瑕疵。

近年來AI的快速發展讓AOI也有大幅度的進步。隨著演算法和硬體的發展,AI在影像處理方面越來越進步,1997年的LeNet開啟了CNN在影像處理的道路,之後發展出的AlexNet、VGGNet、ResNet、EfficientNet等等的模型,讓影像辨識的能力與準確率大幅提升。而AOI也因此而受益。傳統的AOI,架構基本上為固定的,要偵測的瑕疵項目只會有預設設定好的幾個,如果要新增項目,整個AOI就必須重新調整,導致更動的成本很大;但是AOI加上AI的技術,相較於傳統的架構,可以更彈性更快速的進行變化應對,不但成本降低也更有效率。

AOI結合了影像及機器學習的技術,可以透過機器學習訓練出完善的模型,用來預測待測物的瑕疵分類。AOI運用在產業發展上的效果良好,台灣的製造業非常發達,因此這是一個不可或缺的一項技術,透過AOI與AI的結合,可以讓產品的良率大幅提升。

研究目的

本專題的目的為將AOI的影像資料進行瑕疵的判別與分類,影像資料分為六類:normal,void,horizontal,vertical,edge以及particle,藉由影像處理和機器學習的方法,正確的判別出每張圖片所屬的類別。訓練集圖片數為5056張,測試集圖片數為19278張。

圖片1_edited.jpg

研究方法

3.1影像梯度與影像模糊化

X方向與Y方向的梯度。求出影像梯度的演算法有下列幾種(1)Sobel,(2)Scharr,(3)Laplacian,可根據圖像的不同,選用最適合的演算法,在本專題選用的是Scharr演算法。

3x3或5x5的矩陣,簡單來說就是把圖像中一塊區域(如3x3範圍)的像素值,與濾波器(同樣範圍的矩陣)做內積,把這個過程遍歷整張圖片後,就可以獲得模糊化後的圖片。影像模糊化的濾波器分為(1)高斯濾波器(2)均值濾波器(3)中值濾波器(4)雙邊濾波器等等,本專題使用的濾波器為高斯濾波器。

       

觀察影像資料後,(2)horizontal,(3)vertical和(4)edge類有明顯的水平線和垂直線,因此猜測對這三類的圖片求出梯度圖可以有效地擷取特徵,所以先對這三類圖片進行模糊化處理後再求梯度。

圖片2_edited.jpg

觀察上表的結果,經過圖片模糊化後求影像梯度的處理後,可以發現這個方法可以有效地辨別出(2)horizontal,(3)vertical和(4)edge類,前者可以偵測出水平線,而後兩者可以偵測出垂直線,因此目前先針對這三類影像,再做進一步的處理以初步的分出(2)horizontal水平線的一組和(3)vertical,(4)edge垂直線的一組。

另外一個發現是這三類的圖像中有一部分的影像可以明顯地顯現出特徵,但另一部分影像因為特徵不明顯,所以呈現的效果不是很好,因此需要再對影像進行增強。

3.2直方圖等化

直方圖等化(histogram equalization),是一種影像增強的方法,將一張圖片的灰階值的分布狀況轉成平均分布,可以增加圖像的對比度。觀察圖片灰階值的分布圖表可以發現當灰階值的分布越集中,代表這張圖片的像素之間的變化值越接近,因此對比度也就越低,特徵不明顯的圖片因為像素之間的變化量很小,所以梯度也很小,沒辦法明顯的顯現出特徵。

最理想的情況為灰階值是平均分散的。所以透過直方圖等化的方法,盡量將圖片的灰階值平均分散,圖像的對比度提昇,像素之間的變化量也就變大了,而灰階值的相對性不變,因此整張圖片的對比度提高,但是圖片的內容和特徵還是維持不變,就可以有效的凸顯出特徵。

圖片3_edited.jpg

觀察上表的結果可以發現直方圖等化後再做梯度圖比沒做直方圖等化還要明顯的顯現出特徵,因此這個方法可以運用在大部分的圖片上,不過還是有些圖片效果不好,對於這些圖片只能交給訓練模型的時候再做處理,目前的方法沒辦法解決。

 

3.3霍夫變換

霍夫變換(Hough transform)是一種特徵提取的方法,可以用來偵測直線的存在,經過了直方圖等化和梯度的處理以後,圖片的直線特徵就被顯現出來了,而這時候就需要利用霍夫轉換來偵測直線的存在,本專題使用的是OpenCV程式庫中的霍夫轉換函式,函式回傳的值是偵測出的直線的兩點的座標,但是想得到的資訊是直線的數量,因此需要再把取得的座標數量加總。目的是利用偵測出的直線的數量來辨別(2)horizontal這類和(3)vertical與(4)edge這類,首先對各自類別的圖片求出x方向的梯度圖,和y方向的梯度,前者的梯度圖可以獲取x方向的梯度變化,換句話說就是可以顯現出垂直線;而後者的梯度圖可以獲取y方向的梯度變化,就是顯現出水平線。

接著再對這兩種梯度圖做霍夫轉換,必須先對霍夫轉換的函式的參數進行調整,讓這個函式可以只偵測到水平線(180度)和垂直線(90度),接著再做霍夫轉換。對x方向的梯度圖做霍夫轉換後照常理應該只會偵測出水平線;而y方向的只會偵測出垂直線,因此比較兩者偵測出的直線數量,如果水平線的數量多於垂直線,那麼就是擁有水平線特徵的(2)horizontal類;如果垂直線的數量多於水平線,就是擁有垂直線特徵的(3)vertical與(4)edge類,藉此種方法來分出這兩大類。

圖片5_edited.png
圖片6_edited.jpg

觀察上面兩張表的結果,經過霍夫轉換後如果有偵測到直線就會有紅色的標記,可以看到(2)horizontal類的圖片的X方向梯度圖幾乎偵測不到直線,但是(3)vertical與(4)edge類的圖片就可以偵測到大量的直線;而(2)horizontal類的圖片的Y方向梯度圖偵測到大量的直線,(3)vertical與(4)edge類的圖片卻偵測不到,因此可以知道這個方法可以確實的分類出這兩大類圖片的不同。為了更嚴謹一些,需要將水平線和垂直線兩者相差的數量訂一個門檻值,假設把門檻值訂為五條,意思是水平線如果多餘垂直線五條,才能歸類為(2)horizontal類,而垂直線多於水平線五條則歸類為(3)vertical與(4)edge,此種判別方法的準確率請看下三張表。

圖片7_edited.jpg

上表的結果分別為(2)horizontal、(3)vertical、(4)edge類分別把門檻值設為0、5、10後,看有多少張圖片會符合預期的結果。門檻值的設立高低就根據嚴格程度來設定。

如果不設門檻,(2)horizontal類中有100%,(3)vertical有97.4%,(4)edge有97.29%的圖片符合預期的結果。

如果將門檻值設為5,(2)horizontal類中有97%,(3)vertical有94.8%,(4)edge有95%的圖片符合預期的結果。

如果將門檻值設為10,(2)horizontal類有83%,(3)vertical有92%,(4)edge有93%的圖片符合預期的結果。

現在已可以初步分類出(2)horizontal類和(3)vertical、(4)edge類,下一步則是先分類(0)normal、(1)void、(5)particle類和(2)horizontal、(3)vertical、(4)edge類兩大類。

目前的構想是先把這兩大類分離出來,接著(2)horizontal、(3)vertical、(4)edge那大類就可以用霍夫的方法來分類,(0)normal、(1)void、(5)particle那大類因為它們的特徵難以使用影像處理的方法分類,所以要用機器學習的方式。

而(2)horizontal、(3)vertical、(4)edge那大類分成(2)horizontal類和(3)vertical、(4)edge類以後,也是要用機器學習的方式來分離(3)vertical、(4)edge類。

 

3.4深度學習(卷積神經網路)

卷積神經網路(Convolutional Neural Network,簡稱CNN)是深度學習的一個神經網路架構,在影像處理方面的效果很好,與傳統的人工神經網路相比更有效率也減少了參數的使用。CNN的特色與優點在於權值共享和保留空間資訊,權值共享讓CNN可以減少參數的運用,降低記憶體的使用量;保留空間資訊則讓CNN在影像方面有很好的效果。CNN的發展非常迅速,隨著模型的創新,讓影像分類的準確率以及效率不斷地提升,例如Inception的架構提升了網路的寬度,可以更有效的學習到圖片的特徵; ResNet模型的推出解決了CNN在深度網路訓練的困難;而DenseNet模型可利用更少的參數進行更有效率和深入的訓練,各式各樣的CNN模型可以讓使用者根據自己的需求,選擇適合的模型。

本專題會使用的模型為2012年在ImageNet LSVRC競賽中取得冠軍的AlexNet模型,以及結合了Inception和ResNet模型的InceptionResNetV2模型來進行研究。

 

3.4.1 AlexNet

AlexNet[1]是2012年發表的一個CNN模型,此模型在ImageNet LSVRC競賽中取得了良好的成績,是1998年的CNN始祖LeNet之後在CNN領域中的一大進步,使得人們開始重視與發展這項領域。

模型的架構使用了五個卷積層和三個全連接層,激活函數(Activation function)為ReLU,訓練前需要對圖片做Normalize的處理(將圖片的像素值除以255,讓所有像素值介於0至1之間)。圖片進入模型後,先通過卷積層(96張11*11的kernels,步長為4) 然後是最大池化層(大小3*3,步長為2),再來是卷積層(256張5*5的kernels,步長為1),最大池化層(大小3*3,步長為2),接著是連續三層卷積層(分別是384,384,256張的3*3的kernels,步長為1),加上最大池化層(大小3*3,步長為2),再來Flatten後接兩層全連接層(皆為4096個神經元並加上Dropout層),再加最後一層分類層。

模型的特點在於激活函數使用的是ReLU,相比以往常用的Sigmoid,可以避免梯度消失(Vanishing gradient)的問題,收斂速度也更快。除此之外,AlexNet比LeNet的層數更多更深,可以處理更複雜的圖片分類問題。下圖為 AlexNet架構圖。

alexnet.png

3.4.2 InceptionResNetV2

InceptionResNetV2[2]模型結合了Inception和ResNet模型的優點,成為一個更深更廣的CNN模型,這個模型的優點在於它比單純的Inception模型的識別能力來得強,而因為結合了ResNet模型中的residual block的架構,使得訓練速度大幅地提升,成為了一個準確率更高且訓練速度更快的模型,但是缺點是所需的參數數量較多,需要花費較大的計算成本。

InceptionResNetV2模型在訓練前需要對圖片做Normalize的處理(將圖片的像素值除以127.5再減1,讓所有像素值介於-1至1之間)

v2framework.png

3.4.3交叉驗證法

為了確保模型不會因為特定的資料產生偏差,訓練模型時採用交叉驗證法,所有的數據量共有2528張圖片,其中(0)normal有674張、(1)void有492張、2(horizontal)有100張、(3)vertical有378張、(4)edge有240張、(5)particle有644張,交叉驗證法的做法就是將所有資料切割為數份,接著拿某份的資料作為測試集,剩下的部分做為訓練集,然後不斷地重複這個過程,直到切割出來的每一份資料都當作過測試集,如此一來就可以得到多份的訓練結果,藉此比較所有的結果,確保不會得到偏差的訓練結果,來驗證模型是否是可行的。

本專題將所有的圖片切割成十等份,切割的方法是各類的圖片各切割十分之一然後放在一起為一份,所以每一份的資料一定至少有(0)normal有67張、(1)void有49張、2(horizontal)有10張、(3)vertical有37張、(4)edge有24張、(5)particle,確保每一份資料都平均含有各類的圖片。

 

3.4.4數據增強

數據增強(Data augmentation)在機器學習裡面是一個對改善模型與數據資料非常有幫助的方法。對AI來說,學習越多的東西,越可以成功的預測與應變各種不同的狀況與問題,因此當手中擁有的資料很少或者多樣性不足的時候,訓練出來的AI模型可能不足以應變各項問題,這時候就可以利用此數據增強的方法增加資料量,從而讓AI可以學習到更多的東西。

在圖片分類的方面,數據增強的作法就是將已擁有的資料進行放大縮小、旋轉、翻轉、裁切等等的操作,讓一張圖片可以擴增為多張擁有相同特徵但是不一樣表現的圖片,讓模型可以學習更多東西,不但可以避免模型發生過擬合(Overfitting)的狀況,更可以提升模型預測未知資料的能力。

 

3.4.5圖片分類(兩大類)

做完前面的影像梯度與霍夫變換的實驗後,六大類的圖片中(2)horizontal類和(3)vertical、(4)edge類的圖片特徵可以偵測到明顯的直線,因此目前構想的分類方法為將六大類圖片先用深度學習的方式初步分類成(0)normal、(1)void、(5)particle大類和(2)horizontal、(3)vertical、(4)edge大類,而(2)horizontal、(3)vertical、(4)edge這大類就可以使用直線偵測的方法進行分類。

下表為分別用AlexNet與InceptionResnetV2將圖片分為兩大類的結果,原數據的圖片尺寸為512*512像素,而AlexNet與InceptionResnetV2的預設圖片尺寸分別為227*227像素與299*299像素,因此在AlexNet模型做了512*512像素和227*227像素的實驗,而InceptionResnetV2模型的部分先做512*512像素的實驗試試看。模型在訓練時會在每epoch結束後對測試集做一次測試,而表中的實驗結果中的測試集準確率為模型訓練至收斂後,所紀錄的最後幾個epochs的測試集準確率,因此可能會有浮動。

3.4.5-1.jpg
Alex512_015_234.png
Alex227_015_234.png
3.4.5-2.jpg
In512_015_234.png

觀察此表後可以發現兩大類的分類方法,AlexNet模型的結果比InceptionResnetV2模型的效果來得好,可能的原因為圖片的複雜程度不是很高,雖然InceptionResnetV2模型較新且深度也比較深,但是對於本專題的兩大類分類方法來說,AlexNet模型較InceptionResnetV2模型適合。

接著再觀察AlexNet模型中兩種不同尺寸圖片的結果,可以看出小尺寸的圖片用來訓練模型的效果會比原本的大尺寸圖片來得好,可能是因為本專題的圖片各個類型的特徵在227*227的尺寸依然相當的明顯,因此把512*512縮放到227*227的尺寸,不但圖片不會受到失真的影響,反而去除了不必要的細節雜訊,讓模型的效果可以更好。

以上為原始的資料下去做訓練的結果,下表為另外在AlexNet模型與InceptionResnetV2模型的512*512尺寸加上數據增強(放大縮小+旋轉+對比度的調整)後的圖片做訓練的結果。

3.4.5-3.jpg
Alex512_015_234aug20.png
3.4.5-4.jpg
In512_015_234_aug.png

觀察上表的結果後,可以看到AlexNet模型做了數據增強後模型的預測能力有了一定程度的改善,但是InceptionResnetV2模型做了數據增強後反而預測能力下降了。

 

3.4.6圖片分類(六大類)

做完分成兩大類的實驗後,可以知道目前最適合的模型為AlexNet模型,預測準確率大概介於0.98至0.99,而之後還要再做進一步的細分,因此直到完全分類完後這個分類方法的準確率還會再下降,所以先暫時停止這個方法,改為利用AI模型直接將所有圖片分為六大類試試看。如果直接分六大類的結果比分為兩大類的結果還要好,那麼就直接採用分成六大類的方法,如果分兩大類的結果比較好,那就在進行更進一步的實驗。下面三張表分別為利用AlexNet模型的227*227尺寸加上數據增強後的圖片直接分為六大類的結果、InceptionResnetV2模型將圖片(原始資料)直接分為六大類的結果與InceptionResnetV2模型將圖片(數據增強)直接分為六大類的結果

3.4.6-1.jpg
Alex227_0_1_2_3_4_5_aug.png
3.4.6-2.jpg
v2_tfgba512_0_1_2_3_4_5.png
v2_tfgba299_0_1_2_3_4_5_aug.png
3.4.6-3.jpg
v2_tfgba299_0_1_2_3_4_5_aug.png

觀察上面三張表的結果可以知道分成六大類的分類方法下AlexNet模型還是比InceptionResnetV2模型來得好,但是看起來分成六大類的結果沒有比分為兩大類的結果好,因此需要再找看看有沒有可以讓AlexNet模型更進一步的方法,於是可以嘗試看看調整一下數據增強的參數。

原本給的數據增強參數為放大縮小20%、旋轉5度與調整對比度20%,於是嘗試加入看看水平與垂直翻轉。下表為加入水平垂直翻轉前後的比較。

3.4.6-4.jpg
Alex_227_0_1_2_3_4_5_aug_flip.png

觀察上表的結果,可以知道加了水平與垂直翻轉後,模型的辨識能力又變強了。做完這次實驗後,AlexNet模型在分成六大類的圖片的分類法中可以得到0.98~0.99的準確率,而在分為兩大類的分類法中得到的準確率也差不多是0.98~0.99的準確率,但因為分成兩大類後還要再進行細分,因此準確率還會下降,因此直接分為六大類的分類方法較有效率與精準。

​研究結果

經過多次的實驗後,最終得到的模型為AlexNet模型在227*227的圖片進行數據增強(放大縮小20%、旋轉5度、調整對比度20%與水平垂直翻轉)後進行訓練可以得到最好的測試準確率,下表為此模型完整的實驗結果(收斂圖請看圖18),實驗完成後測試準確率平均為0.9873,Precision為0.9870,Recall為0.9848,F1_score為0.9857。

圖片1.jpg
bottom of page