孫澤強,陳炳才,2*,崔曉博,王 磊,陸雅諾
(1.新疆師范大學 計算機科學技術學院,烏魯木齊 830054;2.大連理工大學 計算機科學與技術學院,遼寧 大連 116024)
目標檢測作為計算機視覺中最基本、最具挑戰性的任務之一,旨在找出圖像中特定的目標,并對目標進行定位和分類,在工業質檢、視頻監控、無人駕駛等眾多領域應用廣泛[1]。帶鋼產品是廣泛應用于我國國民經濟與鋼鐵工業的重要產品,衡量材料效率的主要判定依據是材料的性能、幾何尺寸和表面質量。目前冷軋帶鋼產品在材料與尺寸方面已經基本能夠滿足要求,但表面質量問題往往成為主要的影響因素[2]。近些年來,各種基礎設施建設對于帶鋼的精度需求越來越高,帶鋼受到結構和制作工藝影響可能會出現多種表面缺陷,如:夾雜、斑塊、麻點、壓入氧化皮和劃痕等,這些缺陷輕則減少帶鋼的使用壽命和用途,重則可能會影響建筑物的建設安全導致建筑事故。因此本文希望通過計算機視覺目標檢測的方法快速有效地檢測出帶鋼表面的缺陷,進而能分離出有問題的產品。
目前的目標檢測算法主要分為兩類[3]:第一類是以RCNN(Regions with Convolutional Neural Network features)為代表的兩階段目標檢測算法,例如R-CNN 算法[4]、Fast R-CNN算法[5]、Faster R-CNN 算法[6]、Mask R-CNN 算法[7]。兩階段目標檢測算法需要先提取目標候選框,也就是目標位置,然后再對候選框做分類與回歸。另一類是以YOLO(You Look Only Once)算法為代表的一階段目標檢測算法,例如OverFeat 算法[8]、YOLO 算法[9]、YOLOv2 算法[10]、YOLOv3 算法[11]和SSD(Single Shot multibox Detector)算法[12]。一階段算法不需要預測區域建議框的網絡(Region Proposal Network,RPN),直接輸入整張圖,直接在最后的檢測頭上預測邊界框的類別和位置,所以檢測速度較快,但是檢測精度相對較低。
卷積神經網絡和深度學習的引入使缺陷檢測實現了高準確度和高效率,逐漸成為缺陷檢測的主要研究方向。文獻[13]在ResNet 中加入了軟注意力機制,達到了很高的圖像分類精度。而在目標檢測方面,文獻[14]采用了改進后的Mask R-CNN 算法對帶鋼表面進行檢測,并使用K-meansⅡ聚類算法改進RPN 的錨框生成方法,使精度有很大的提升,但是在速度上仍有很大的欠缺,每秒傳輸幀數(Frames Per Second,FPS)為5.9。文獻[15]調整YOLOv3 網絡結構并新增一層大尺度檢測層,使小目標的帶鋼缺陷檢測更準確。文獻[16]中對YOLOv5 算法運用雙向特征金字塔進行多尺度特征融合,采用指數線性單元函數作為激活函數,能加快網絡訓練收斂速度,提升算法魯棒性。文獻[17]在骨干網絡中增加了一種多尺度殘差增強模塊,并且設計了一種注意力門控結構嵌入模型,進一步提高了YOLO 框架的性能。
為進一步提高缺陷檢測的準確率,本文采用YOLOv5 算法,并在此基礎上進行改進。首先將YOLOv5 的錨框聚類算法由原來的K-means 算法改進為模糊C 均值(Fuzzy C-Means,FCM)算法,根據優化目標函數得到每個真實框對所聚類的錨框(anchor)的隸屬度,從而確定這些真實框的類別以達到聚類anchor 的目的;然后改進YOLOv5 原有的網絡結構,加入三層頻域通道注意力FcaNet(Frequency channel attention Network)[18]和更換解耦頭,提高對帶鋼表面缺陷檢測的準確率;最后在劃分好的測試集NEU-DET 上進行驗證,得到更好的實驗結果。
YOLO 算法是一種單階段目標檢測算法,檢測速度相較于R-CNN 算法更快。YOLO 算法的核心思想是將目標檢測問題變成一個回歸問題,在經過特征提取以及特征融合后直接回歸出目標的位置以及所屬的類別,使得計算資源和檢測時間成本大幅降低。YOLO 系列算法經過不斷的創新和改進,自YOLOv1 算法提出后,YOLOv2 算法加入K-means 聚類錨框,大大提高了檢測的召回率;YOLOv3 算法首次采用Darknet53 的骨干網絡,達到了更好的檢測精度;YOLOv4 算法 將Backbone 改進為CSPDarknet53(Cross Stage Partial Darknet53)結構,并且采用PANet(Path Aggregation Network)特征融合的方法;YOLOv5 在YOLOv4 的基礎上加入了一些改進的trick,根據網絡深度和寬度大小的不同,依次有YOLOv5s、YOLOv5m、YOLOv5l 和YOLOv5x 版本,版本越高,檢測精度越高,速度越慢。
YOLOv5 網絡架構主要分為輸入端、Backbone 骨干網絡、Neck 特征融合和YOLO 檢測頭,YOLOv5 的輸入端采用Mosaic 數據增強,它的基本操作是將隨機選取的4 張圖片進行隨機裁剪,然后將其拼接成指定分辨率的圖像,以達到數據增強的目的;同時,在圖像批量輸入網絡前,將數據集中的真實框進行聚類,YOLOv5 算法采用K-means 聚類錨框,之后計算錨框和真實框的差距,進行反向傳播。
Backbone 骨干網絡首先采用Focus 切片操作,將3 通道的圖片切片變成12 通道,接著經過一層帶有32 個卷積核的卷積層,變成32 通道,Focus 切片示意圖如圖1 所示;然后進入CSPDarknet53 骨干網絡,借鑒了跨階段局部網絡CSPNet(Cross Stage Partial Network)[19],其在ResNetXt 中證明了基數相較于網絡寬度和深度更加有效,可以顯著減少參數和計算量,并提升速度。

