薛 陽 葉曉康* 孫 越 洪 俊 萬軼倫
(上海電力大學自動化工程學院 上海 200090) 2(國網上海浦東供電公司 上海 200122)
現代社會對于汽車噴漆的需求越來越高,人工進行噴漆的方法存在著噴涂不均勻及對人體危害大的問題,因此用自動化設備代替人工工作具有重要的實際意義,其首要問題即是對缺陷區域的識別和定位。傳統圖像識別方法一般有如下兩種,一種是基于灰度和顏色的信息對圖像二值化分割或利用邊緣檢測算法對圖像進行分割,再結合數學形態學等算法對圖像進行特征提取,另一種是人工設計特征(如SIFT[1]、HOG[2]、Haar[3])結合分類器(如SVM[4]、Adaboost[5])的方法。文獻[6-7]應用SIFT特征結合分類器以及邊緣檢測算法分別對中厚板表面缺陷的檢測和車標進行識別。文獻[8]通過局部對比度增強算法對灰度圖像進行二值化分割的方法對光學元件損失進行檢測。文獻[9]通過背景平滑濾波器,利用局部灰度和梯度變化信息自適應調整不同特征區域的平滑程度,對原圖像平滑得到背景圖像,通過對原圖像和背景圖像的差分圖像閾值分割對鋼軌表面缺陷檢測。傳統的基于灰度、顏色和邊緣信息的方法容易受到背景的干擾,而人工設計特征的方法復雜,對設計者的經驗要求高。近幾年,深度學習飛速發展,使得特征提取和匹配的工作得以簡化。文獻[10]基于Faster-RCNN并修改了錨框生成規則來對零件表面不同缺陷進行檢測,文獻[11]通過圖像融合的方法對樣本進行擴充以訓練深度網絡來進行電網異物的檢測。文獻[11-12]以Faster-RCNN算法為基礎,修改了非極大值抑制算法實現了對于復雜條件下電力系統多目標的識別和故障檢測。當前目標檢測領域常用的算法包括Faster-RCNN算法、YOLO(You Only Look Once,一步檢測)系列算法以及SSD(Single Shot Multi-box Detector,單次多框檢測器)算法。YOLO系列算法和SSD算法改進了檢測的速度,同時也導致檢測的精度有不同程度的下降[13-16]。本文目標識別任務對精度要求較高,而對實時性檢測要求相對較低,因此選取了檢測精度更高的Faster-RCNN算法。原始的Faster-RCN算法雖然在一般的目標檢測問題上取得了不錯的精度,但是對于小區域目標的檢測精度往往不理想,因此,對原始Faster-RCNN結構進行改進,以滿足在對于小目標區域的檢測要求。
本文的主要工作是:1) 引入了多尺度檢測,使得網絡可以同時利用高層和低層的特征,從而加強對于小區域的檢測能力。2) 通過聚類算法確定的錨框來取代原始網絡中固定的錨框設定,提高網絡的收斂速度和檢測速度。
Faster-RCNN是在Fast-RCNN基礎上提出用區域推薦網絡(Region Proposal Network,RPN)候選框生成算法取代Select search算法,使得目標檢測速度大大提高。Faster-RCNN算法主要由卷積神經網絡(Convolutional Neural Network,CNN)、RPN,以及一個基于感興趣區域(Region-of-Interest,ROI)的分類器三部分組成。卷積神經網絡用于對輸入圖像的特征進行提取,區域推薦網絡則用于生成候選區域。Faster R-CNN算法原理如圖1所示,圖像將首先經過一個卷積神經網絡提取特征圖譜,常用的提取特征的卷積神經網絡有ZF、VGG-16、ResNet等。特征提取網絡包含Conv層(卷積層)、ReLU激活函數層以及Pooling層(池化層)。Pooling層會縮小輸入圖像的尺寸,常見的有Max pooling和Average pooling兩種池化方式,每經過一次池化操作,輸出層的特征圖的大小為輸入圖的1/2,本文采用的VGG-16網絡共有4個池化層,因此最后輸出的特征圖為原圖的1/16。ReLU為激活函數。Conv層提取的特征圖將作為RPN網絡和分類回歸網絡的輸入。RPN網絡對輸入的圖像進行識別,并生成一系列不同大小的建議區域(Proposal Region),ROI池化層的作用是將輸入的不同尺寸的建議區域的大小固定,然后通過全連接層輸入到后面的分類回歸網絡。分類層的作用是判定建議區域的類別,邊界框回歸層用來進行邊框回歸運算,獲取更精確的位置[14]。

