李永紅,張瑞云
(中北大學(xué)信息與通信工程學(xué)院,山西 太原 030051)
手機屏幕作為人機交互的第一環(huán),不管是對于企業(yè)還是對于用戶都具有極為重要的作用。企業(yè)通過手機屏幕的設(shè)計來獲得用戶的好奇和好感,手機屏幕的質(zhì)量直接影響著用戶的使用體驗。
顯示屏的缺陷檢測本質(zhì)上屬于物體表面缺陷檢測的算法問題,因此以往研究者在物體表面缺陷檢測方面積累的經(jīng)驗具有參考價值,例如瓷磚、玻璃、紡織品的表面缺陷檢測方法等[1]。本文收集的手機屏幕圖像具有均勻的紋理,因為當(dāng)高分辨率相機捕獲紋理圖像時,來自不同RGB 成像單元的光會導(dǎo)致灰度值的規(guī)則變化。紋理圖像缺陷檢測大致分為4 類:基于統(tǒng)計的方法,如協(xié)方差矩陣和直方圖特征;基于結(jié)構(gòu)的方法,如邊緣檢測和骨架表示;基于過濾的方法,如時域過濾、頻域過濾[2-3];基于模型的方法,如紋理模型。
深度學(xué)習(xí)的本質(zhì)是構(gòu)建一個機器學(xué)習(xí)的模型框架,該模型有許多隱層,它通過大量的數(shù)據(jù)輸入進行訓(xùn)練,經(jīng)過大量的訓(xùn)練可以得到許多具有代表性的信息,從而更加準(zhǔn)確地提取出訓(xùn)練樣本的特征,最終提高分類和識別樣本的精確度。假設(shè)一個系統(tǒng)具有n 層網(wǎng)絡(luò)結(jié)構(gòu),通過調(diào)整網(wǎng)絡(luò)的參數(shù),使得輸出和輸入盡可能地相似,這樣將數(shù)據(jù)輸入后就可以得到一系列數(shù)據(jù)的特征值。將前一層的輸出作為后一層的輸入來實現(xiàn)對數(shù)據(jù)的分級表達,深度學(xué)習(xí)的思想就在于此。
神經(jīng)網(wǎng)絡(luò)采用和深度學(xué)習(xí)模型一樣的結(jié)構(gòu),即分層結(jié)構(gòu),二者都包含輸入層、隱含層和輸出層。神經(jīng)網(wǎng)絡(luò)采用誤差反向傳播算法來不斷調(diào)整網(wǎng)絡(luò)的權(quán)重,即通過逐層迭代訓(xùn)練整個網(wǎng)絡(luò),這是它同深度學(xué)習(xí)模型的區(qū)別。但這種算法對于多層網(wǎng)絡(luò)的模型來說不是很理想,如果將其應(yīng)用在深度學(xué)習(xí)的模型訓(xùn)練中會出現(xiàn)梯度彌散的現(xiàn)象,使得模型訓(xùn)練成果很不理想。因此,深度學(xué)習(xí)并不采用誤差反向傳播算法來進行訓(xùn)練,而是采用逐層訓(xùn)練的方法。
深度學(xué)習(xí)的分類算法離不開卷積、池化、激活函數(shù)以及全連接層、預(yù)測層(常用softmax函數(shù))。本文以VGG-16 網(wǎng)絡(luò)結(jié)構(gòu)為例,介紹深度學(xué)習(xí)的分類算法是怎樣實現(xiàn)的。第105頁圖1為VGG-16 網(wǎng)絡(luò)結(jié)構(gòu)圖。
圖1 VGG-16 網(wǎng)絡(luò)結(jié)構(gòu)
當(dāng)輸入一張圖片后,通過卷積層來提取圖片的特征,可以對圖片進行多次卷積,也就是說可以對卷積后的圖片再次卷積依次提取出圖片的低層次、中層次和高層次特征,對原始特征進行一步又一步的濃縮最后得到的特征才可靠。激活函數(shù)是對卷積層得到的輸入進行非線性的操作,主要作用是提高神經(jīng)網(wǎng)絡(luò)的非線性建模能力和非線性學(xué)習(xí)能力。如果網(wǎng)絡(luò)結(jié)構(gòu)沒有激活函數(shù),那么這樣的多層(多個隱藏層) 網(wǎng)絡(luò)其實是和單層網(wǎng)絡(luò)等價的。池化層也叫下采樣或欠采樣,主要用于對得到的特征圖進行降維操作。全連接層跟傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)連接方式一樣,兩層之間的每個神經(jīng)元都有權(quán)重連接,它將上一層得到的特征進行了綜合,所以該層的參數(shù)也是最多的。預(yù)測層(softmax函數(shù),也稱歸一化函數(shù))的作用是將全連接層輸出的信息轉(zhuǎn)化為相應(yīng)的類別概率或者說是得分,得分最高的值一般都遠大于其他分值,從而起到分類的作用??梢钥闯觯琕GG-16是由13 個卷積層和3 個全連接層疊加而成的。
上述就是對基于深度學(xué)習(xí)的分類算法的一個簡單介紹,本文提出的瑕疵分類算法主要是基于預(yù)訓(xùn)練模型中的特征提取而實現(xiàn)分類以及后續(xù)對圖片進行切割從而達到優(yōu)化這兩者并將其結(jié)合的目的。
選用VGG-16 網(wǎng)絡(luò)結(jié)構(gòu)作為預(yù)訓(xùn)練模型。數(shù)據(jù)集用工業(yè)相機拍到的手機屏幕,這些圖片中包括無瑕疵的良品,稱之為正樣本,以及存在各種大小瑕疵的次品,稱之為負(fù)樣本;數(shù)據(jù)集不大,數(shù)據(jù)相似度高,與預(yù)訓(xùn)練模型所訓(xùn)練的數(shù)據(jù)集ImageNet(超過1 400 萬個數(shù)據(jù)) 相比,這里選用的數(shù)據(jù)集少之又少,但與此同時,ImageNet 中的1 000 個分類又保證了數(shù)據(jù)集的相似性。所以研究的核心問題在于改變輸出層的個數(shù),訓(xùn)練出自己的分類器,從而實現(xiàn)瑕疵分類。
實現(xiàn)瑕疵分類算法的具體步驟主要包括:加載預(yù)訓(xùn)練模型;設(shè)置網(wǎng)絡(luò)參數(shù),重組最后一層;定義自己的優(yōu)化器和損失函數(shù);加載圖片;訓(xùn)練階段;測試階段。
1) 加載預(yù)訓(xùn)練模型。在加載預(yù)訓(xùn)練模型之前,先添加兩個程序參數(shù)resume 和lr,resume 用于在命令執(zhí)行中控制加載模型的操作,lr 則用于之后的訓(xùn)練過程中改變學(xué)習(xí)率以便能訓(xùn)練出更高的準(zhǔn)確率。之后,加載VGG-16 模型的網(wǎng)絡(luò),包括網(wǎng)絡(luò)的整個結(jié)構(gòu)和參數(shù),可以直接使用加載之后的結(jié)構(gòu)和參數(shù)來進行訓(xùn)練。
2) 設(shè)置網(wǎng)絡(luò)參數(shù),重組最后一層。在預(yù)訓(xùn)練模型的基礎(chǔ)上訓(xùn)練出自己的分類器,從而針對手機屏幕上是否有瑕疵進行分類,這里的類別數(shù)設(shè)置為2 個:0 和1 分別表示良品和瑕疵品?;诖耍枰薷淖詈笠粚尤B接層的數(shù)量,VGG-16 最后一層的輸出為1 000 個,這里將其改為2 即可。
3) 定義優(yōu)化器和損失函數(shù)。本算法中采用交叉熵?fù)p失函數(shù)與mini-batch 來進行優(yōu)化。因為交叉熵?fù)p失函數(shù)對于最后一層權(quán)重的梯度不再跟激活函數(shù)的導(dǎo)數(shù)相關(guān),只與輸出值和真實值之間的差值成正比,這樣的話最后一層的收斂會加快,而反向傳播又是一個連乘的過程,所以整個權(quán)重的更新都會加快。而采用mini-batch 這種對數(shù)據(jù)集中的小批量樣本進行迭代計算的方式會讓計算量大大減少,減少了計算資源的消耗,計算速度也得到了提高。
4) 加載圖片。獲取數(shù)據(jù)集之后,需要對圖片進行預(yù)處理,即常見的圖像變換操作,改變給定圖片的尺寸大小。將圖片中的像素值歸一化到均值為0,方差為1,歸一化可以提高模型的收斂速度(梯度下降時保證方向的正確性),提高模型的精度(涉及距離算法,如歐氏距離),讓各個特征對結(jié)果做出相同的貢獻。對數(shù)據(jù)按通道進行標(biāo)準(zhǔn)化,此處選取的是PyTorch 中的通用值。
5) 訓(xùn)練階段。在訓(xùn)練階段,從數(shù)據(jù)加載器中加載一個batch 的數(shù)據(jù),喂入數(shù)據(jù)并前向傳播獲取模型輸出,也就是手機屏幕在0 和1 類別上的得分,將最高得分所對應(yīng)的索引值進行輸出;計算loss 函數(shù),反向傳播計算梯度,更新參數(shù);統(tǒng)計loss 值;統(tǒng)計準(zhǔn)確率(acc),acc 就等于預(yù)測與標(biāo)簽吻合的次數(shù)/樣本數(shù)。
6) 測試階段。測試階段同訓(xùn)練階段步驟一樣,只需要將輸入數(shù)據(jù)(訓(xùn)練階段是訓(xùn)練集,測試階段是測試集) 以及之后保存的數(shù)據(jù)路徑做相應(yīng)的更改即可。當(dāng)完成訓(xùn)練之后,需要用測試集檢驗?zāi)P陀?xùn)練成果。
上述算法對良品和瑕疵品進行了分類,但是存在一個問題:工業(yè)相機拍攝出來的手機屏幕圖片是比較大的,但是屏幕中的瑕疵位置相對于圖片來說一般是很小的,這會影響神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí),導(dǎo)致影響最后的準(zhǔn)確率。因此可以先對圖片進行切割,再將切割之后的圖片進行分類,這樣做的好處包括:一是切割圖片其實是變相地增加了神經(jīng)網(wǎng)絡(luò)的輸入量,如果將圖片切割為5 張,數(shù)據(jù)集的大小就會變?yōu)樵瓉淼? 倍,神經(jīng)網(wǎng)絡(luò)的投喂量增大對神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)有好處,可以提高神經(jīng)網(wǎng)絡(luò)的訓(xùn)練效率;二是切割之后瑕疵的大小相對于圖片來說變大,瑕疵的特征相對于它所在的屏幕區(qū)域變得明顯,神經(jīng)網(wǎng)絡(luò)提取到的特征也變得更加精準(zhǔn),準(zhǔn)確率也會相應(yīng)地得到提高。
在實驗過程中,設(shè)置世代數(shù)為100(經(jīng)驗值),該值表示算法在訓(xùn)練過程中逐步提高了100 次,逐個世代的訓(xùn)練會逐漸逼近最高的準(zhǔn)確率。選取學(xué)習(xí)率的原則是:首先選取較大的學(xué)習(xí)率1,然后根據(jù)得到的訓(xùn)練過程按指數(shù)次冪下降為0.3,0.1,0.01,0.003,0.001 依次進行訓(xùn)練,最后對訓(xùn)練較好的兩個學(xué)習(xí)率區(qū)間進行學(xué)習(xí)率選擇,分析實驗結(jié)果。
設(shè)置不同的學(xué)習(xí)率對3 個模型進行訓(xùn)練,訓(xùn)練結(jié)果見圖2。圖中的橫軸表示世代數(shù)(0~100),縱軸表示準(zhǔn)確率(acc);A表示預(yù)訓(xùn)練模型且對數(shù)據(jù)進行切割優(yōu)化之后的訓(xùn)練過程曲線,B表示加載預(yù)訓(xùn)練模型的參數(shù)和結(jié)構(gòu),也就是遷移學(xué)習(xí)之后的訓(xùn)練過程曲線,C表示遷移學(xué)習(xí)的優(yōu)化訓(xùn)練過程曲線。
圖2 不同學(xué)習(xí)率的訓(xùn)練過程圖(序)
圖2 不同學(xué)習(xí)率的訓(xùn)練過程圖
當(dāng)學(xué)習(xí)率不同時,A 算法、B 算法、C 算法在100 世代的準(zhǔn)確率見第107頁表1。
表1 不同學(xué)習(xí)率所對應(yīng)的100 世代準(zhǔn)確率 (%)
根據(jù)表1 可以得到如下結(jié)果。
1) 學(xué)習(xí)率為0.001 時,三者整體表現(xiàn)最優(yōu);學(xué)習(xí)率為1 時,三者整體表現(xiàn)最差,訓(xùn)練失敗。
2) A 算法的最高準(zhǔn)確率為76.050 8%,B 算法的最高準(zhǔn)確率為89.303 4%,C 算法的最高準(zhǔn)確率為94.589 5%。
3) C 算法相較于A 算法而言,準(zhǔn)確率最大提高了18.538 7%,從這一點可以看出預(yù)訓(xùn)練模型相較于非遷移學(xué)習(xí)的好處還是十分大的。
結(jié)果表明,在學(xué)習(xí)率合適的情況下,遷移學(xué)習(xí)相較于非遷移學(xué)習(xí)準(zhǔn)確率提高了近20%,優(yōu)化后的遷移學(xué)習(xí)準(zhǔn)確率相較于遷移學(xué)習(xí)又提高了近5%。
本研究僅對瑕疵品和良品進行了分類,之后應(yīng)該對瑕疵中的點瑕疵、線瑕疵和團瑕疵進行更詳細(xì)的研究,例如如何對它們進行更詳細(xì)的分類,如何對它們進行定位等,這些都是今后的研究方向。