圖1 Focus切片示意圖Fig.1 Schematic diagram of Focus section
Neck 由特征金字塔(Feature Pyramid Network,FPN)[20]和路徑聚合網絡(Path Aggregation Network,PAN)[21]組成。FPN將Backbone 提取的深層特征上采樣與淺層信息逐元素相加,從而構建尺寸不同的特征金字塔結構,同時還利用了低層特征高分辨率和高層特征高語義信息。PAN 在FPN 增強語義信息的同時,又添加了一條自底向上的金字塔結構,以獲取更多的位置信息,PAN 與FPN 結合就可以獲取豐富的特征信息。YOLOv5 特征融合部分如圖2 所示。
Head 是YOLOv5 的網絡檢測頭部分,如圖2 所示,在特征融合部分之后產生三個檢測層,輸入分辨率為640×640 的圖像,產生20×20,40×40 和80×80 的預測結果,即分別負責預測大、中、小目標,同時每個檢測層上有3 個錨框進行檢測,檢測結果包括目標的定位信息(x,y,w,h)、對象信息(obj)和類別信息(cls)。

圖2 YOLOv5特征融合示意圖Fig.2 YOLOv5 feature fusion diagram
YOLOv5 算法采用PAN 的特征融合方式,提取多個不同尺度的檢測特征,提高了算法對不同大小目標的檢測能力,如圖3 所示,將最終輸出的特征分成S×S的網格,虛線框代表需要調整的anchor,anchor 的寬度和高度分別是pw和ph,預測相對錨框的偏移量是tw和th,由式(1)可以得到預測框bw、bh、bx和by。


