陳永恒 陳 軍 羅維平
(1.武漢紡織大學,湖北武漢,430200;2.塔里木大學,新疆阿拉爾,843300)
織物疵點的多少是對織物品質好壞的評價標準,因此織物疵點檢測對織物的質量有著十分重要的作用[1]。目前織物疵點檢測的方法有:基于結構方法,但是結構方法可靠性低,只能將織物的疵點從紋理中分離出來;基于統計學方法,灰度共生矩陣高分辨率圖像性能較差且計算成本很高,直方圖統計法的特征向量維數過高且計算量大;基于頻譜方法,傅里葉變換受結構變化影響大且實時性、通用性很差;隨著“互聯網+”的快速發展,對工業生產中織物疵點檢測方法也有了很大的提升,通過計算機的推理處理技術可以快速高效地檢測出疵點,從而很快判斷出織物品質的好壞[2?6]。
當AlexNet[7]取得ImageNet 數據集[8]圖像分類冠軍之后,深度學習隨之得到了長遠的發展,提出了如GooleNet[9]、VGG[10]、ResNet[11]、DenseNet[12]等典型神經網絡[13]。GooleNet 網絡結構比較簡單,滿足不了生產時間的需要;VGG 增加了網絡結構的深度,促進了卷積神經網絡結構向更深深度的發展;ResNet 運用了殘差學習,解決了神經網絡結構梯度消失的問題;DenseNet 采用密集連接,性能更優于ResNet。
本研究提出一種基于改進DenseNet201 網絡的織物疵點檢測算法。在本研究的訓練集和驗證集下訓練得到一個織物疵點檢測模型,試驗表明:該模型具有良好的泛化能力,能夠精準快速識別正常織物、8 類常見織物疵點。
本研究提出的織物疵點檢測算法主要工作流程:首先對數據集的圖像進行預處理,可視化各種織物疵點類型的數量,剔除無效的圖像;然后改進卷積層第1 層、添加SPP 層;再提取在大型數據集ImageNet 下預訓練好的DenseNet201 權重參數進行遷移學習,釋放原有的全連接層(分類器),添加自己的全連接層,利用數據增強和Dropout 技術降低過擬合的程度;最后運用本研究的訓練集和驗證集,反復調節參數,訓練改進的DenseNet201 網絡,得到織物疵點檢測模型。
為了在更大程度上解決梯度消失、加強特征傳遞、更有效地利用特征、減少一定的參數數量,DenseNet 網絡結構直接將所有層連接起來,保證了網絡中層與層之間最大程度的完整傳輸,實現了網絡端到端的網絡傳輸模式。Dense Block 結構如圖1 所示。
在傳統的卷積神經網絡中,卷積神經網絡有L層,那么就會有L個連接。 根據圖1,在DenseNet 卷積神經網絡中,如果DenseNet 卷積神經網絡有L層,那么就會有L(L+1)/2 個連接,通俗地講,就是每一層的輸入都來自于前面所有層的輸出,x0是整個卷積神經網絡的輸入,H1的輸入是x0(輸入),H2的輸入是x0和x1(x1是H1的輸出),依此類推。

圖1 Dense Block 結構
現有的ResNet 網絡采用跨連接,形成恒等映射的交叉結構,其恒等映射公式如式(1)所示。

式中:xl表示l層輸出特征圖,Hl表示網絡之間的非線性變換。由式(1)可以看出,l層的輸出是l-1 層的輸出與l-1 層輸出的非線性變換之和。DenseNet 網絡每一層直接連接輸入層和損失層,從而減輕梯度消失的問題,其輸出公式如式(2)所示。

式中:xl是l層輸出特征圖,[x0,x1,...,xl-1]是l層前面所有層特征映射的拼接。因此相對于ResNet 等深度網絡依賴最后一層輸出的特征,而DenseNet 融合利用更多低層次的特征,其訓練出來的分類器泛化性高。
以兩個Dense Block 為例的DenseNet 結構如圖2 所示。

圖2 標準DenseNet 結構
由圖2 可知,一個標準的DenseNet 結構由輸入、卷積層、池化層、Dense Block 層、全連接層構成。
在訓練模型的過程中,只給定RGB 三色通道,沒有固定輸入圖像的大小,輸入尺寸大小不一的圖像就會導致全連接層的特征數不固定,從而程序報錯,訓練不出合適的模型。如果在訓練模型的過程中固定圖像的大小,那么就會對大于標準尺寸的圖像進行縮放或者是裁剪,對小于標準尺寸的圖像進行拉伸,縮放和拉伸會使圖片特征信息減弱,裁剪會出現部分區域圖像被多次裁剪,無形之中加大了該區域的權重。因此在網絡中添加SPP 層,這樣就可以輸入任意大小的圖片,不需要進行縮放、拉伸、裁剪等預處理工作。SPP 層結構如圖3 所示。

