趙 娜,覃志東,蔡 勇,肖芳雄
(1東華大學 計算機科學與技術學院,上海 201620;2上海岳展精密科技有限公司,上海 201614;3金陵科技學院 軟件工程學院,南京 211169)
鉚釘作為一種緊固件,被廣泛用于航空、船舶、武器裝備等安全關鍵行業(yè)。為杜絕鉚釘缺陷所致安全隱患,鉚釘缺陷檢測是生產加工過程中必不可少的一環(huán)。目前,大多數缺陷檢測方案是基于傳統機器視覺技術的。如周永洪等人采用閾值法去除噪音對檢測的影響,借助最小二乘法進行邊緣擬合,來提高鉚釘缺陷檢測的精度。劉春輝等人采用了Blob算法、金字塔匹配等基于圖像的缺陷判別方法來檢測鉚釘缺陷。但是,由于受生產環(huán)境的干擾,人工提取到的缺陷特征往往不能完全表達缺陷的特性。所以,鉚釘表面缺陷具有難以量化的特點,使得基于規(guī)則的傳統機器視覺檢測方案效能不佳。
而基于深度學習的缺陷檢測技術利用卷積神經網絡針對原始輸入圖像,逐層抽取底層特征最終得到抽象的高級語義,提取到的特征更加合理,避免了人工提取特征且特征模型后續(xù)難以使用的問題。深度學習的發(fā)展為產品表面缺陷檢測提供了新的思路和替代方案。
考慮到產業(yè)界只對鉚釘是否存在缺陷、缺陷位置和所占像素進行識別,而不關注其所屬類別,因此本文將鉚釘缺陷檢測問題定位為機器視覺中的語義分割問題。FCN網絡是一種典型的語義分割網絡,是將來自淺層的語義信息與深層的語義信息融合,以產生更為準確的分割結果。
FCN雖然實現了端到端的卷積網絡,但是其卷積過程仍然丟失了很多細節(jié)信息,分割精度有待提高。此外,FCN缺乏空間一致性,分類過程是對獨立的像素進行的,忽略了像素之間的關系。因此本文采用了另外一種解碼效果更好,更注重保留細節(jié)信息的語義分割網絡U-net。U-net是2015年被提出用來解決醫(yī)學中圖像分割問題,由于其出色的分割結果,現已廣泛應用到不同的語義分割任務中。2018年,針對U-net網絡中跳躍連接僅在編碼器和解碼器的相同比例特征圖上進行強制融合以及編解碼結構的深度因數據集而異的問題,Zhou等人對U-net原始網絡進行了改進,提出了U-net++。Unet++對固定深度的U-net進行改進,引入了一個內置的深度可變的U-net集合,并重新設計了跳躍連接方式,去除了U-net需要相同比例特征圖進行融合的限制。本文將U-net++作為基礎網絡,結合鉚釘缺陷特點進行改進得到新網絡U-net++,用于鉚釘表面缺陷檢測。
為了更好地介紹U-net++網絡的結構,首先簡單介紹一下原始的U-net網絡。U-net是經典的利用全卷積網絡進行語義分割的算法,整體網絡結構呈現一個“U”型結構,左側部分是網絡的編碼階段,右側是解碼部分,如圖1所示?;疑匦慰虼淼氖蔷W絡提取的特征圖,在編碼階段,每進行一次下采樣,特征圖尺寸都會減半,通道數加倍;目的是增加圖像抗干擾的能力,降低過擬合的風險,減少運算量。在解碼階段是為了將特征圖還原至原始圖像大小。在進行上采樣前,網絡先將特征圖與編碼階段生成的相同比例的特征圖進行融合,用來增加淺層網絡提取的細節(jié)信息。融合的方式是通過跳躍連接實現的。將編碼器階段的局部的細節(jié)特征與解碼器階段全局的抽象特征進行融合,使得網絡更加有效地抓取目標的細節(jié)特征。
圖1 U-net網絡結構Fig.1 Network structure of U-net
U-net++網絡是U-net網絡的改進版,在整體設計上還是遵循編解碼的“U”型結構,如圖2所示。U-net++與U-net原始網絡相比,相當于把不同深度的U-net進行了拼接,讓網絡自主學習,極大地豐富了解碼過程。為了解決單純的拼接導致U-net網絡會存在中間隱藏層的輸出沒有與最終的輸出相連接,造成網絡計算的損失無法通過反向傳播的方式更新中間隱藏層權重的問題,在保留原始長鏈接的同時,為中間隱藏層每個卷積之間都增加了短鏈接。長連接和短鏈接共同作用于網絡,使得解碼階段特征融合得更加靈活,還有助于還原下采樣帶來的信息損失。除此之外,網絡還引入了深監(jiān)督(Deep Supervision),為每一個隱藏層的輸出增加了1*1的卷積,來監(jiān)督中間層的輸出結果,不僅進一步解決了中間隱藏層無法訓練的問題,還加快了網絡的收斂速度。
圖2 U-net++網絡結構Fig.2 U-net++network structure
U-net++原始網絡是針對醫(yī)學圖像中的細胞分割,雖然在醫(yī)學圖像上取得了很好的分割效果,但是由于本文鉚釘缺陷與醫(yī)學細胞特征的差異性,使得原始網絡并不能完全適合本文的檢測對象。因此本節(jié)從鉚釘表面缺陷特點出發(fā),分析U-net++網絡結構并對其改進得到用于缺陷檢測的模型U-net++。
在深度學習網絡中,淺層網絡是用來提取一些具體的、局部的特征信息,隨著網絡層次的加深,所提取到的特征逐漸變得復雜。針對本文鉚釘缺陷數據集而言,缺陷特征多為局部特征,語義層次較低,感受野不宜過大。因此鉚釘表面缺陷檢測網絡不需要設計得過深。其次,網絡越深,網絡參數會呈現直線上升趨勢,因此采用合理的網絡結構是保證缺陷檢測精度和效率的關鍵。
為了確定更適合鉚釘缺陷的網絡深度,本文基于U-net++設計了1~4層的網絡結構,并在本文數據集上進行了對比試驗,實驗結果如圖3所示,其中圓圈、矩形、三角形、五角星分別表示1~4層的網絡。隨著網絡深度的增加,和推理時間都有增加的趨勢。但是4層的網絡結構相比于3層網絡結構,提升0.3個百分點。推理時間需要多消耗19.6個百分點,可見用時間消耗大幅增加換來精度的微弱提升是不值得的,因此本文對原始網絡進行剪枝,采用3層下采樣的網絡結構,如圖4所示。
圖3 不同深度網絡對比圖Fig.3 Comparison of networks with different depth
圖4 剪枝后的網絡結構Fig.4 Network structure after pruning
網絡的整體結構還是遵循典型的全卷積網絡結構,編碼階段由3部分組成,每一部分包含2個3*3的卷積,每個卷積后有一個激活函數和一個最大池化層。其中,卷積采用same卷積。避免了在解碼階段時為了使不同尺寸的特征圖進行融合而采用的裁剪步驟。解碼階段由6個基本單元組成,每一部分包含一個2*2的反卷積對特征圖尺寸進行加倍,2個3*3的卷積加一個激活函數,最后通過一個1*1的卷積映射到二分類進行輸出。
工業(yè)中缺陷數據集的收集比較困難,而且鉚釘的缺陷種類繁多,形狀各異,缺陷標注的工作量非常大,標注過程中往往需要根據公司需求反復確認修改標注。因此本文最終共標注了300張缺陷圖像。為了在小數據集上訓練得到一個較好的模型,避免訓練過程的過擬合現象,本文除了使用常規(guī)的水平翻轉、垂直翻轉等數據增強方式外,還針對鉚釘缺陷的特點設計了模糊標簽的數據增強方式。
工業(yè)環(huán)境中缺陷產生的隨機性導致缺陷并沒有一個標準的形狀,對于那些位于缺陷中心的像素可以很明確地認為是缺陷像素,但是對于缺陷邊界處的像素就難以界定。同時,本文的缺陷檢測是像素級別的檢測,每個像素的標簽值對網絡的學習結果影響較大。為此,本文提出了模糊標簽的解決方案,即在缺陷邊緣區(qū)域像素的標簽值不僅局限于是缺陷、或不是缺陷這種非0即1的情況,而是通過一個較好的方式根據缺陷邊緣像素不確定的程度賦予一個對應的標簽權重。本文中標簽模糊化是通過一個3*3的均值濾波來處理的。均值濾波處理思路比較簡單,即將這個3*3大小窗口內的像素根據式(1)來計算平均值:
此后,將窗口計算得到的均值設置為錨點上的像素值。均值濾波有個明顯的特點,就是通過計算均值的方式會使邊緣信息模糊掉,而本文正是基于此而將原本標簽邊界0到255的跳變通過均值濾波處理成連續(xù)的像素值。
原始網絡是針對醫(yī)學圖像細胞的分割,針對細胞之間相互接觸問題引入了帶權重的交叉熵損失函數,使得越靠近邊緣的像素權重越大,從而使網絡更好地學習邊緣信息。對于語義分割這種二分類的情況,模型最終只需要輸出2種結果,交叉熵損失函數非常適合這種二分類問題。假設每個類別中預測的概率為和1,那么交叉熵損失函數可以寫成式(2)的形式:
其中,y表示樣本的標簽,前景為1,背景為0;p表示樣本預測為正類的概率,在這里是歸一化后的概率值。由于本文采用模糊標簽增強數據,所以就需要進行歸一化處理,本文選擇了更適合二分類的激活函數如式(3)所示:
但單一交叉熵損失函數在本文數據集中存在收斂速度較慢的問題。原因在于本文數據集中的缺陷形狀大小差別較大,有很多缺陷、如碰傷,所占像素面積很小,但是深度較深仍需要檢出,加上交叉熵損失函數的競爭機制,使得損失函數關注于正確標簽預測概率的準確性。如果網絡把所有的樣本都視為無缺陷樣本,準確率也可以達到一個很高的結果,因此若只是用交叉熵損失函數,網絡訓練前期將長時間學習不到缺陷樣本。為了提高網絡的收斂速度,本文引入了損失函數。即交并比,可以很好反映出預測區(qū)域和真實區(qū)域的預測效果。即交集與并集的比值。值越大,說明預測值與真實值越接近,損失函數值應該越小。損失函數的定義如式(4)所示:
其中,表示預測的像素區(qū)域;表示標注的像素區(qū)域。本文采用交叉熵損失函數和損失函數相結合的復合損失函數方式,可以有效加快網絡的收斂速度。
鑒于本文所使用的鉚釘表面缺陷數據集是未公開數據集,為了證明本文網絡模型改進方案的合理性和有效性,故在公開數據集Kolektor對本文網絡模型與其它算法進行對比實驗。Kolektor是由Kolektor Group提供和標注的電子換向器表面缺陷數據集。圖像數據在電子換向器8個不重疊的表面進行采集,共采集了50個有缺陷的電子換向器。在采集過程中保證一個缺陷僅在一張圖像中可見。數據集共采集399張圖像。其中有缺陷圖像52張,無缺陷圖像347張,每張圖像分辨率為500*1 263。為了適應本文網絡訓練,圖片分辨率被調整為480*1 248。在該公開數據集上評估了語義分割算法Unet、DeepLabv3+以及文獻[9]提出的改進算法SqueezeNet,與本文模型U-net++的數據對比結果如圖5所示。
圖5 網絡模型精確度對比柱狀圖Fig.5 Accuracy comparison histogram of network models
從圖5可以看出,文獻[9]采用的網絡模型SqueezeNet精確度最高,但是其網絡模型并未對圖像進行全分辨率的像素級別的分割,輸出圖像的分辨率降低了8倍,而本文網絡模型輸出結果是原比例輸出,僅比SqueezeNet低了1.8個百分點。此外,本文算法模型在該公開數據集上將缺陷樣本識別為無缺陷樣本的概率降至0,其它對比算法中仍存在將缺陷樣本推理為無缺陷樣本的情況。
圖6是本文網絡模型在Kolektor上的預測部分結果展示,圖6(a)是人工標注結果,圖6(b)是本文模型推理結果。圖6(c)是人工標注結果的對應放大圖,圖6(d)是本文算法推理結果的對應放大圖。該結果直觀表明了本文網絡模型在Kolektor數據集上仍有較好的表現。
圖6 U-net++*模型在Kolektor上的預測結果Fig.6 Prediction results of the model U-net++*on Kolektor
為了驗證損失函數,與交叉熵損失函數構成復合損失共同作用于網絡的訓練過程,與只使用單一的交叉熵損失函數的網絡模型相比,可以加快模型擬合的速度。本文設計了單一交叉熵損失函數和復合損失函數在本文數據集和公開數據集對比試驗Kolektor上的對比結果。實驗數據如圖7所示。圖7中,數據集1是本文鉚釘的表面缺陷數據,數據集2是公開數據集DAGM 2007。橫坐標表示模型訓練的迭代次數,縱坐標用于觀測模型訓練過程的擬合趨勢,其值是訓練數據集在當前迭代次數訓練得到的模型檢測出缺陷面積與標注圖像中缺陷面積的比值。
圖7 有無IoU損失函數對比曲線圖Fig.7 Comparison graph of loss function with and without IoU
從2組對比實驗不難發(fā)現,復合損失函數在前期迭代過程中,都不同程度上加快了網絡的收斂速度,分別在數據集1上提升了21.3%、數據集2上提升了24.9%。實驗表明,單一的交叉熵損失函數對網絡模型的優(yōu)化方向較為單一,對于背景較多的數據集而言,找到前景所消耗的時間較長。交叉熵損失函數配合損失函數后,可以促使優(yōu)化方向發(fā)生一定的跳動以加快尋求最好的優(yōu)化結果的速度。
圖8展示的是本文模型U-net++推理結果,可以看到每一個缺陷都計算了其所占像素。因為本文在缺陷標注過程中,一些細微的缺陷仍然標注在內使得模型將很小的缺陷也被標注出來,這往往會導致最終的精確度會偏低,因為某部分存在一些狹小缺陷但可以被認定為良品的鉚釘被判定為了不良品。因此在系統做了根據缺陷所占像素進行篩選的功能操作后,根據用戶的需求,可以調高或者放低對缺陷大小的要求,更符合鉚釘的生產場景需求。
圖8 模型推理檢測結果Fig.8 Model inference detection results
目前,缺陷檢測已經成為工業(yè)生產流水線中的重要一環(huán),隨著對產品質量的要求越來越高,基于規(guī)則的傳統的機器視覺檢測方案在一些難以量化的缺陷面前表現不佳。本文針對鉚釘表面缺陷檢測的特點,設計了一種基于U-Net++的語義分割網絡模型U-net++。首先針對鉚釘缺陷語義層次的特點,對U-net++原始網絡進行剪枝;此外針對數據集較小、且缺陷邊界難以界定的問題,提出了模糊標簽的數據增強方式;并針對單一的交叉熵損失函數在網絡訓練中存在收斂過慢的問題,本文增加了損失函數與其構成復合損失函數共同作用于網絡。本文提出的鉚釘表面缺陷檢測模型U-net++,是在U-Net++的基礎上改進優(yōu)化,滿足工業(yè)實時性檢測需求的網絡結構。