圖1 Faster-RCNN算法結構
RPN網絡是Faster-RCNN算法結構的核心,其結構圖如圖2所示,卷積層輸出的特征圖輸入到RPN網絡后,網絡首先將特征圖上的每一個點映射到原圖上的對應區域,并按照預定的參數生成一定數量的錨框(archor)。以原始Faster-RCNN所采用的參數為例說明錨框生成過程,卷積層輸出的特征圖尺寸大小為原圖的1/16,因此特征圖譜中每個像素點均可映射到原圖中16×16像素的區域。對每個特征圖譜中的像素在原圖中的對應的16×16像素的區域,按3種不同比例(如0.5、1,2)改變其長寬比,并分別3種不同的放大倍數(如8、16、32)進行放大,最終在每個錨點處生成9個不同形狀和尺寸的錨框。圖3為生成錨框示意圖。在篩選掉一部分錨框后,會按如下規則將剩余錨框標記為正樣本、負樣本和不關注樣本:當錨框與原圖中真實框(ground truth box)的交疊面積與兩者面積之和之比大于0.7時,將錨框標記為正樣本,標簽為1,當錨框與原圖中真實框的交疊面積與兩者面積之和之比小于0.7時,將錨框標記為負樣本,標簽為0,否則將其標記為不關注樣本,標簽為-1,不關注樣本在訓練時不參與網絡的訓練。同時用一個3×3的滑動窗口作用于特征圖生成一個256維長度的特征,然后通過兩個1×1的卷積層分別生成分類層和回歸層,從而進行下一步的分類和回歸運算。

圖2 RPN網絡結構

(a) 同一尺寸對應的3種長寬比
RPN的訓練采用端對端方式,采用梯度下降算法對RPN網絡進行反向傳播訓練,損失函數如下:
(1)

(2)

(3)
對于邊界框回歸,采用的算法為:
(4)

在一個多層卷積神經網絡中,隨著網絡深度不斷增加,高層特征忽略的細節的信息越多。原始Faster-RCNN的方法中,候選區域由候選區域生成網絡生成,候選區域的特征僅由最后一個卷積層經過池化操作得到,利用高層特征對小目標進行檢測會存在比較大的問題。受到金字塔結構[19]的啟發,本文引入了多尺度檢測,在利用最后一層卷積層輸出的特征圖來生成候選區域的基礎上,同時引入其他卷積層的輸出來生成候選區域。具體流程如圖4所示,原始輸入圖片經過一個卷積神經網絡提取特征,將不同層提取出的多個不同尺度的特征圖送入各自RPN生成候選區。為了研究不同尺度的特征圖對檢測速度的影響,對于VGG-16網絡,將conv1_2(經第1層卷積層進行2次卷積操作后輸出的特征圖,下同)、conv2_2、conv3_3、conv4_3、conv5_3這5層的輸出分別輸入到RPN網絡中來進行檢測,統計1 000幅測試圖像的平均檢測時間,其結果如表1所示,表中conv1_2用conv1表示,其他卷積層的表述類似。

表1 使用不同尺度特征檢測時間 單位:s

圖4 多尺度Faster-RCNN網絡結構
原始Faster-RCNN算法的RPN中錨框(archor)是根據高層特征而設定的,不適用于檢測小尺寸區域。針對此問題,通過聚類算法來分析圖像中檢測目標的尺度特征來確定錨框。目前廣泛采用的聚類算法有K-means系列算法和均值漂移聚類等。其中K均值聚類算法因算法簡單高效等特點使用最為廣泛,本文選用K-means++算法,按照如下的思想選取k個初始聚類中心:首先通過隨機的方法選取第一個初始聚類中心,在選取下一個聚類中心點前,計算數據集中每個樣本點與當前選中的聚類中心的最短距離,距離越遠的點被選中的概率越大,然后通過輪盤賭法選出下一個聚類中心點,直到選出k個初始聚類中心點。其克服了初始聚類中心隨機性,顯著地提高了聚類的效果。算法把輸入的點數據集分類為k個聚類,使數據集中點都劃分到距離其最近的聚類中心所在的類中,分類時使用歐氏距離作為衡量距離的標準。歐氏距離表達式為:
(5)
式中:x、y是數據集中的任意兩個樣本點,i為樣本點維度的索引,n為樣本點維度。
算法步驟流程如圖5所示。