圖3 預測框Fig.3 Prediction box
YOLOv5 算法的損失函數包含置信度損失lobj、分類損失lcls以及目標框定位損失lbox,如式(2)所示:

置信度損失lobj的計算如式(3)所示:

其中:K表示圖像的劃分網格系數;M表示表示每個網格所預測的預測框的個數;Ci為標簽值;為預測值;λnoobj為懲罰權重系數。
目標分類損失lcls的計算如式(4)所示:

目標定位損失lbox采用完全交并比(Complete-IoU,CIoU)損失,如式(5)~(7)所示,CIOU 損失考慮到了3 個幾何因素,即預測框和真實框之間的重疊面積、預測框和真實框的中心點距離和長寬比。

其中:b是預測框的中心點;bgt是真實框的中心點;ρ表示歐氏距離;c表示預測框和真實框所構成的外接矩形對角線長度;α表示權重系數;交并比IoU(Intersection over Union)為預測框與真實框的交集和并集的比值;v表示預測框和真實框之間的長寬比差異,如果一致,則v=0,且差距越大,v也越大。
原始YOLOv5 算法采用K-means 算法聚類anchor,數據集中有很多目標的標注框,將這些標注框的寬和高進行聚類,就會形成大小不同的先驗框,YOLOv5 在特征融合后產生3 個檢測層,分別對應大、中、小尺度的Feature map,負責檢測大、中、小目標,最后采用交并比(IoU)評價聚類結果。
由于K-means 聚類算法是一種硬聚類、基于劃分的聚類算法,一般樣本點之間的相似度是基于歐氏距離來衡量,樣本點之間的歐氏距離越小,相似度就越大,是一種硬劃分,將每個待聚類的對象嚴格地劃分到某類,具有“非此即彼”的性質。文獻[22]提出超像素的快速FCM 聚類算法應用于彩色圖像分割,使得聚類算法更快更穩定。該算法通過優化目標函數得到每個樣本點對聚類中心點的隸屬度,隸屬度越大樣本所屬該類的可能性越大。最終的聚類損失函數可以表示為式(8),其中m>1,用于控制聚類結果的模糊程度,一般取值為2。

FCM 聚類算法就是不斷迭代計算隸屬度uij和簇中心cj,直到達到最優。隸屬度uij和簇中心cj如式(9)所示:

迭代更新的終止條件如式(10)所示:

其中:k是迭代的步數;ε是誤差閾值,當迭代到隸屬度不再發生較大變化的時候,說明已經達到了最優的狀態。
在計算機視覺信息處理過程中引入注意力機制,不僅可以將有限的計算資源分配給重要的目標,而且能夠產生符合人類視覺認知要求的結果[23]。文獻[24]在U-Net 中采用四重注意力,使用四個分支捕獲通道和空間位置之間的內部和跨維度交互。通道注意力能給模型精度帶來較明顯的提升,如SENet(Squeeze-and-Excitation Network)[25],但由于計算開銷有限,通道注意方法的核心步驟是對每個通道計算一個標量,同時采用全局平均池化(Global Average Pooling,GAP),因其簡單性和高效性而成為深度學習領域的標準選擇。
在 ICCV(IEEE International Conference on Computer Vision)2021 中收錄的FcaNet[18]中,采用的是頻域通道注意力的思想,它從不同的角度出發,將通道表示問題視為一個使用頻率分析的壓縮過程,而不僅僅只是一個標量,在頻率分析的基礎上,從數學角度證明了傳統的全局平均池化(GAP)其實是頻域特征分解的一種特例。因此,FcaNet 把通道的標量表示看作是一個壓縮問題,即通道的信息要用標量進行壓縮編碼,同時盡量保持整個通道的表示能力。
2.2.1 離散余弦變換
離散余弦變換(Discrete Cosine Transform,DCT)具有較強的能量壓縮特性,可以實現高質量的數據壓縮比,通常典型的二維DCT[26]的基函數是式(11):

