張宇杰,蔡樂才,成 奎,高 祥,唐 林
(1.四川輕化工大學自動化與信息工程學院,四川 宜賓 644000;2.宜賓學院三江人工智能與機器人研究院,四川 宜賓 644000;3.四川輕化工大學機械工程學院,四川 宜賓 644000))
在現代化生產過程中,由于技術工藝水平、操作不當等因素所造成的金屬表面狀缺陷(如裂紋、裂縫、磨損、毛刺等)、條狀缺陷(如條狀縫等)、體狀缺陷(如夾雜物等)等零件表面缺陷是許多重大安全事故的罪魁禍首[1]。工業金屬機械零件表面質量檢驗在制造產業中一直是不可缺少的一項環節,在實際生產工件的過程中,傳統的方式是通過人工肉眼檢測篩選工件表面的缺陷,不利于長時間高效率地檢測。因此,開發準確高效的金屬表面缺陷全自動識別和檢測方法很有必要[2]。
近年來,深度學習技術在眾多領域得到了長足發展,被應用于諸多人工智能任務中,且都取得了理想結果[3],而應用最廣的就是工業檢測方向。很多企業利用智能檢測技術來代替人工檢測技術,不僅降低了人工成本,還提高了檢測的準確度和效率。深度學習理論的提出[3],為工業檢測方向提供了新的能量;YOLO 算法的提出為金屬表面缺陷檢測提供了更好的解決方案,在原有神經網絡基礎上,既保留了精確度,又大大縮短了檢測時間[4]。程婧怡等[5]采用改進YOLOv3算法,利用特征金字塔與殘差層融合特征的方式對圖片中的缺陷定位進行了檢測。方葉祥等[6]提出一種更改損失函數和改進k-means++聚類的YOLOv3 算法進行了缺陷檢測。毛嘉興[7]提出了基于YOLOv2[8]通用目標檢測算法,本身框架是針對遙感衛星圖像(You Only Look Twice,YOLT),在YOLOv2 網絡結構上進行改進,解決衛星遙感拍攝到圖像中的小目標檢測精確度不高的情況,對遙感圖像進行處理時采用滑動窗搜索進行分塊,以確保目標不被遺漏[9]。
YOLOv5 作為目前市面上版本較新的目標檢測算法,在實踐中可根據不同的項目大小來選擇合適的權重進行訓練,且在不同數據集上的準確性均高于以前的YOLO 版本。然而YOLOv5 識別單個圖像的運算時間相較于其他版本更長。因此,本文以YOLOv5 檢測算法為基礎,在其原有程序的基礎上進行改進,針對增加檢測層和檢測圖像融合后更大特征圖卻無檢測框識別的情況,引入k-means 聚類算法算出最佳檢測框的個數及尺寸。在訓練過程中,針對細小缺陷不易被檢測的問題,采用上采樣反向融合圖片,增大圖片,并增加3 個特征提取層。在后續檢測模塊中借鑒YOLT 算法中針對遙感目標檢測中的方法,對大圖進行切割分片,分別檢測后再進行融合檢測,以此來提升小目標檢測的準確率。
在YOLOv5 的輸入端中共有下列幾個關鍵點:(1)數據增強:YOLOv5 采用了Mosaic 數據增強的方式,通過采用4 張圖片隨機縮放、隨機裁剪、隨機排布的方式進行拼接,大大豐富了檢測數據集[10]。Mosaic 增強訓練時,可以直接計算4 張圖片的數據,且只需要一個GPU 就可以達到比較好的預期效果[11]。(2)自適應錨框:在YOLO 算法中針對不同的數據集,都會有初始設定長寬的錨框[12]。YOLOv5中將外部計算錨框的方式嵌到代碼中,每次訓練時它能夠自適應地計算不同訓練集中的最佳錨框值[13]。(3)自適應圖片縮放:在常用的目標檢測中,輸入的圖片長寬比并不統一,YOLOv5為改進此問題,在源碼中加入填充功能,針對小的原始圖進行黑邊填充,大的原始圖進行縮放,之后變為統一的圖像標準,減少了人力操作,提高了效率。
在Backbone 中,YOLOv5 增加了在之前YOLO版本中沒有的Focus 結構,其關鍵操作是將圖片切片[14],如圖1 所示。其主要作用是從高分辨率的圖中,呈周期性地抽出像素點進行重構,組成低分辨率圖像,提升每個視野的感受點,減少原圖信息的丟失。可在沒有參數的情況下將輸入維度進行下采樣,最大限度地保留原有信息,減少計算量,增加檢測速度。

圖1 Focus切片操作
YOLOv5整體采用了兩種CSP結構[15],主要目的是解決在推理計算中計算量大的問題,采用CSP 模塊可將基礎層的特征映射劃分為兩部分,然后通過跨階段層次結構將它們合并,還可以增強神經網絡的學習能力,在降低計算瓶頸和運行內存成本的同時保證準確率[15]。CSPX結構如圖2所示。