圖5 聚類算法流程
每個樣本成為下一個聚類中心的概率用下式計算:
(6)
式中:x表示數據集中任意一個樣本點;D(x)表示該樣本點與當前聚類中心的最短距離。
重新計算各個類的聚類中心計算方法為:
(7)
式中:i為聚類中心的索引,等式左側ci為更新后的聚類中心,右側ci為更新前的聚類中心,x是屬于以ci為聚類中心點的類中的樣本點。
原始Faster-RCNN算法特征圖上每個位置生成9個錨框,因此選定聚類的數目k=9。將缺陷區域按照預設參數自動標記為“B”(大)、“M”(中)、“S”(小),讀取標簽為“S”的標注框的寬和高數據共1 000多個數據點作為數據集,算法總用時為30.20 s,聚類結果如圖6所示,圖中三角形代表每個類的聚類中心坐標。通過聚類得到的9個聚類中心將作為低層特征對應的RPN網絡錨框初始的寬和高。

圖6 聚類結果
圖7為該檢測算法的功能流程,其中訓練和檢測部分大致相同,訓練部分需要計算誤差函數來更新模型參數,檢測部分加載訓練好的模型參數輸出檢測結果。其主要包含特征提取、錨框生成、候選區域生成、邊界框回歸運算及分類4個部分。