二維DCT 可以寫成式(12):

其中:i∈{ 0,1,…,H-1} ;j∈{0,1,…,W-1};f2D∈ RH×W為二維DCT 頻譜;x2D∈ RH×W為輸入;H為x2D的高度;W是x2D的寬度。
2.2.2 多譜通道注意力模塊
在FcaNet 中給出了一個定理并進行了數學證明,定理如下:全局平均池化GAP 是二維DCT 的一種特殊情況,其結果與二維DCT 的最低頻率分量成正比。基于上面的定理可以看出,在通道注意機力SENet 中使用GAP 意味著只保留了最低頻率的信息,而來自其他頻率的分量將會被丟棄,而其他頻率也可能包含一些有用的特征,如圖4 所示。

圖4 SENet通道注意力Fig.4 SENet channel attention
多譜通道注意力如圖5 所示,首先,沿著通道維度將輸入特征X分成許多部分,表示[X0,X1,…,Xn-1],其 中:Xi∈RC′×H×W,i∈{0,1,…,n-1},C′=C/n,C可被n整除。對每個部分分配相應的二維DCT 頻率分量,由分配的DCT 頻率分量得到每個部分的Freq向量,如式(13):

圖5 多譜通道注意力Fig.5 Multi-spectral channel attention module

其中:i∈{ 0,1,…,n-1} ;[ui,vi]是與Xi相對應的頻率分量的二維指數,經過壓縮后,Freqi變為C′維的向量,整個壓縮后的向量可以通過拼接獲得式(14),其中Freq∈ RC是獲取到的多譜向量。

綜上,整個多譜通道注意力框架可以被寫成如式(15),由式(14)、(15)可以看出,本文算法將原來的全局平均池化GAP 方法推廣到一個具有多個頻率分量的框架,這樣可以有效地豐富壓縮后的信道信息,便于表示。

YOLOX[27]使用了解耦頭的方法,能加快收斂速度,提升檢測精度。在目標檢測中,分類和回歸任務之間的沖突眾所周知[28],因此用于分類和定位任務的解耦頭在大多數一階段和二階段目標檢測算法中應用廣泛,然而,原始YOLOv5 算法依舊使用耦合頭,即分類和回歸任務不分離,如圖3 所示,特征融合后直接經過一層卷積得到最終檢測頭,檢測頭耦合了分類、定位和置信度的檢測。而解耦頭如圖6 所示,,其中nanchor為anchor個數,經過1×1卷積后,通道維數減小至256;經過兩個平行的3×3卷積層,其中一個用于分類任務,另一個用于定位和置信度任務;再經過兩個分別用于定位和置信度檢測的平行的1×1 卷積,經過上述操作,分類、定位和置信度檢測使用不同的檢測層,與YOLOX 算法不同,本文并沒有采用基于anchor-free 的檢測機制,還是采用基于anchor 的檢測,所以最后產生的檢測結果有9個anchor,最終的實驗也表明基于anchor的YOLOv5算法比YOLOX的檢測精度更高。

圖6 解耦頭示意圖Fig.6 Schematic diagram of decoupled head
本文采用的東北大學發布的NEU-DET 數據集是熱軋帶鋼表面缺陷的經典數據集,收集了6 種常見的表面缺陷,包括夾雜(Inclusion,In)、劃痕(Scratches,Sc)、壓入氧化皮(Rolled-in Scale,Rs)、裂紋(Crazing,Cr)、麻點(Pitted Surface,Ps)和斑塊(Patches,Pa),每種缺陷300 張,圖像尺寸為200×200。由于裂紋類圖像缺陷不明顯,模糊圖像不利于檢測任務,刪去這類圖像缺陷,因此數據集有1 500 張缺陷圖像,將缺陷圖像按照8∶2 的比例隨機劃分成訓練集和測試集,因此訓練集有1 200 張,測試集有300 張,各類帶鋼缺陷如圖7所示。