圖2 CSPX結構
在YOLOv5 中 有 兩種CSP 結構,即CSP1_X 與CSP2_X。首先CSP1_X 處于主干網絡中,其次CSP2_X 處于之后的NECK 中,分別處于不同的部位,YOLOv5 的backbone 及Neck 結構如圖3 所示,從圖中可看出CSP結構存在的位置。

圖3 backbone+Neck
激活函數是在卷積神經網絡神經元上運行的函數,負責將神經元的輸入映射到輸出端,它的作用是為了增加神經網絡模型的非線性變化。Mish函數是一種自正則的非單調神經激活函數,其圖像相較于其他的函數更平滑,從而可得到更好的準確性和泛化[16]。采用的Mish激活函數[13]如下:


Mish 激活函數的平滑曲線與平滑度如圖4所示。

圖4 Mish激活函數
Neck 用于形成特征金字塔(Feature Pyramid Networks,FPN)[17],特征金字塔可增強網絡對不同尺寸的圖像的檢測,進而識別不同大小和尺度的同一物體,路徑聚合網絡(Perceptual Adversarial Network,PAN)如圖5 所示[18]。YOLOv5 采用了FPN+PAN 結構,此結構主要加強了信息傳播,使得網絡能檢測到更細微的原圖信息,在目標識別上得到更高的精確度。

圖5 PAN結構
Head 模塊如圖6 所示,其作用在最終檢測,它在輸入的檢測圖像上生成錨定框,在框上生成檢測出的類別以及識別的準確度。

圖6 Head模塊
YOLOv5 在輸出端分為兩個部分:一為bounding box 損失函數,二為非極大值抑制(Non-Maximum Suppression,NMS)。YOLOv5 的bounding采用式(2)表示的C-IOU loss 方式,該損失函數[19]相較于傳統D-IOU loss 和G-IOU loss,既解決了邊界框不重合的問題,又在D-IOU 邊界框中心點距離的信息基礎上考慮了邊界框寬高比的尺度信息[19],從而提高檢測速度和精確度。


由LOSS= 1 -CIOU可得:

其中:hgt、wgt分別為真實框的長、寬;h、w分別為需要預測矩形框長、寬。
YOLOv5 中采用加權NMS 的方式[20],其作用是將多余的框和重復的框去掉,以此提高準確率以及使檢測人員可更好地進行識別,排查檢測物。
YOLT 算法是以YOLOv2 算法為基礎進行改進的衛星圖像目標檢測算法,針對輸入圖片過大而待檢測目標相較圖片分辨率較小的情況,其中所用到的方法可針對小目標檢測。核心思想是將一張大分辨率的圖像進行分割,變成一張張的小圖,再分別進行檢測,對于最小目標像素的下限會大大降低。
YOLOv5有4種不同大小的網絡結構,根據項目適應度,選擇YOLOv5m[11]進行改進。
在實際應用中,由于YOLOv5 自帶的計算錨框只有9 個檢測框,在遇到不符合錨框尺寸的更細微的小缺陷時很可能會造成漏檢、誤檢。因此需通過外部重新計算,重新進行anchor box 個數及尺寸確定。而使用算法選取k-means 聚類算法,通過自制數據集上的標注目標框信息(ground truth),手動計算最適合的自適應錨框個數及錨框尺寸,可增加檢測的準確率及檢測的效率。
在金屬表面缺陷檢測任務中,進行聚類是為了使anchor box 與ground truth 的IOU越大越好,所以不可采用平常聚類方法的歐式距離來計算,應采用IOU作為度量函數進行計算。新公式如下:

其中:box是標注的真實目標框,centorid是聚類的中心點。
anchor box 個數K與IOU(交并比)的關系曲線如圖7 所示。數據集的IOU與K成正相關,在K為10~12.5時逐漸趨于平穩,故本文選擇K= 12[12]。在原有9 個檢測框的情況下又增加了3 個尺寸更小的檢測框,用來針對最大圖片中的小目標缺陷,使檢測更準,圖8所示為增加前后錨框尺寸對比。

圖7 自適應錨框個數與IOU關系圖