圖7 算法功能流程
下述為各功能框的具體實現算法,部分軟件核心編程將在附件中給出。
1) VGG-16特征提取。VGG-16網絡主要結構由5個卷積層、4個池化層組成,卷積層為n×n的二維數組,將卷積層與圖像進行二維的卷積運算,對圖像的局部特征進行提取。池化層為一個2×2的二維數組,將池化層與特征圖像進行卷積運算,通過對步長和卷積方式進行設置,使輸出的特征圖像的大小為原始特征圖的0.5倍,對特征圖像的尺度進行縮小。
2) 錨框生成。將不同尺度特征圖上的每個像素點按不同的放大尺度映射到原圖中一塊區域,將此區域按照不同的長寬比例和放大尺度進行變換,特征圖上的/每個像素點的每個像素點對應k個不同大小和比例的邊界框,則為錨框。高層的特征圖錨框生成方案按照長寬比(0.5,1,2),放大尺度(8,16,32)的參數生成,最低層特征圖的錨框大小由前述聚類算法的結果確定。
3) 候選區域生成。
Step1通過一個3×3的卷積層與提取出來的特征圖做二維卷積運算,再通過兩個不同的1×1卷積層,在特征圖每個像素點處分別生成2k和4k維的向量,k為對應特征圖上每個像素點所生成的錨框的數量,2k維的向量用來預測每個錨框為前景和背景的概率得分,4k維的特征圖用來預測錨框的回歸位置偏移,進行初步的回歸運算。
Step2去除超出原圖邊界的錨框,計算剩余每個錨框與每個真實邊界框的最大的IOU(錨框與真實邊界框的重疊比例)。當IOU>0.7時,將此錨框標記為正樣本,label=1,當IOU<0.3時,將此錨框標記為負樣本,label=0,當0.3 Step3進一步對archors進行越界剔除并使用非最大值抑制算法去除掉重疊度較高的錨框,即根據概率大小為標簽為1和0的錨框進行排序,依次計算所有其他錨框與得分較大的錨框的重疊比例,當重疊比例大于一定閾值時,將該錨框去除。 4) 候選框分類。從樣本中隨機選擇256個archors,將256個archors按縮放比例映射到對應的特征圖上,并通過Roi池化層固定為7×7的尺度大小,將7×7的二維矩陣轉換為一維矩陣,輸入到全連接層,再通過softmax函數輸出n個結果(n為要檢測的目標的種類的個數),結果的值表示當前候選框屬于某個類別的概率,最大值表示的是預測的結果。 (1) 先做平移變換(Δx,Δy),Δx=Pwdx(P),Δy=Phdy(P),可得: (8) (9) (2) 做尺度縮放(sw,sh),sw=exp(dw(P)),sh=exp(dh(P))得: (10) (11) 可以看出,需要學習這四個變換。當候選框與真實框相差較小時,可認為這種變換是一種線性變換,可以通過線性回歸來建模對窗口進行微調,具體算法實現如下所示: 定義一組向量t=(tx,ty,tw,th),其中: (12) 輸入:候選框的坐標(Px,Py,Pw,Ph)的特征向量Φ(P)。 輸出:t*=(dx),dy(P),dw(P),dh(P))。 (13) 式中:N為候選框的總數,i為候選框的索引。利用梯度下降法使Loss趨向于0,此時的參數w即為變換參數。 硬件環境:CPU為Intel Core i5-9300H,GPU為NVIDIA GTX 1660Ti,6 GB顯存,8 GB內存。軟件環境:Windows 10,Tensorflow架構,GPU加速庫為CUDA10.1和CUDNN10.0,編程語言采用Python 3.6和Matlab 2017b。其他參數設置如下:權重衰減系數為0.000 1,學習率為0.001,BATCH_SIZE取120,動量參數為0.9,訓練最大迭代次數20 000次。樣本圖片共3 000幅,采用CMOS攝像機拍攝,分辨率為1 440×1 080,按照3∶1的比例分為訓練集和測試集。下文中VGG-16、MS-VGG16分別表示原始Faster-RCNN網絡和多尺度Faster-RCNN網絡,MS-VGG16+K-means++表示用聚類算法確定錨框的多尺度Faster-RCNN網絡。衡量指標采用“F-score”,F-score的計算方式如式(14)所示。 (14) 式中:NTP表示正確識別為目標區域的數量;NFN表示原本是目標區域但未識別的數量;NFP表示非目標區域但被識別為目標區域的數量。F的值越大,說明網絡檢測精度越高,性能越好。 為驗證本文提出的多尺度檢測方法的有效性,在數據集一致,且錨框均為原始Faster-RCNN設定的情況下,對采用不同的卷積層組合網絡比較其F-score值大小。為表述簡便,下文中卷積層的組合采用字母和數字下標的形式表示,如conv123表示表示conv1+conv2+conv3的組合。其結果如表2所示。 表2 使用不同卷積層組合的結果對比 可以看到,與原始的Faster-RCNN相比,采用多尺度檢測準確度有了顯著的提升。當多尺度檢測的卷積層數達到一定數目時,不能通過增加卷積層的數目有效地增加檢測的精度,相反會大大降低訓練及檢測的速度,綜合考慮精度和速度的要求,本文多尺度檢測選取conv2+conv4+conv5的卷積層組合。 為驗證通過聚類算法生成錨框的方法的有效性,在相同數據集且網絡結構均為上述確定卷積層組合的多尺度檢測方案的情況下,比較其與采用原始錨框設定時的F-score,結果如表3所示。可以看到,其檢測精度達到了95.39%,相較于采用原始的archor,提高了1.55%。為了研究此方法對于訓練的效率和檢測的速度的影響,對采用不同網絡的模型訓練過程中總損失函數進行分析,圖8(a)、(b)、(c)分別是使用不同網絡的訓練模型的總體損失函數(total loss)的收斂圖。通過對比可以發現相較于原始的VGG-16網絡,MS-VGG16網絡能以迭代更少的次數收斂,同時可以得到,采用K-means++聚類算法來確定錨框的方案具有更快收斂速度,由此可以提高訓練的效率。 表3 不同archors生成方法的結果對比 (a) VGG-16網絡收斂曲線 表4所示的是使用不同網絡訓練模型的時間和檢測速度,由于多尺度檢測產生了更多的候選區域,迭代一次的消耗的時間相對增多,導致整體訓練時間變長,同時可以看出使用K-means++算法確定archors的方法使得訓練效率和檢測速度得到了較為明顯的提高,最高可達到4.5幀/s。部分檢測結果如圖9所示,圖中矩形框為檢測到的目標位置,左下方字母表示目標的類別標簽,數字表示目標屬于某類別的概率。如圖9(a)所示,共檢測到5個目標,“S”、“M”分別代表目標屬于小目標和中目標。 表4 不同網絡訓練時間和檢測速度 (a) 為了驗證本文算法的先進性,在建立的相同的數據集上分別使用YOLOv3算法及以Resnet50作為特征提取網絡的Faster-RCNN算法進行漆面缺陷部位檢測,其結果如表5所示,可以看到由于YOLO算法同時進行候選框提取和邊界框回歸運算,其訓練和檢測速度遠遠高于另外兩種算法,但因為其基于回歸運算,感受野較大,因此其對于小目標的檢測效果較差。Resnet深度殘差網絡因為實現了更深層的網絡模型且在低層的特征中融合了高層的特征,因此實現較好的檢測精度,但是需要訓練的網絡參數顯著增加,導致訓練和檢測的速度明顯下降。 表5 不同算法對比 本文提出了一種基于多尺度Faster-RCNN的汽車漆面缺陷部位的檢測和定位方法。實驗結果表明,多尺度檢測算法相比采用單一尺度特征檢測的算法能獲得更好的檢測精度,對不同尺度特征采用不同的錨框設定能夠獲得更快的收斂和檢測速度。下一步將對于錨框的生成機制進行不斷的改進,如當采用低層特征時,隨著特征圖尺度變大,相對應地減少錨框的生成數量,以減小計算的開銷。

3 實 驗
3.1 多尺度Faster-RCNN檢測

3.2 K-means++聚類算法生成錨框可行性檢驗





4 結 語