圖7 各類帶鋼缺陷Fig.7 Schematic diagram of strip defects
原始的YOLOv5 算法的anchor 框是在COCO(COmmon objects in COntext)數據集上聚類得到的,由于COCO 數據集和帶鋼表面缺陷數據集的真實框不同,因此需要重新聚類,在YOLOv5 算法中,需要生成9 組不同的anchor,所以設置生成的聚類中心數為9,通過K-means 算法和FCM 算法生成9個anchor,最后得到每個樣本點和聚類中心交并比的最大值的平均,作為評價最終聚類結果的標準,計算公式如式(16)所示:

其中:box為預測框;cen為標記框。
通過FCM 算法生成anchor 框,代替原來K-means 聚類算法,最終FCM 生成的9 個anchor 分別為[73,121,104,248,183,160],[287,267,597,89,155,410],[103,608,289,593,593,612],按照式(16)計算得到的準確率為68.15%,而通過K-means 算法聚類得到的準確率為66.56%,所以FCM 的聚類結果更好,兩種算法聚類后的散點圖對比如圖8 所示,其中星號代表該類的聚類中心。

圖8 K-means和FCM算法聚類后散點圖對比Fig.8 Comparison of scatter plots after clustering between K-means and FCM algorithms
本文實驗是在ubuntu16.04.10 版本的操作系統下完成的,采用的硬件配置為:Intel Xeon CPU E5-2680 v4 @2.40GH,NVIDIA GeForce RTX3080;軟件環境為CUDA10.2和CUDNN9.1;開發框架為PyTorch;編程語言為Python;預訓練模型“yolov5-x.pt”,batch size 為8,一共訓練100 個epochs。
目標檢測領域通常使用召回率(Recall)、精準率(Precision)和平均精度均值(mean Average Precision,mAP)對算法性能進行評價。精準率用于描述檢測為正樣本的數量占所有的樣本的比例;召回率用于描述檢測為正樣本的數量占標記為正樣本的數量的比例。計算公式如(17)所示:

其中:TP(True Positive)表示標記為正樣本檢測也為正樣本的數量;FP(False Positive)表示標記為假樣本但檢測為正樣本的數量,即檢測錯誤的數量;FN(False Negative)表示將樣本正類預測為負類的個數,即遺漏檢測的個數。本文采用mAP 作為評價指標,平均精度(Average Precision,AP)為PR曲線下的面積,mAP 衡量全部類別下的AP 的均值,N為類別數,計算公式如(19)所示:

IFPS用來衡量網絡的檢測速度,計算公式如式(20)所示:

其中:NumFigure表示檢測的圖像數量;TotalTime表示檢測所用的總時長。
為驗證本文算法的有效性,設計三組實驗,對FCM 算法和解耦頭進行分析。實驗結果如表1 所示,三個實驗均基于YOLOv5 算法進行改進,實驗1 不采用任何改進策略,使用Kmeans 算法聚類先驗框;實驗2 使用FCM 算法進行先驗框的聚類,最終的mAP 值提升了1.6 個百分點,檢測速度相差無幾,因為網絡結構沒有變化,只是改變先驗框的聚類方式,模糊聚類算法并不會嵌入網絡將聚類得好的先驗框加入網絡進行訓練,因此不會增加額外的參數量;實驗3 是在實驗2 的基礎上將檢測頭替換為解耦頭,將分類任務和定位任務解耦合之后,由于增加額外的卷積層,mAP 值又提升了1.0 個百分點,但是FPS 下降5.14 個百分點。

