薛 陽 葉曉康* 孫 越 洪 俊 萬軼倫
(上海電力大學(xué)自動化工程學(xué)院 上海 200090) 2(國網(wǎng)上海浦東供電公司 上海 200122)
現(xiàn)代社會對于汽車噴漆的需求越來越高,人工進行噴漆的方法存在著噴涂不均勻及對人體危害大的問題,因此用自動化設(shè)備代替人工工作具有重要的實際意義,其首要問題即是對缺陷區(qū)域的識別和定位。傳統(tǒng)圖像識別方法一般有如下兩種,一種是基于灰度和顏色的信息對圖像二值化分割或利用邊緣檢測算法對圖像進行分割,再結(jié)合數(shù)學(xué)形態(tài)學(xué)等算法對圖像進行特征提取,另一種是人工設(shè)計特征(如SIFT[1]、HOG[2]、Haar[3])結(jié)合分類器(如SVM[4]、Adaboost[5])的方法。文獻[6-7]應(yīng)用SIFT特征結(jié)合分類器以及邊緣檢測算法分別對中厚板表面缺陷的檢測和車標(biāo)進行識別。文獻[8]通過局部對比度增強算法對灰度圖像進行二值化分割的方法對光學(xué)元件損失進行檢測。文獻[9]通過背景平滑濾波器,利用局部灰度和梯度變化信息自適應(yīng)調(diào)整不同特征區(qū)域的平滑程度,對原圖像平滑得到背景圖像,通過對原圖像和背景圖像的差分圖像閾值分割對鋼軌表面缺陷檢測。傳統(tǒng)的基于灰度、顏色和邊緣信息的方法容易受到背景的干擾,而人工設(shè)計特征的方法復(fù)雜,對設(shè)計者的經(jīng)驗要求高。近幾年,深度學(xué)習(xí)飛速發(fā)展,使得特征提取和匹配的工作得以簡化。文獻[10]基于Faster-RCNN并修改了錨框生成規(guī)則來對零件表面不同缺陷進行檢測,文獻[11]通過圖像融合的方法對樣本進行擴充以訓(xùn)練深度網(wǎng)絡(luò)來進行電網(wǎng)異物的檢測。文獻[11-12]以Faster-RCNN算法為基礎(chǔ),修改了非極大值抑制算法實現(xiàn)了對于復(fù)雜條件下電力系統(tǒng)多目標(biāo)的識別和故障檢測。當(dāng)前目標(biāo)檢測領(lǐng)域常用的算法包括Faster-RCNN算法、YOLO(You Only Look Once,一步檢測)系列算法以及SSD(Single Shot Multi-box Detector,單次多框檢測器)算法。YOLO系列算法和SSD算法改進了檢測的速度,同時也導(dǎo)致檢測的精度有不同程度的下降[13-16]。本文目標(biāo)識別任務(wù)對精度要求較高,而對實時性檢測要求相對較低,因此選取了檢測精度更高的Faster-RCNN算法。原始的Faster-RCN算法雖然在一般的目標(biāo)檢測問題上取得了不錯的精度,但是對于小區(qū)域目標(biāo)的檢測精度往往不理想,因此,對原始Faster-RCNN結(jié)構(gòu)進行改進,以滿足在對于小目標(biāo)區(qū)域的檢測要求。
本文的主要工作是:1) 引入了多尺度檢測,使得網(wǎng)絡(luò)可以同時利用高層和低層的特征,從而加強對于小區(qū)域的檢測能力。2) 通過聚類算法確定的錨框來取代原始網(wǎng)絡(luò)中固定的錨框設(shè)定,提高網(wǎng)絡(luò)的收斂速度和檢測速度。
Faster-RCNN是在Fast-RCNN基礎(chǔ)上提出用區(qū)域推薦網(wǎng)絡(luò)(Region Proposal Network,RPN)候選框生成算法取代Select search算法,使得目標(biāo)檢測速度大大提高。Faster-RCNN算法主要由卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)、RPN,以及一個基于感興趣區(qū)域(Region-of-Interest,ROI)的分類器三部分組成。卷積神經(jīng)網(wǎng)絡(luò)用于對輸入圖像的特征進行提取,區(qū)域推薦網(wǎng)絡(luò)則用于生成候選區(qū)域。Faster R-CNN算法原理如圖1所示,圖像將首先經(jīng)過一個卷積神經(jīng)網(wǎng)絡(luò)提取特征圖譜,常用的提取特征的卷積神經(jīng)網(wǎng)絡(luò)有ZF、VGG-16、ResNet等。特征提取網(wǎng)絡(luò)包含Conv層(卷積層)、ReLU激活函數(shù)層以及Pooling層(池化層)。Pooling層會縮小輸入圖像的尺寸,常見的有Max pooling和Average pooling兩種池化方式,每經(jīng)過一次池化操作,輸出層的特征圖的大小為輸入圖的1/2,本文采用的VGG-16網(wǎng)絡(luò)共有4個池化層,因此最后輸出的特征圖為原圖的1/16。ReLU為激活函數(shù)。Conv層提取的特征圖將作為RPN網(wǎng)絡(luò)和分類回歸網(wǎng)絡(luò)的輸入。RPN網(wǎng)絡(luò)對輸入的圖像進行識別,并生成一系列不同大小的建議區(qū)域(Proposal Region),ROI池化層的作用是將輸入的不同尺寸的建議區(qū)域的大小固定,然后通過全連接層輸入到后面的分類回歸網(wǎng)絡(luò)。分類層的作用是判定建議區(qū)域的類別,邊界框回歸層用來進行邊框回歸運算,獲取更精確的位置[14]。
圖1 Faster-RCNN算法結(jié)構(gòu)
RPN網(wǎng)絡(luò)是Faster-RCNN算法結(jié)構(gòu)的核心,其結(jié)構(gòu)圖如圖2所示,卷積層輸出的特征圖輸入到RPN網(wǎng)絡(luò)后,網(wǎng)絡(luò)首先將特征圖上的每一個點映射到原圖上的對應(yīng)區(qū)域,并按照預(yù)定的參數(shù)生成一定數(shù)量的錨框(archor)。以原始Faster-RCNN所采用的參數(shù)為例說明錨框生成過程,卷積層輸出的特征圖尺寸大小為原圖的1/16,因此特征圖譜中每個像素點均可映射到原圖中16×16像素的區(qū)域。對每個特征圖譜中的像素在原圖中的對應(yīng)的16×16像素的區(qū)域,按3種不同比例(如0.5、1,2)改變其長寬比,并分別3種不同的放大倍數(shù)(如8、16、32)進行放大,最終在每個錨點處生成9個不同形狀和尺寸的錨框。圖3為生成錨框示意圖。在篩選掉一部分錨框后,會按如下規(guī)則將剩余錨框標(biāo)記為正樣本、負樣本和不關(guān)注樣本:當(dāng)錨框與原圖中真實框(ground truth box)的交疊面積與兩者面積之和之比大于0.7時,將錨框標(biāo)記為正樣本,標(biāo)簽為1,當(dāng)錨框與原圖中真實框的交疊面積與兩者面積之和之比小于0.7時,將錨框標(biāo)記為負樣本,標(biāo)簽為0,否則將其標(biāo)記為不關(guān)注樣本,標(biāo)簽為-1,不關(guān)注樣本在訓(xùn)練時不參與網(wǎng)絡(luò)的訓(xùn)練。同時用一個3×3的滑動窗口作用于特征圖生成一個256維長度的特征,然后通過兩個1×1的卷積層分別生成分類層和回歸層,從而進行下一步的分類和回歸運算。
圖2 RPN網(wǎng)絡(luò)結(jié)構(gòu)
(a) 同一尺寸對應(yīng)的3種長寬比
RPN的訓(xùn)練采用端對端方式,采用梯度下降算法對RPN網(wǎng)絡(luò)進行反向傳播訓(xùn)練,損失函數(shù)如下:
(1)
(2)
(3)
對于邊界框回歸,采用的算法為:
(4)
在一個多層卷積神經(jīng)網(wǎng)絡(luò)中,隨著網(wǎng)絡(luò)深度不斷增加,高層特征忽略的細節(jié)的信息越多。原始Faster-RCNN的方法中,候選區(qū)域由候選區(qū)域生成網(wǎng)絡(luò)生成,候選區(qū)域的特征僅由最后一個卷積層經(jīng)過池化操作得到,利用高層特征對小目標(biāo)進行檢測會存在比較大的問題。受到金字塔結(jié)構(gòu)[19]的啟發(fā),本文引入了多尺度檢測,在利用最后一層卷積層輸出的特征圖來生成候選區(qū)域的基礎(chǔ)上,同時引入其他卷積層的輸出來生成候選區(qū)域。具體流程如圖4所示,原始輸入圖片經(jīng)過一個卷積神經(jīng)網(wǎng)絡(luò)提取特征,將不同層提取出的多個不同尺度的特征圖送入各自RPN生成候選區(qū)。為了研究不同尺度的特征圖對檢測速度的影響,對于VGG-16網(wǎng)絡(luò),將conv1_2(經(jīng)第1層卷積層進行2次卷積操作后輸出的特征圖,下同)、conv2_2、conv3_3、conv4_3、conv5_3這5層的輸出分別輸入到RPN網(wǎng)絡(luò)中來進行檢測,統(tǒng)計1 000幅測試圖像的平均檢測時間,其結(jié)果如表1所示,表中conv1_2用conv1表示,其他卷積層的表述類似。
表1 使用不同尺度特征檢測時間 單位:s
圖4 多尺度Faster-RCNN網(wǎng)絡(luò)結(jié)構(gòu)
原始Faster-RCNN算法的RPN中錨框(archor)是根據(jù)高層特征而設(shè)定的,不適用于檢測小尺寸區(qū)域。針對此問題,通過聚類算法來分析圖像中檢測目標(biāo)的尺度特征來確定錨框。目前廣泛采用的聚類算法有K-means系列算法和均值漂移聚類等。其中K均值聚類算法因算法簡單高效等特點使用最為廣泛,本文選用K-means++算法,按照如下的思想選取k個初始聚類中心:首先通過隨機的方法選取第一個初始聚類中心,在選取下一個聚類中心點前,計算數(shù)據(jù)集中每個樣本點與當(dāng)前選中的聚類中心的最短距離,距離越遠的點被選中的概率越大,然后通過輪盤賭法選出下一個聚類中心點,直到選出k個初始聚類中心點。其克服了初始聚類中心隨機性,顯著地提高了聚類的效果。算法把輸入的點數(shù)據(jù)集分類為k個聚類,使數(shù)據(jù)集中點都劃分到距離其最近的聚類中心所在的類中,分類時使用歐氏距離作為衡量距離的標(biāo)準(zhǔn)。歐氏距離表達式為:
(5)
式中:x、y是數(shù)據(jù)集中的任意兩個樣本點,i為樣本點維度的索引,n為樣本點維度。
算法步驟流程如圖5所示。
圖5 聚類算法流程
每個樣本成為下一個聚類中心的概率用下式計算:
(6)
式中:x表示數(shù)據(jù)集中任意一個樣本點;D(x)表示該樣本點與當(dāng)前聚類中心的最短距離。
重新計算各個類的聚類中心計算方法為:
(7)
式中:i為聚類中心的索引,等式左側(cè)ci為更新后的聚類中心,右側(cè)ci為更新前的聚類中心,x是屬于以ci為聚類中心點的類中的樣本點。
原始Faster-RCNN算法特征圖上每個位置生成9個錨框,因此選定聚類的數(shù)目k=9。將缺陷區(qū)域按照預(yù)設(shè)參數(shù)自動標(biāo)記為“B”(大)、“M”(中)、“S”(小),讀取標(biāo)簽為“S”的標(biāo)注框的寬和高數(shù)據(jù)共1 000多個數(shù)據(jù)點作為數(shù)據(jù)集,算法總用時為30.20 s,聚類結(jié)果如圖6所示,圖中三角形代表每個類的聚類中心坐標(biāo)。通過聚類得到的9個聚類中心將作為低層特征對應(yīng)的RPN網(wǎng)絡(luò)錨框初始的寬和高。
圖6 聚類結(jié)果
圖7為該檢測算法的功能流程,其中訓(xùn)練和檢測部分大致相同,訓(xùn)練部分需要計算誤差函數(shù)來更新模型參數(shù),檢測部分加載訓(xùn)練好的模型參數(shù)輸出檢測結(jié)果。其主要包含特征提取、錨框生成、候選區(qū)域生成、邊界框回歸運算及分類4個部分。
圖7 算法功能流程
下述為各功能框的具體實現(xiàn)算法,部分軟件核心編程將在附件中給出。
1) VGG-16特征提取。VGG-16網(wǎng)絡(luò)主要結(jié)構(gòu)由5個卷積層、4個池化層組成,卷積層為n×n的二維數(shù)組,將卷積層與圖像進行二維的卷積運算,對圖像的局部特征進行提取。池化層為一個2×2的二維數(shù)組,將池化層與特征圖像進行卷積運算,通過對步長和卷積方式進行設(shè)置,使輸出的特征圖像的大小為原始特征圖的0.5倍,對特征圖像的尺度進行縮小。
2) 錨框生成。將不同尺度特征圖上的每個像素點按不同的放大尺度映射到原圖中一塊區(qū)域,將此區(qū)域按照不同的長寬比例和放大尺度進行變換,特征圖上的/每個像素點的每個像素點對應(yīng)k個不同大小和比例的邊界框,則為錨框。高層的特征圖錨框生成方案按照長寬比(0.5,1,2),放大尺度(8,16,32)的參數(shù)生成,最低層特征圖的錨框大小由前述聚類算法的結(jié)果確定。
3) 候選區(qū)域生成。
Step1通過一個3×3的卷積層與提取出來的特征圖做二維卷積運算,再通過兩個不同的1×1卷積層,在特征圖每個像素點處分別生成2k和4k維的向量,k為對應(yīng)特征圖上每個像素點所生成的錨框的數(shù)量,2k維的向量用來預(yù)測每個錨框為前景和背景的概率得分,4k維的特征圖用來預(yù)測錨框的回歸位置偏移,進行初步的回歸運算。
Step2去除超出原圖邊界的錨框,計算剩余每個錨框與每個真實邊界框的最大的IOU(錨框與真實邊界框的重疊比例)。當(dāng)IOU>0.7時,將此錨框標(biāo)記為正樣本,label=1,當(dāng)IOU<0.3時,將此錨框標(biāo)記為負樣本,label=0,當(dāng)0.3 Step3進一步對archors進行越界剔除并使用非最大值抑制算法去除掉重疊度較高的錨框,即根據(jù)概率大小為標(biāo)簽為1和0的錨框進行排序,依次計算所有其他錨框與得分較大的錨框的重疊比例,當(dāng)重疊比例大于一定閾值時,將該錨框去除。 4) 候選框分類。從樣本中隨機選擇256個archors,將256個archors按縮放比例映射到對應(yīng)的特征圖上,并通過Roi池化層固定為7×7的尺度大小,將7×7的二維矩陣轉(zhuǎn)換為一維矩陣,輸入到全連接層,再通過softmax函數(shù)輸出n個結(jié)果(n為要檢測的目標(biāo)的種類的個數(shù)),結(jié)果的值表示當(dāng)前候選框?qū)儆谀硞€類別的概率,最大值表示的是預(yù)測的結(jié)果。 (1) 先做平移變換(Δx,Δy),Δx=Pwdx(P),Δy=Phdy(P),可得: (8) (9) (2) 做尺度縮放(sw,sh),sw=exp(dw(P)),sh=exp(dh(P))得: (10) (11) 可以看出,需要學(xué)習(xí)這四個變換。當(dāng)候選框與真實框相差較小時,可認為這種變換是一種線性變換,可以通過線性回歸來建模對窗口進行微調(diào),具體算法實現(xiàn)如下所示: 定義一組向量t=(tx,ty,tw,th),其中: (12) 輸入:候選框的坐標(biāo)(Px,Py,Pw,Ph)的特征向量Φ(P)。 輸出:t*=(dx),dy(P),dw(P),dh(P))。 (13) 式中:N為候選框的總數(shù),i為候選框的索引。利用梯度下降法使Loss趨向于0,此時的參數(shù)w即為變換參數(shù)。 硬件環(huán)境:CPU為Intel Core i5-9300H,GPU為NVIDIA GTX 1660Ti,6 GB顯存,8 GB內(nèi)存。軟件環(huán)境:Windows 10,Tensorflow架構(gòu),GPU加速庫為CUDA10.1和CUDNN10.0,編程語言采用Python 3.6和Matlab 2017b。其他參數(shù)設(shè)置如下:權(quán)重衰減系數(shù)為0.000 1,學(xué)習(xí)率為0.001,BATCH_SIZE取120,動量參數(shù)為0.9,訓(xùn)練最大迭代次數(shù)20 000次。樣本圖片共3 000幅,采用CMOS攝像機拍攝,分辨率為1 440×1 080,按照3∶1的比例分為訓(xùn)練集和測試集。下文中VGG-16、MS-VGG16分別表示原始Faster-RCNN網(wǎng)絡(luò)和多尺度Faster-RCNN網(wǎng)絡(luò),MS-VGG16+K-means++表示用聚類算法確定錨框的多尺度Faster-RCNN網(wǎng)絡(luò)。衡量指標(biāo)采用“F-score”,F-score的計算方式如式(14)所示。 (14) 式中:NTP表示正確識別為目標(biāo)區(qū)域的數(shù)量;NFN表示原本是目標(biāo)區(qū)域但未識別的數(shù)量;NFP表示非目標(biāo)區(qū)域但被識別為目標(biāo)區(qū)域的數(shù)量。F的值越大,說明網(wǎng)絡(luò)檢測精度越高,性能越好。 為驗證本文提出的多尺度檢測方法的有效性,在數(shù)據(jù)集一致,且錨框均為原始Faster-RCNN設(shè)定的情況下,對采用不同的卷積層組合網(wǎng)絡(luò)比較其F-score值大小。為表述簡便,下文中卷積層的組合采用字母和數(shù)字下標(biāo)的形式表示,如conv123表示表示conv1+conv2+conv3的組合。其結(jié)果如表2所示。 表2 使用不同卷積層組合的結(jié)果對比 可以看到,與原始的Faster-RCNN相比,采用多尺度檢測準(zhǔn)確度有了顯著的提升。當(dāng)多尺度檢測的卷積層數(shù)達到一定數(shù)目時,不能通過增加卷積層的數(shù)目有效地增加檢測的精度,相反會大大降低訓(xùn)練及檢測的速度,綜合考慮精度和速度的要求,本文多尺度檢測選取conv2+conv4+conv5的卷積層組合。 為驗證通過聚類算法生成錨框的方法的有效性,在相同數(shù)據(jù)集且網(wǎng)絡(luò)結(jié)構(gòu)均為上述確定卷積層組合的多尺度檢測方案的情況下,比較其與采用原始錨框設(shè)定時的F-score,結(jié)果如表3所示??梢钥吹?其檢測精度達到了95.39%,相較于采用原始的archor,提高了1.55%。為了研究此方法對于訓(xùn)練的效率和檢測的速度的影響,對采用不同網(wǎng)絡(luò)的模型訓(xùn)練過程中總損失函數(shù)進行分析,圖8(a)、(b)、(c)分別是使用不同網(wǎng)絡(luò)的訓(xùn)練模型的總體損失函數(shù)(total loss)的收斂圖。通過對比可以發(fā)現(xiàn)相較于原始的VGG-16網(wǎng)絡(luò),MS-VGG16網(wǎng)絡(luò)能以迭代更少的次數(shù)收斂,同時可以得到,采用K-means++聚類算法來確定錨框的方案具有更快收斂速度,由此可以提高訓(xùn)練的效率。 表3 不同archors生成方法的結(jié)果對比 (a) VGG-16網(wǎng)絡(luò)收斂曲線 表4所示的是使用不同網(wǎng)絡(luò)訓(xùn)練模型的時間和檢測速度,由于多尺度檢測產(chǎn)生了更多的候選區(qū)域,迭代一次的消耗的時間相對增多,導(dǎo)致整體訓(xùn)練時間變長,同時可以看出使用K-means++算法確定archors的方法使得訓(xùn)練效率和檢測速度得到了較為明顯的提高,最高可達到4.5幀/s。部分檢測結(jié)果如圖9所示,圖中矩形框為檢測到的目標(biāo)位置,左下方字母表示目標(biāo)的類別標(biāo)簽,數(shù)字表示目標(biāo)屬于某類別的概率。如圖9(a)所示,共檢測到5個目標(biāo),“S”、“M”分別代表目標(biāo)屬于小目標(biāo)和中目標(biāo)。 表4 不同網(wǎng)絡(luò)訓(xùn)練時間和檢測速度 (a) 為了驗證本文算法的先進性,在建立的相同的數(shù)據(jù)集上分別使用YOLOv3算法及以Resnet50作為特征提取網(wǎng)絡(luò)的Faster-RCNN算法進行漆面缺陷部位檢測,其結(jié)果如表5所示,可以看到由于YOLO算法同時進行候選框提取和邊界框回歸運算,其訓(xùn)練和檢測速度遠遠高于另外兩種算法,但因為其基于回歸運算,感受野較大,因此其對于小目標(biāo)的檢測效果較差。Resnet深度殘差網(wǎng)絡(luò)因為實現(xiàn)了更深層的網(wǎng)絡(luò)模型且在低層的特征中融合了高層的特征,因此實現(xiàn)較好的檢測精度,但是需要訓(xùn)練的網(wǎng)絡(luò)參數(shù)顯著增加,導(dǎo)致訓(xùn)練和檢測的速度明顯下降。 表5 不同算法對比 本文提出了一種基于多尺度Faster-RCNN的汽車漆面缺陷部位的檢測和定位方法。實驗結(jié)果表明,多尺度檢測算法相比采用單一尺度特征檢測的算法能獲得更好的檢測精度,對不同尺度特征采用不同的錨框設(shè)定能夠獲得更快的收斂和檢測速度。下一步將對于錨框的生成機制進行不斷的改進,如當(dāng)采用低層特征時,隨著特征圖尺度變大,相對應(yīng)地減少錨框的生成數(shù)量,以減小計算的開銷。3 實 驗
3.1 多尺度Faster-RCNN檢測
3.2 K-means++聚類算法生成錨框可行性檢驗
4 結(jié) 語