圖3 SPP 層結構圖
由圖3 可知,利用3 種不同刻度對輸入的特征圖進行劃分,總共得到21 塊。左邊把一張圖片劃分成16 塊,中間把一張圖片劃分成4 塊,右邊的把一張圖片劃分成1 塊,分別計算每塊的最大值(局部池化),這樣就可以把一張任意大小的圖片轉換成一個固定大小的21 維特征。
本研究嘗試了DenseNet121、DenseNet169、DenseNet161、DenseNet201 等多種深度的網絡后,根據試驗效果和實驗室環境綜合考慮,選用了DenseNet201 網絡[14]。DenseNet201 網絡的第1層是7×7 卷積層,感受野大,不適用于本研究大多數織物中小疵點的檢測,為了提取到織物疵點更多的細節特征用于精確分類,本研究選用1×1、3×3、5×5 的3 個分支卷積層替代7×7 卷積層。一方面,3 個分支卷積層可以識別各種大小織物疵點;另一方面,3 個分支卷積層使判決函數的性能得到了優化;再一方面,3 個分支卷積層的使用降低了參數量,假設卷積層輸出特征圖的大小為s,3 個分支卷積層的參數為(1×1×s)×s+(3×3×s)×s+(5×5×s)×s=35s2,一個7×7卷積層的參數為(7×7×s)×s=49s2,所以在不改變初始感受野的情況下改進DenseNet201 網絡的第1 個卷積層,提升了織物疵點檢測模型的性能。改進后的DenseNet201 網絡結構如圖4所示。

圖4 改進后的DenseNet201 網絡結構
遷移學習是把為A 任務開發的模型作為初始點,重新運用到B 任務訓練模型的過程中。在深度學習中,要訓練出一個泛化性高的模型,那么就需要大量的已標注樣本以及相互獨立的訓練集和測試集,這在實際訓練模型時很難滿足。由于織物疵點數據集中的疵點種類很多,但是很多種類都不常見且數量很少,很難直接滿足深度學習訓練模型的需要,因此采用在大型數據集Ima?geNet 下預訓練好的DenseNet201 模型,去掉預訓練好模型的全連接層,遷移學習預訓練好模型的初始參數,作為改進后的DenseNet201 網絡參數,再在織物疵點數據集上重新訓練頂層卷積網絡,得到一個魯棒性和泛化性好的織物疵點檢測模型。
在普通的實驗室環境中,建立織物疵點數據集的難度很大,因此采用江蘇陽光集團在實際生產現場采集并開源的織物疵點數據集,具體的數量如圖5 所示。每張圖片的分辨率2 560 pixel×1 920 pixel,圖像細節特征清晰,每張圖片都由經驗豐富的驗布工人確認。

圖5 織物疵點數據集數量圖
由圖5 可知,該織物疵點數據集包含2 163 張正常織物圖片、1 584 張有疵點圖像,本研究選擇樣本數量較多的正常織物和擦洞、吊經、跳花、織稀、毛洞、扎洞、缺經、毛斑共8 類織物疵點圖像,作為該織物模型訓練的數據集。
為了保證模型訓練的精度,把數據集的80%作為訓練集、10%作為驗證集、10%作為測試集。為了防止模型訓練中出現過擬合問題,采用數據增強和Dropout 技術提高模型泛化能力。數據增強使用水平翻轉、垂直翻轉、水平垂直翻轉、30°旋轉、45°旋轉、水平平移、垂直平移、水平垂直平移。
試驗過程中使用準確率(Accuracy,Acc)作為模型好壞的評價指標,準確率是模型針對全部樣本的判斷能力[15]。首先把數據集分為正類(無疵點)和負類(有疵點),那么對一批測試數據進行預測,結果就可以分成以下4 種。若一張圖像為無疵點,分類器將其判斷為無疵點,稱為真正類(True Positive,TP);反之,如果分類器將其判斷為有疵點,稱為假負類(False Negative,FN);若一張圖片為有疵點,分類器將其判斷為無疵點,稱為假正類(False Positive,FP);反之,若分類器將其判斷為無疵點,稱為真負類(True Negative,TN)。準確率的計算公式如式(3)所示。