圖8 更改前后anchors對比
通過k-means 聚類算法得出增加的3 組(5,6)、(8,14)、(15,11)尺寸的檢測框,并應用于下一改進階段所增加感受視野最大的檢測圖中使用。
在訓練階段,針對金屬表面小目標缺陷檢測準確度不夠,將特征提取進行增強,在原有特征提取層中,繼續增加了3 個特征提取層,使算法在20 ×20、40 × 40、80 × 80 和160 × 160 共4 類特征尺度上進行特征提取。首先,分別針對20 × 20、40 ×40、80 × 80 尺寸的特征圖進行特征提取,它們的感受視野分別為大、中、小,在head 中得到小型特征圖后,繼續對輸入特征圖進行上采樣等處理,使得特征圖繼續擴大,獲得大小為160 × 160 的特征圖,將其與骨干網絡中第2 層特征圖進行concat 融合,以此獲取更大的特征圖進行金屬表面缺陷小目標檢測。之后繼續進行中型圖的特征提取,再進行小型圖的特征提取。圖9 所示為修改后的MODEL層結構。

圖9 改進網絡結構部分
在檢測階段中,給予輸入圖像進行小目標分割檢測,以輸入圖像608 × 608 為例,YOLOv5 中進行了5 次下采樣,最后得到的特征圖大小分別是19 ×19、38 × 38與76 × 76,這3個中最大的76 × 76負責檢測小目標,對應到608 × 608 上,每個特征圖的感受視野尺寸大小是8 × 8。因為金屬表面缺陷存在大量的細微小型缺陷,所以在YOLOv5 檢測網絡結構的基礎上,借鑒YOLT 算法[7]處理輸入大分辨率圖像檢測的方式進行改進,先進行分割,變成一張小圖,再進行檢測,如圖10所示。

圖10 YOTL算法操作
檢測后再回收所有圖像,計算坐標相對值,集體進行NMS 操作,將檢測到同一小目標物的兩個不同的標注框分開,如圖11所示。

圖11 集體NMS操作
綜合以上分析,配合當前效果較優的圖像處理手段,結合現有的攝像頭拍攝到待檢測的金屬表面圖,得到檢測金屬表面傷痕具體位置的完整方案,具體檢測流程如下:
(1)相機獲取到金屬表面圖片,進行歸一化處理后,記錄原圖。
(2)圖像分割:對圖片中待檢測的區域進行設置,標注出檢測的位置。
(3)圖像預處理將圖像灰度值改變為(0,255),將圖片灰度歸一化,去噪(高斯濾波)。
(4)輸入訓練數據,采用更改后的代碼(YOLOv5m_modify)進行訓練,得到訓練權重。
(5)輸入測試數據到檢測網絡中,采用步驟(4)得到的權重進行檢測。
(6)輸出檢測圖像,得到缺陷位置及準確度。
將YOLOv5各個大小模型、YOLOv3、YOLOv4和YOLOv5m_modify 網絡對鋼材表面缺陷數據集進行訓練和檢測,采用召回率(R)、平均精確度(mAP)值與檢測速度3個指標進行評估。
本文所有實驗都在三江人工智能與機器人研究院的機器上進行。設備選用python3.9 和pytorch作為深度學習庫,顯卡型號為QTX5000,采用cuda11.1 與cudnn8.4 作為訓練加速工具。網絡輸入的圖像大小為200 × 200,并將固定的均值和方差進行歸一化處理,通過隨機梯度下降法更新權重。其中,在訓練過程中批量batch size 設為32,學習率為0.001,訓練次數epoch設為300。
本實驗采用He 等[21]制作的鋼表面缺陷NEUDET 數據集,該數據集收集了熱軋鋼帶的6 種典型表面缺陷,即軋制氧化皮(RS)、斑塊(PA)、開裂(CR)、點蝕表面(PS)、內含物(IN)和劃痕(SC)。該數據庫包括6 種不同類型的典型表面缺陷,每一類缺陷包含300 個樣本,共1800 個灰度圖像。對于缺陷檢測任務,數據集提供了注釋,指示每個圖像中缺陷的類別和位置。由于數據集圖片太少,且圖像在類間差距不夠明顯以及類內差距過大,本文對所用圖像進行了數據增強,將同類的圖像進行拼接、旋轉、合二為一變成新的特征圖等操作,來增加訓練集數量和淡化類內差距,增加類間差距。但是在拼接與合二為一過程中,會形成新的圖像,仍需要用標注工具labelimg 進行缺陷標注。增強后的數據集達到了3000 張,將其中2400 張作為訓練集,將600張作為測試集,數據集改動如圖12所示。

圖12 數據增強操作
數據集制作采用VOC2007[22]數據集的樣式進行處理,針對上述數據增強的操作,對新制作的圖片進行編號繼而使用標注軟件進行缺陷的類別與位置的標注,生成新的XML[22]腳本文件,之后編寫Python腳本程序將已經標注好的數據加入原本數據集中集體轉換成TXT文件格式用于訓練。
為了驗證YOLOv5m_ modify 算法的性能,采用平均精準度(mAP)、召回率(R)和單張圖片檢測時間指標對算法進行評估[23]。其中,mAP是對所有類別的平均精度(AP)求取均值后獲得。精確度(P)、R、錯誤率(E)、AP、mAP分別表示為:


