余永維,韓 鑫,杜柳青
(重慶理工大學 機械工程學院,重慶 400054)
零件識別和定位是柔性裝配機器人視覺任務中的重要組成部分。傳統(tǒng)圖像識別方法主要采用人工設(shè)計特征,例如SIFT(Scale-Invariant Feature Transform)特征[1]、LBP(Local Binary Pattern)特征[2]、HOG(Histogram of Oriented Gradient)特征[3]等,傳統(tǒng)人工特征方法效率低下,對特征多樣性變化缺乏魯棒性,已經(jīng)不能夠滿足現(xiàn)代工業(yè)檢測需求。
近年來,深度學習方法在自然圖像檢測方面表現(xiàn)出優(yōu)越性能[4],深度卷積神經(jīng)網(wǎng)絡能夠完善分類器模型并自主訓練提取目標特征,訓練后得到的特征泛化性遠高于人工提取特征。目前基于卷積神經(jīng)網(wǎng)絡的目標檢測算法主要有兩種,一種是基于區(qū)域的目標檢測算法,如Faster-RCNN(Regions with Convolutional Neural Networks)[5],Mask-RCNN[6]等,該類算法檢測精度高,但檢測速度慢,不能實現(xiàn)實時檢測;另一種是基于回歸的目標檢測算法,如YOLO(You Only Look Once)[7],SSD(Single shot MultiBox Detector)[8]等,該類算法檢測速度快,可以達到實時檢測的要求,將卷積神經(jīng)網(wǎng)絡應用于圖像檢測領(lǐng)域的研究中,國內(nèi)學者做了大量的工作:張博等[9]提出了一種基于Mask R-CNN算法的多目標圖像ORB除誤匹配方法,該方法主要用到區(qū)域神經(jīng)網(wǎng)絡提取目標類別信息并生成標簽,然后通過各個卷積層進行像素矯正,該方法相對于傳統(tǒng)方法目標匹配精度提高了18.6%。方明等[10]提出了一種基于改進YOLO算法的安全帽佩戴情況檢測方法,利用卷積神經(jīng)網(wǎng)絡由淺至深的語義信息提取并配合MobileNet輕量化模型,在保證檢測精度的同時有效的提高了檢測速度并減小了參數(shù)數(shù)量。王中宇等[11]將卷積神經(jīng)網(wǎng)絡運用到自動駕駛場景語義分割中,提出一種融合了圖像底層像素信息、通道與空間信息的語義分割網(wǎng)絡,該方法能夠更加精細的分割目標,有效提高了均交比和均像素精度等關(guān)鍵指標。
本文的研究主要針對裝配零件的檢測,傳統(tǒng)的目標檢測方法對零件檢測環(huán)境要求極高,且不能兼顧目標識別精度和檢測實時性,故本文引入了深度學習方法到目標零件檢測中,綜合比較目前的主流目標識別方法優(yōu)缺點,選取了SSD作為基礎(chǔ)算法。但SSD算法在復雜工況下檢測精度稍有遜色,為了克服這一缺陷,提出一種基于Inception-SSD框架的零件深度學習識別方法,建立了融合Inception預測結(jié)構(gòu)的SSD優(yōu)化框架Inception-SSD,在SSD額外層中引入Inception結(jié)構(gòu),以增加神經(jīng)網(wǎng)絡寬度和對不同尺度特征適應性,實現(xiàn)不同尺度特征融合,優(yōu)化模型對復雜環(huán)境的適應性,提高復雜環(huán)境下的檢測精度,同時對其損失函數(shù)和非極大值抑制進行優(yōu)化,以克服模型表達能力不足的缺點。
SSD算法以VGG16為基礎(chǔ)網(wǎng)絡,其模型結(jié)構(gòu)如圖1所示,輸入圖片的尺寸需要轉(zhuǎn)化成300×300,再將其輸入進SSD網(wǎng)絡中;SSD是以VGG-16卷積神經(jīng)網(wǎng)絡為基礎(chǔ),將VGG-16中的全連接層(fc6和fc7)改成卷積層(conv_fc6與conv_fc7),并在后面增加不同大小的卷積層用于對多尺度目標的預測,如圖1所示。VGG-16網(wǎng)絡后面新增的幾個卷積層conv_fc7,conv8_2,conv9_2,conv10_2,conv11_2,加上VGG-16網(wǎng)絡的conv4_3,SSD網(wǎng)絡有著不同的層次的特征圖,分別用于不同尺度目標的邊框偏移與類別預測。最后通過非極大值抑制(Non-Maximum Suppression, NMS)得到最終的檢測結(jié)果。
SSD采取了全卷積直接回歸預測的方式,不再產(chǎn)生區(qū)域候選框,極大地提升了SSD網(wǎng)絡的檢測速度。但SSD算法面對工業(yè)中一些視覺干擾、表面特征相似、零件堆疊等復雜情況時,有時也會發(fā)生漏檢和誤檢,而在實際的工廠生產(chǎn)環(huán)境中,以上的復雜情況往往不可避免。
圖1 SSD網(wǎng)絡結(jié)構(gòu)Fig.1 SSD network structure
在SSD算法網(wǎng)絡額外層尺寸較小,包含小目標信息有限,且額外層只有一種類型卷積內(nèi)核,即3×3內(nèi)核,存在目標細節(jié)特征遺漏的情況。同時SSD算法網(wǎng)絡具有復雜的神經(jīng)網(wǎng)絡模型結(jié)構(gòu),想要提升其網(wǎng)絡性能,一般采取的方法是增加網(wǎng)絡寬度與深度。然而,這將導致網(wǎng)絡參數(shù)數(shù)量增加,進而造成計算量增加和過度擬合的問題。為此,本文提出Inception-SSD網(wǎng)絡結(jié)構(gòu),通過將Inception預測結(jié)構(gòu)融入到SSD網(wǎng)絡額外層中,從而拓寬卷積神經(jīng)網(wǎng)絡寬度,以此提升算法性能。
Inception結(jié)構(gòu)具有密集矩陣的高性能特點,同時還保持著網(wǎng)絡稀疏結(jié)構(gòu),Inception模塊原始結(jié)構(gòu)圖如圖2所示,其結(jié)構(gòu)中使用了3個尺寸不同的濾波器(1×1,3×3,5×5),目的在于降低卷積運算過程的算力成本,解決計算量增加的問題。 GoogLeNet Inception-V1[12]證明,解決參數(shù)增加引起的計算量增加和過度擬合問題,基本方法是將完整連接層中至少一半的卷積層轉(zhuǎn)換為稀疏結(jié)構(gòu)。 因此,Inception網(wǎng)絡可以在不增加網(wǎng)絡復雜性情況下,捕獲到更多目標信息。相比Inception-V1,Inception-V2和Inception-V3[13]增加了準確度和簡化計算復雜度的優(yōu)化,提出了更加優(yōu)越的因子分解方法,將濾波器5×5拆分為兩個3×3,使卷積運算更加高效。Inception-V4[14]則引入了縮減模塊到結(jié)構(gòu)中,以改變網(wǎng)格高度與寬度,并輔以殘差結(jié)構(gòu)連接,將縮減模塊的性能發(fā)揮到最大,解決了梯度彌散的問題。
圖2 Inception原始結(jié)構(gòu)圖Fig.2 Inception original structure diagram
綜合考慮到Inception-V1到V4的變化,在SSD網(wǎng)絡的改進過程中,為了能夠保留更多目標的原始細節(jié)特征,對Inception網(wǎng)絡結(jié)構(gòu)進行適應性優(yōu)化,首先將5×5的卷積核替換成兩個3×3的卷積核,以提升計算速度,同時減少Inception網(wǎng)絡中每層特征圖數(shù)量,保持特征圖總和與原SSD網(wǎng)絡額外層特征圖總數(shù)相同。為了能夠反映本文引入的Inception網(wǎng)絡結(jié)構(gòu)不同尺度卷積核的重要性,對結(jié)構(gòu)中現(xiàn)存的兩種卷積核1×1和3×3附以加權(quán),比值為1∶2,然后在每個卷積層之后都使用批量標準化操作(Batch Normalization,BN),以增加算法的整體魯棒性。在靠近輸出端添加1×1Conv來降低參數(shù)數(shù)量,加快計算速度。最后將整個結(jié)構(gòu)輔以殘差結(jié)構(gòu)連接,綜合提升算法的訓練與測試性能。圖3為優(yōu)化后的Inception網(wǎng)絡結(jié)構(gòu)。
圖3 優(yōu)化后的Inception網(wǎng)絡結(jié)構(gòu)Fig.3 Improved Inception network structure
用Inception網(wǎng)絡替換SSD原結(jié)構(gòu)中的Conv8,Conv9,Conv10和Conv11層,即它們中每一層都被獨立的卷積組代替。將Conv4_3,Conv6_2,Conv7_2,Conv8_2 ,Conv9_2 和Conv10_2作為特征提取層來提取目標特征,并將Conv6和Conv7的輸出作為Inception特征層的輸入。
基于深度學習模型Inception-SSD的零件識別原理如圖4所示,在目標檢測階段,首先將圖片尺寸調(diào)整為300×300,然后輸入改進SSD網(wǎng)絡,先通過VGG16 conv5_3特征提取網(wǎng)絡,輸出大小為38×38尺度的特征圖,在經(jīng)過兩個conv3×3特征提取網(wǎng)絡,分別輸出19×19和10×10尺度的特征圖,然后進入Inception特征提取網(wǎng)絡,得到尺度為3×3,1×1的特征圖,各種尺度的特征圖分別通過BN、激活層等系列操作,分別實現(xiàn)對輸入圖片進行5種尺度的特征檢測。輸出特征圖包含了位置信息、網(wǎng)格單元的置信度、類別信息的三類信息。然后將得到的特征圖集合得到8 732個候選框(default box),最后通過非極大值抑制,輸出最終檢測結(jié)果。Inception-SSD采用全卷積方式,其感受野為整幅圖像,還需要對每個感受野做分類,對于不同尺度、形狀的目標物體,Inception-SSD將對其類別與位置信息直接進行回歸預測,并將其分散于不同特征層來實現(xiàn),從而提升了網(wǎng)絡整體檢測精度與速度,通過Inception稀疏結(jié)構(gòu)來感知更多小尺度特征圖,在優(yōu)化神經(jīng)網(wǎng)絡的同時提高對小目標零件識別精度。
圖4 Inception-SSD識別原理Fig.4 Identification principle of Inception-SSD
根據(jù)SSD算法檢測目標位置和類別的回歸原理,其目標函數(shù)為置信度損失(conf)和位置損失(loc)的加權(quán)和,具體表達式如下:
(1)
其中:N表示與真實目標框相匹配的默認框數(shù)量,如果N=0,則總體損失值為0;c表示預測框置信度,l表示預測框位置信息;g是真實框位置信息;α是一個權(quán)重參數(shù),經(jīng)過交叉驗證將其設(shè)為1;位置損失函數(shù)采用了Smooth L1函數(shù);類別置信損失函數(shù)采用交叉熵損失函數(shù)。
針對SSD模型對堆疊零件檢測效果不佳的問題,在原始損失函數(shù)基礎(chǔ)上增加排斥損失[15],以提高對遮擋情況下零件的檢測準確率,改進后的損失函數(shù)如下:
L=L(x,c,l,g)+γLRePGT.
(2)
假設(shè)G+= {G}表示所有真實目標框的集合,P+={P}表示與真實目標框匹配且IoU>0.5的候選區(qū)域框集合,對于候選框P(P∈P+)而言,指定一個IoU值最大的目標框作為真實目標,如式(3):
(3)
對于P∈P+而言,因為排斥損失,指定目標之外的相鄰真實目標框與區(qū)域候選框產(chǎn)生排斥,排斥目標即為除其本身之外與其IoU值最大的真實目標:
(4)
(5)
因此排斥損失計算如下:
(6)
SSD算法基于前饋卷積神經(jīng)網(wǎng)絡,最后再通過非極大值抑制得到最終檢測結(jié)果。當IoU值高于閾值時,邊界框(bounding box)就會被識別為相同目標。設(shè)B表示邊界框集,Ci表示第i個邊界框置信度,則非極大值抑制可表示如下:
box=BargmaxCi,
(7)
(8)
其中,box表示具有最高置信度的邊界框,這些邊界框?qū)⒈蛔鳛樽罱K輸出。然而,非極大值檢測結(jié)果可能會包含特征的最大值,因此直接調(diào)用非極大值抑制結(jié)果是不合適的。假設(shè)所有邊界框都來自于同一個對象,如果只考慮最大值結(jié)果,就會忽略掉通過保持邊界框最高置信度來充分利用對象信息的問題。針對以上問題,在原來非極大值抑制的基礎(chǔ)上進行加權(quán),稱之為非極大值加權(quán)(Non-Maximum Suppression Weighting, NMW):
(9)
wi=Ci×iou(Bi,BargmaxCi),
(10)
(11)
卷積神經(jīng)網(wǎng)絡模型往往需要在大量數(shù)據(jù)集基礎(chǔ)上訓練,然后對權(quán)重進行相應優(yōu)化得到效果穩(wěn)定的最終模型。目前,目標識別領(lǐng)域研究主要采用的數(shù)據(jù)集有ImageNet[16],MS COCO[17]以及PASCAL VOC[18]等。以上數(shù)據(jù)集都取自我們?nèi)粘I钪械某R娢矬w,而本文研究面向工業(yè)柔性裝配機器人視覺系統(tǒng)實際應用,對待裝配零件進行識別,因此本文選用工業(yè)相機對所需檢測零件進行自主拍攝,并對每張拍攝圖片進行手工標注,完成零部件數(shù)據(jù)集制作工作,為后期模型訓練做準備。
為了驗證本文提出的Inception-SSD深度學習識別模型是否有效,在數(shù)據(jù)集制作上,本文針對性的選擇了如圖5所示的5類零件用于測試Inception-SSD的檢測效果,并拍攝了5 000張零件圖作為數(shù)據(jù)集,其中隨機選擇4 000張圖片用于訓練模型,剩下1 000張圖片作為測試集。
圖5 5類模型訓練零件圖Fig.5 Five types of parts for model training
為了能夠呈現(xiàn)直觀的識別效果,在數(shù)據(jù)集制作過程中對不同零件標注了相應英文單詞。如圖5所示,Bolt表示M8鍍鋅十字大扁頭螺釘、Nut1表示M10尼龍防松螺母、Nut2表示M8鍍鎳滾花大頭螺母、Capnut1表示M8鍍鋅螺帽、Capnut2表示M6鍍鋅蓋型螺帽。為了保證實驗結(jié)果可靠性,在數(shù)據(jù)集制作過程中,通過改變光照強度、變換相機拍攝位姿、變換零件位姿、模擬零件堆疊的方式來保證數(shù)據(jù)集更加貼近實際生產(chǎn)環(huán)境。
對于數(shù)據(jù)集標注工作,在Ubuntu16.04下,使用軟件LabelImg對每張零件圖進行位置信息和類別信息標注,每標注一張圖片就會生成相應xml信息文件,對于標記完之后的圖片進行微調(diào),生成xml文件分別保存,根據(jù)xml文件提取出每種零件所包含的訓練集與測試集圖片數(shù)量分配情況及圖片尺寸信息,如表1所示。
表1 零件數(shù)據(jù)集圖像樣本分布
Inception-SSD模型的訓練主要分為預訓練和微調(diào)兩個階段,預訓練階段會在caffe框架中以自制零件圖數(shù)據(jù)集為基礎(chǔ)訓練得到一個SSD模型,然后用該模型來初始化Inception-SSD網(wǎng)絡,得到Inception-SSD模型相關(guān)初始化參數(shù),微調(diào)階段則注重根據(jù)自制零件圖數(shù)據(jù)集對相關(guān)權(quán)重進行微調(diào),最后用測試集數(shù)據(jù)驗證Inception-SSD模型的檢測精度與實時性。
本實驗Inception-SSD模型訓練是基于Linux操作系統(tǒng),訓練環(huán)境為Ubuntu16.04,訓練之前進行相關(guān)重要參數(shù)修改,如表2所示。
表2 相關(guān)訓練參數(shù)
表2中,Weight-decay表示權(quán)重衰減系數(shù),將每次學習后的參數(shù)按照固定比例降低,以防止出現(xiàn)過擬合現(xiàn)象;Momentum表示動量參數(shù),對梯度下降到最優(yōu)過程的速度有一定影響;Base_lr表示基礎(chǔ)學習率,決定權(quán)值更新速度;batch_size表示每批次訓練樣本量大??;Max_iter表示最大迭代次數(shù)。本次模型訓練實驗設(shè)置總迭代次數(shù)為50 000次,最大迭代次數(shù)為60 000次,訓練完成后得到的訓練過程中損失值變化曲線如圖6所示。
圖6 損失值變化曲線Fig.6 Loss value curve
從圖6可以看出,當訓練次數(shù)達到10 000次以后,損失值開始趨于平穩(wěn),考慮到深度神經(jīng)網(wǎng)絡迭代次數(shù)過多會出現(xiàn)過擬合情況,故在訓練文件中做了相應修改,使得在訓練過程中每迭代5 000次就保存一次SSD訓練模型。而后隨機選擇500張測試圖片,根據(jù)文獻[19]的方法,選擇迭代5 000次到50 000次之間的SSD模型,用召回率進行測試,召回率Recall計算公式如下:
Recall=TP/(TP+FN),
(12)
在所有標簽為正例的樣本中,式中TP表示零件正確預測數(shù),F(xiàn)N表示零件錯誤預測數(shù),測試結(jié)果如表3所示。
表3 迭代次數(shù)與召回率
根據(jù)表中數(shù)據(jù)可知,SSD網(wǎng)絡最優(yōu)迭代次數(shù)為15 000次。故選擇15 000次迭代的SSD模型作為零件檢測最終模型。
(1)單類零件檢測實驗
由圖7和圖8可以看出單類零件檢測效果,本文提出的Inception-SSD算法在零件堆疊、遮擋和視覺干擾的情況下檢測效果較好。
(2)多類零件檢測實驗
在零件檢測效果測試中,本文特意模擬了實際生產(chǎn)中,工作臺多類零件堆疊遮擋、零件裝配、無關(guān)雜物干擾、變換相機位姿等復雜情況下,測試效果如圖9~圖11所示,檢測準確率達到97%以上,能夠滿足實際生產(chǎn)環(huán)境對零件的檢測要求。
為了對比Inception-SSD算法與其他目標檢測算法的檢測效果,引入測試集圖片進行驗證,檢測對比數(shù)據(jù)如表4所示,數(shù)據(jù)對比結(jié)果表明:正常情況下,各個算法檢測平均準確率相差不大;復雜情況下,本文方法檢測平均準確率達到97.8%,相比原SSD算法提升11.7%,相比YOLO算法提升10.4%,相比Faster R-CNN,檢測速率遙遙領(lǐng)先達到41 Frame/s,可實現(xiàn)實時檢測。綜上述,Inception-SSD算法在提高復雜情況檢測精度同時還保證了實時性,對復雜情況下的零件識別效果顯著。
圖7 單類零件檢測效果Fig.7 Detection effect of single type part
圖8 正常光照、過量曝光和光線不足檢測效果Fig.8 Detection effect of normal , overexposure and underexposure
圖9 多類零件混雜堆疊擺放和裝配狀態(tài)下檢測效果Fig.9 Detection effect of multi-class parts in hybrid stacking and assembling state
圖10 無關(guān)雜物干擾檢測效果Fig.10 Detection effect of irrelevant interference
圖11 過量曝光和變換相機角度檢測效果Fig.11 Detection effect of overexposure and change camera angle
表4 本文Inception-SSD與其他算法檢測效果對比
根據(jù)實際情況,多種零件相互堆疊最貼近生產(chǎn)實際,故分別隨機采取了200張正常和復雜情況下多種零件堆疊測試圖片,用于測試本文的Inception-SSD算法和原SSD算法檢測性能,檢測結(jié)果如表5所示。
表5 復雜工況下誤檢數(shù)據(jù)對比
從表5中對比數(shù)據(jù)可以看出,Inception-SSD算法性能相比原SSD算法有較大提升。在實際生產(chǎn)中,由于相距變大或較大雜物干擾情況下,零件會在成像平面呈現(xiàn)適應性像素縮小的狀況,對此特意增加了100張適應性像素縮小3倍的零件測試圖像,以此驗證改進SSD算法對小目標零件的檢測效果。實驗結(jié)果如表6所示。與原SSD算法零件識別效果對比如圖12所示。
表6 適應性像素縮小零件檢測準確率對比
從表6的對比數(shù)據(jù)可得,在優(yōu)化SSD神經(jīng)網(wǎng)絡結(jié)構(gòu)同時提高對小目標零件的識別精度,檢測準確率綜合提升12.4%。從圖12對比識別效果和表4~表6的實驗數(shù)據(jù)得出,本文Inception-SSD目標識別算法相比于原SSD算法有以下幾點提升:
(1)測試集驗證中復雜情況下零件檢測準確率總體提升11.7%。對于適應性像素縮小零件,檢測準確率綜合提升12.4%。
(2)復雜情況下,零件堆疊、遮擋誤檢漏檢率降低10.7%。
(3)通過模型得到的坐標框更加貼近真實零件邊緣,減小定位坐標和真實坐標之間的誤差,為后續(xù)的研究提供更加精確地定位。
圖12 算法改進前后檢測效果對比
本文提出基于Inception-SSD框架的零件深度學習識別方法,在SSD網(wǎng)絡額外層中,插入Inception結(jié)構(gòu),以提高SSD網(wǎng)絡模型檢測精度而又不影響其檢測速度,并在每個卷積層后使用BN操作,增加算法整體魯棒性,再輔以殘差結(jié)構(gòu)連接,提升算法訓練與測試性能;同時在損失函數(shù)中增加排斥損失,在非極大值抑制中引入加權(quán)算法,提升Inception-SSD算法對模型表達能力。在訓練階段,結(jié)合損失值變化曲線與不同迭代次數(shù)模型進行召回率測試,選取最佳零件檢測模型。實驗表明,在非結(jié)構(gòu)性復雜條件下,本文方法在識別準確率達到97.8%,檢測速率41 frame/s,在保障證實時檢測的同時還保證了精度,相比原SSD網(wǎng)絡效果顯著提升,與其他算法相比優(yōu)勢突出,能夠滿足實際生產(chǎn)中零件檢測需求。如何進一步提高本文方法的泛化能力,增強數(shù)據(jù)集包容性,是本文接下來的研究方向。