表1 不同改進算法的對比實驗結果Tab.1 Comparative experimental results of different improved algotithms
表2 是在前兩個改進點的基礎上加入不同的注意力機制進行對比的結果,圖9 是加入不同注意力機制使用Grad_cam 在缺陷圖片上的熱力圖展示結果。如表2 所示,加入SE(Squeeze-and-excitation)、BAM(Bottleneck Attention Module)[29]、CBAM(Convolutional Block Attention Module)[30]、CCA(Criss-Cross Attention)[31]、CA(Coordinate Attention)[32]后mAP 均有一定下降;而加入Non-Local[33]、DA(Dual Attention)[34]、FcaNet 后mAP 提高較明顯,相較于改進2,分別提高1.2、1.3 和3.0 個百分點,檢測速度除Non-Local 提升明顯外,DA 和FcaNet 基本不變。DA 是從空間和通道兩個分支并行地構建特征圖的相關性矩陣;FcaNet 采用頻域通道注意力,將通道看作頻率壓縮的過程,兩者都達到了不錯的檢測精度。對增加注意力機制后的額外參數量進行分析,加入BAM 的額外參數量最少,但是mAP 只有81.4%;加入FcaNet相對其他注意力模塊所增加的額外參數量較少,而mAP 提升較明顯,達到85.5%。從熱力圖對比結果看出,對于“劃痕”缺陷,加入FcaNet 后,對缺陷的檢測效果更好,誤檢的目標更少,在可視化的角度證明了FcaNet 在缺陷檢測上效果更優。

圖9 加入不同注意力模塊熱力圖對比結果Fig.9 Heat map comparison results after adding different attention modules

表2 加入不同注意力模塊對比實驗結果Tab.2 Comparison experimental results by adding different attention modules
表3 是不同算法在NEUDET 數據集上的對比結果,其中文獻[14]采用改進的Mask R-CNN 兩階段算法,檢測精度達到96%,但是檢測速度只有5.90 FPS,雖然檢測精度很高,但是難以滿足檢測的實時性要求;文獻[15]采用改進的YOLOv3 算法,對于5 類缺陷的檢測精度達到82.2%,還可以進一步提升;Faster R-CNN 算法和SSD 算法的特征提取網絡均為Resnet50,是目前檢測性能較好的Backbone。對比不同的算法檢測結果可以發現:1)相較于原始的YOLOv5 算法,改進的YOLOv5 算法在各類缺陷的檢測精度上均有明顯提升,尤其是針對檢測效果不佳的壓入氧化皮缺陷,達到了72.7%,整體mAP 相較于原始YOLOv5 提升了4.2 個百分點,檢測速度下降不多。2)改進后的YOLOv5 算法的檢測速度低于文獻[15]算法、原始YOLOv3 和SSD,而檢測精度更高。主要因為實驗使用的YOLOv5-x 版本,是YOLOv5 所有版本中網絡深度和寬度最大的結構,因此在檢測速度上未能勝過SSD 和YOLOv3 算法。YOLOv5 也使用解耦頭來進行檢測,但是采用的是anchor-free 的檢測方法,所以在帶鋼表面缺陷檢測效果并不佳。

表3 不同算法檢測性能的對比結果Tab.3 Comparison results of detection performance of different algorithms
本文針對帶鋼表面缺陷數據集中的五類不同的缺陷進行高精度檢測的問題,提出一種改進的YOLOv5 算法,首先使用FCM 算法代替K-means 算法對先驗框進行聚類,接著采用解耦的檢測頭,從而分離分類和定位任務,不同的任務使用不同的卷積層,最后加入了FcaNet 通道注意力模塊,使用多譜通道注意力機制提取到更有效的特征信息,最后實驗結果表明,本文提出的改進方法能夠準確、快速地檢測出不同缺陷的帶鋼圖像。本文方法在Nvidia RTX 3080 測試條件下mAP 達到0.855,速度為27.71 FPS,實現了高精度的檢測,檢測精度高于通用目標檢測模型,檢測速度還有待提升,該方法為帶鋼的缺陷檢測提供了有益的幫助。下一步將在嵌入式設備上進行模型的性能改進,進一步縮小網絡結構,以便在移動端實時地檢測帶鋼缺陷。