其中:TP表示檢測結果為正的正樣本,TN表示檢測結果為負的負樣本,FP表示被檢測為正的負樣本,FN表示被檢測為負的正樣本。
另外,本文統計了實驗過程中的時間,以檢驗模型的檢測效率。
在完成網絡訓練后,將改進模型與YOLOv3、YOLOv4、YOLOv5 結構進行對比,設置IOU為0.35,實驗結果見表1。

表1 整體網絡性能對比
表1 中的網絡性能指標通過mAP、R、檢測速度進行評估,mAP為由各類缺陷類型AP之和除以6 種不同類型的表面缺陷總數量得到。
分析表1可知,YOLOv5所有模型的mAP和R均明顯優于YOLOv3和YOLOv4。至于檢測時間降低,可能是由模型結構大小和數據集的數量問題所導致,在0.01 s精度的基礎上,時間因素可以忽略。因此,本文基于YOLOv5 進行改進的思路是正確的。同時,在YOLOv5 的4 種模型中,盡管YOLOv5s 的mAP和R表現最好,但相比另外3 種模型相差不大,且其時間效率沒有優勢。因此,綜合考慮,本文選擇模型YOLOv5m進行改進的方案是最合適的。
由表1可知,本文改進算法YOLOv5m-modify的mAP達到了95.50%,相對比于YOLOv3、YOLOv4、YOLOv5m這3種模型,分別提高了32.02%、36.74%、15.40%,且總召回率為86.4%,相比于其他算法,提高了10%~20%。此外,從統計的單張圖片檢測時間可知,本文算法檢測時間為0.037 s,雖然較YOLOv5m 和YOLOv5l,分 別 增 加 了0.023 s 和0.013 s,但明顯優于YOLOv5s 和YOLOv5x,在準確度和召回率都有很大提高的情況下,時間效率因素是可以接受的。綜合來看,本文改進算法的實驗效果是很明顯的。
在訓練時,新增了3個特征提取層,且將圖片進行融合,得到更大的特征圖,使提取特征更加精確,目的是讓精確度增加。
為了明確改進算法中增長的mAP是由哪個改進因素貢獻的,對此進行了消融實驗,實驗結果見表2。其中,優化模型1 針對的是anchor 優化,優化模型2 對應檢測層數增加,改進3 為后續檢測階段代碼中使用借鑒YOLT分割檢測方法的結果。

表2 消融實驗結果
由表2 可知,訓練時增加了3 個特征提取層,會造成檢測時間增加,但是檢測的準確度也相應得到了提升,針對缺陷小目標會更精確地提取。檢測時,由于采用了YOLT 算法進行檢測,將輸入圖片進行分割成N份,再進行N次檢測,會大大增加檢測時間,導致了檢測時間的延長。對于更細微的缺陷在一張大圖直接檢測時有很大概率會被漏檢,但將圖分為N份進行分別檢測,再融合進行NMS 操作,去掉重復的框,可提升正確檢測缺陷的概率,且更容易使工作人員進行分辨。
利用改進網絡對隨機選取鋼材表面缺陷圖像進行檢測,其檢測效果如圖13 所示。其中,缺陷的位置由矩形框標記,針對不同類型的缺陷采用了不同顏色的矩形框,而且在矩形檢測框的左上角生成了每種缺陷被檢測到的概率,由圖13 可知,除了抓痕的檢測準確率在0.6~0.9之間外,其余的準確率都很高。由此可知,改進網絡可較好地檢測到缺陷的位置與類型,說明網絡有較好地檢測能力,且重復檢測框大幅度減少,這說明引入YOLT 算法是成功的。

圖13 金屬表面缺陷檢測圖
傳統的金屬表面缺陷檢測由于過于依賴人工檢測的準確性,在進行人工檢測時若出現漏檢及誤檢操作會使產品的質量和安全性大打折扣,不僅浪費原材料還會造成不必要的經濟損失,為此在YOLOv5m網絡結構的基礎上,通過增加特征提取層和采用YOLT 算法的方式對輸入圖像進行特征提取,來提高準確度。通過anchor box個數K與IOU的關系計算出項目適合的先驗框,增加了3 種更小尺寸的檢測框,用來檢測到經過融合得到的大圖中更細微的缺陷。針對訓練數據太少的情況,做了數據增強。實驗結果表明,改進算法的mAP比改進前YOLOv5m 結構提高了15.40%,雖然檢測時間稍有增加,但是準確度與召回率的增加彌補了這一點,使速度與精度保持了平衡。綜上所述,改進算法具有更強的準確性和實時性,更適合用于實時檢測。下一步準備對算法進行優化,使檢測時間再進行縮小達到更強的實時性。