除此之外,訓練過程中的損失值也是判定一個模型好壞的指標之一,損失值越小,模型的魯棒性就越好。
首先利用劃分好的數據集分別對當前主流的VGG16 模型、VGG19 模型、ResNet50 模型、In?ception 模型、DenseNet121 模型、DenseNet169 模型、標準DenseNet201 模型、改進DenseNet201 模型進行訓練,訓練完成后在數據集的測試集上分別測試對比;然后利用傳統的織物疵點檢測方法和數據集的測試集進行測試分析,方向梯度直方圖(HOG)特征方法、局部二值化模式(LBP)特征方法;最后在實驗室環境下采集純色織物圖像,分別測試分析模型的泛化性。
DenseNet201 模型是一個在大型數據集Ima?geNet 下預訓練的模型,其中有1 000 個類別的輸出,與本研究使用的數據集差異性較大,所以在改進卷積層第1 層的基礎上,自定義全連接層,然后在全連接層前添加SPP 層,最后利用遷移學習和自己的數據集訓練織物疵點檢測模型,讓訓練出來的模型更加與織物疵點檢測相關。微調訓練模型參數過程中,給定模型一個有疵點的圖像,輸入后將DenseNet201 模型的卷積層第1 層輸出的特征圖從寬度、高度、深度3 個維度進行可視化顯示,將每個通道的信息繪制成二維圖像,如圖6~圖8 所示。

圖6 卷積層第1 層卷積圖像信息可視化二維圖

圖7 卷積層第1 層卷積后歸一化圖像信息可視化二維圖

圖8 卷積層第1 層卷積、歸一化后激活圖像信息可視化二維圖
實驗室所用的環境配置是Inter i7?9700K 處理器、64GB 內存、兩塊 NVIDIAGeForce RTX2080Ti 顯卡。在程序中設置試驗過程為當驗證準確率改變時就保存一次模型,訓練100 次以增強模型的泛化性和魯棒性。通過訓練過程中的反饋反復調節超參數、更換不同的Dropout 比例等方式,直到訓練的模型達到最佳性能。其中標準DenseNet201 網絡模型訓練過程的損失曲線和準確率曲線如圖9 所示,改進的DenseNet201網絡訓練過程損失曲線和準確率曲線如圖10所示。

圖9 標準DenseNet201 網絡模型訓練過程的準確率曲線和損失曲線
由圖9 和圖10 可知,改進的DenseNet201 網絡模型訓練過程的準確率曲線比標準DenseNet201 網絡模型訓練過程的準確率曲線收斂,訓練準確率和驗證準確率都平穩趨近于1;改進的DenseNet201 網絡模型訓練過程的損失曲線比標準DenseNet201 網絡模型訓練過程的損失曲線收斂,訓練損失和驗證損失都穩定趨近于0。因此改進的DenseNet201 網絡模型泛化性和魯棒性更好。

圖10 改進的DenseNet201 網絡模型訓練過程的準確率曲線和損失曲線
利用訓練好的模型、其他主流深度學習模型在織物疵點數據集的測試集上分別進行試驗驗證,試驗結果如表1 所示。
由表1 可知,改進DenseNet201 模型的權重參數相比其他試驗模型是最少的,訓練精度和驗證精度相對于其他試驗模型不是最好,但相對于其他試驗模型測試精度最高、測試速度最快;改進DenseNet201 網絡模型比標準DenseNet201 網絡模型的測試精度提升了1.1 個百分點,測試速度提升了2 倍多,相比傳統的織物疵點檢測方法測試精度分別提高了27.6 個百分點、28.4 個百分點。由此可見,改進的DenseNet201 網絡模型能更好適應實際工業生產環境中的織物疵點檢測。

表1 其他主流深度學習模型與本研究改進模型在測試集上測試結果對比
利用實驗室環境下采集的純色織物圖片驗證主流深度學習算法和傳統織物疵點檢測算法的泛化性,試驗效果如下。VGG16 模型、VGG19 模型、ResNet50 模型、Inception 模型、DenseNet121模型、DenseNet169 模型、DenseNet201 模型、改進DenseNet201 模型、HOG 模型、LBP 模型的測試精度分別為81.9%、82.6%、85.1%、85.9%、87.1%、 87.9%、 88.6%、 89.9%、 65.2%、67.3%。由于DenseNet201 模型卷積神經網絡的網絡層是最深的,在提取織物圖像特征時會完整的保留特征信息,相對其他模型和傳統織物疵點檢測算法,測試精度最高,表現出了良好的泛化能力。 因此綜合模型的各種性能,改進的DenseNet201 模型泛化性符合要求。
本研究提出了基于DenseNet201 網絡的織物疵點檢測算法,能夠有效地識別正常織物、8 種常見織物疵點。通過改進DenseNet201 的第1 層,使得在網絡感受野不變的情況下,可以滿足不同大小的織物疵點檢測,同時還降低了整個網絡的參數量。在自定義的全連接層前加入了SPP 層,不管網絡的輸入尺寸大小,都可以產生固定的輸出,能夠降低過擬合的程度,使得網絡更加容易收斂。本研究改進的DenseNet201 網絡進一步提升了織物疵點的識別精度和識別速度。該模型具有良好的泛化性和魯棒性,基本滿足現場工業生產檢測的需求。在后期試驗和研究過程中補充織物疵點的數據集,通過改進模型結構、優化模型參數等方式,訓練出識別準確率更高、識別速度更快的織物疵點檢測模型。