蘇維成 梁宏斌 馮 廣
(遼寧科技大學(xué),遼寧 鞍山 114000)
工件識(shí)別技術(shù)在工業(yè)制造領(lǐng)域中有著重要的作用,尤其是將工件識(shí)別技術(shù)應(yīng)用于工業(yè)機(jī)器人中??梢宰尮I(yè)機(jī)器人進(jìn)行更加快速準(zhǔn)確地分揀目標(biāo)工件[1]。就現(xiàn)階段而言,基于深度學(xué)習(xí)的工件檢測(cè)識(shí)別算法有兩大類。即單階段算法和二階段算法。其中二階段算法表示為檢測(cè)算法分兩步完成,第一步需要獲取候選區(qū)域,第二步才進(jìn)行分類,例如R-CNN[2]、Faster R-CNN[3];其優(yōu)點(diǎn)在于檢測(cè)更加準(zhǔn)確。另一類算法是單階段算法,這類方法采用了端到端的檢測(cè)。顧名思義,不再需要單獨(dú)尋找候選區(qū)域,將分類和預(yù)測(cè)合并為一步,典型的算法有YOLO(you only look once)[4-6]系列算法和SSD(single shot multibox detector)[7]系列算法等,可以有效地提升檢測(cè)速度和泛化能力。
Tiny-YOLOv3是在YOLO系列算法中YOLOv3的基礎(chǔ)上去掉一些特征層,這樣模型的網(wǎng)絡(luò)結(jié)構(gòu)相對(duì)簡(jiǎn)單,但輸入圖像由于無(wú)法充分提取,這將導(dǎo)致?lián)p失信息過(guò)多,尤其是對(duì)小工件的檢測(cè)中存在著漏檢率過(guò)高的問(wèn)題[8]。為了改善上述問(wèn)題,文中對(duì)Tiny-YOLOv3模型算法進(jìn)行了一系列的改進(jìn),從而提升了模型對(duì)工件識(shí)別檢測(cè)方面的性能。
Tiny-YOLOv3算法網(wǎng)絡(luò)結(jié)構(gòu)的卷積層數(shù)大幅減少,并且沒(méi)有使用全連接層和殘差層[9]結(jié)構(gòu),主干網(wǎng)絡(luò)上只有卷積層和最大池化層,因此模型的結(jié)構(gòu)和參數(shù)量就相對(duì)較少。
Tiny-YOLOv3算法網(wǎng)絡(luò)主要由13個(gè)CBL層和6個(gè)池化層構(gòu)成,其中CBL層主要由卷積層、批量標(biāo)準(zhǔn)化操作(batch normalization,BN)和激活層(LeakyReLU)3部分構(gòu)成[10],而池化層采用最大池化的方式,用卷積核為2×2,步長(zhǎng)也為2的卷積層,其中需要注意的是在512層與1 024層之間的最大池化的步長(zhǎng)為1.而不是2。文中采用416×416×3的圖片進(jìn)行圖像處理,檢測(cè)流程示意圖如圖1所示。
將輸入圖像劃為s×s的網(wǎng)格單元(Tiny-YOLOv3為多尺度預(yù)測(cè)輸出,有2層特征圖,每層特征圖有s×s個(gè)網(wǎng)格,分別為13×13、26×26),假設(shè)被測(cè)物體的中心落在網(wǎng)格之中,那么這個(gè)網(wǎng)格就負(fù)責(zé)預(yù)測(cè)這個(gè)被測(cè)的物體[11]。每個(gè)網(wǎng)格對(duì)B個(gè)邊界框進(jìn)行預(yù)測(cè),每個(gè)邊界框不僅要預(yù)測(cè)被檢測(cè)物體的位置,還要預(yù)測(cè)置信度的值,同時(shí)每個(gè)網(wǎng)格還要預(yù)測(cè)C個(gè)類別的分?jǐn)?shù)。因此每個(gè)網(wǎng)格單元需要產(chǎn)生3×(4+1+C)個(gè)值[12]。
置信度損失、分類損失和定位損失這3部分是Tiny-YOLOv3損失函數(shù)的主要組成部分,其公式為:
(1)
Tiny-YOLOv3雖然在模型大小上相比YOLOv3小很多,但對(duì)于能在低端機(jī)器上運(yùn)行還是顯得不夠成熟,同時(shí)準(zhǔn)確率也大幅下降,并且平均精度均值(mean average precision,mAP)也有所降低。下降的主要原因是Tiny-YOLOv3的主干網(wǎng)絡(luò)較淺,抽象程度較低,從而導(dǎo)致更高層次的圖像語(yǔ)義特征難以被提取。因此,在Tiny-YOLOv3中加入Ghost模塊、SE模塊和SPP結(jié)構(gòu)可以更好的改善模型大小、準(zhǔn)確率以及mAP值。此外,由于最大池化操作僅僅是在相鄰的4個(gè)像素點(diǎn)中選取其中的一個(gè),這將導(dǎo)致剩余的3個(gè)像素點(diǎn)的浪費(fèi),從而造成網(wǎng)絡(luò)傳遞過(guò)程中的特征丟失,因此本模型采用卷積層代替池化層,采用的是卷積核為3×3,步長(zhǎng)為2卷積層進(jìn)行卷積操作,這樣在進(jìn)行卷積后能達(dá)到和池化相同的效果,即圖像的尺寸大小會(huì)減小為原來(lái)的二分之一,但相比池化層將保留更多的特征信息。其改進(jìn)后的Tiny-YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)圖如圖2所示。
由于嵌入式設(shè)備中計(jì)算資源少以及有限的內(nèi)存,因此在Tiny-YOLOv3中加入Ghost模塊可以減少神經(jīng)網(wǎng)絡(luò)的計(jì)算消耗。
GhostNet[14]網(wǎng)絡(luò)又叫輕量化深度卷積模型架構(gòu),在特征層中冗余和重要的信息都是可以保證對(duì)輸入數(shù)據(jù)的全面理解,而且特征層之間有許多相似的地方,這些相似的地方就像彼此的幻象,考慮到特征層中冗余的信息可能也是一個(gè)成功模型的重要組成部分,一些輕量化網(wǎng)絡(luò)模型會(huì)把冗余的部分去除,但GhostNet并沒(méi)有去除冗余的信息,而是用低成本的計(jì)算量來(lái)獲得冗余部分。
Ghost模塊是GhostNet的重要組成部分。文中在Tiny-YOLOv3中引入Ghost模塊,當(dāng)對(duì)于某個(gè)特征層只用卷積操作生成部分真實(shí)的特征層,剩余的特征層(幻象特征層)通過(guò)對(duì)真實(shí)的特征層進(jìn)行線性變換獲得,然后將真實(shí)特征層拼接在一起組成完整的特征層。此處的線性變換是指在3×3的卷積中卷積核的厚度為1,而普通卷積的卷積核厚度是和輸入特征圖通道數(shù)量保持一致。這樣不僅避免大量的運(yùn)算而且同時(shí)可以減少很多的參數(shù)。Ghost原理示意圖如圖3所示。
輸入:h(高)×w(寬)×c(通道數(shù)),輸出:h′×w′×n(卷積核個(gè)數(shù)),卷積核尺寸k。
普通卷積的計(jì)算成本:
cost=h′×w′×n×k×k×c
(2)
Ghost模塊的計(jì)算成本:
(3)
s表示輸出層共有幾個(gè)部分組成。
壓縮率:
(4)
由于s< 壓縮和獎(jiǎng)懲網(wǎng)絡(luò)模塊(squeeze-and-excitation blocks,SE)[15]的主要作用是為了讓模型在特征圖傳遞的過(guò)程中關(guān)注更有價(jià)值信息的通道特征。解決由于特征圖的不同通道所占權(quán)重不同帶來(lái)的損失問(wèn)題。在特征圖進(jìn)行卷積操作過(guò)程中一般認(rèn)為每個(gè)通道都起著相同重要的作用,但在解決實(shí)際問(wèn)題中發(fā)現(xiàn)通道與通道之間也有很大的差異性,因此加入SE模塊可以讓模型自主學(xué)習(xí)通道之間的不同作用。同時(shí)對(duì)更有用的通道進(jìn)行加強(qiáng)操作并壓縮無(wú)用信息的通道。此外SE模塊很容易加載到已有的網(wǎng)絡(luò)模型框架中而不打擾網(wǎng)絡(luò)原有的主體結(jié)構(gòu)。SE原理示意圖如圖4所示。 SE模塊主要進(jìn)行壓縮(squeeze)和激勵(lì)(excitation)2個(gè)重要操作。 壓縮:為了能更好的建立通道間依賴關(guān)系,采用全局平均池化方法把每個(gè)通道上H×W維度的信息壓縮成1個(gè)數(shù)。這樣就可以把H×W×C的矩陣壓縮到了1×1×C,每個(gè)通道的信息都用該通道的全局平均池化值來(lái)表示。 激勵(lì):通過(guò)激勵(lì)的方法能夠使用這些壓縮過(guò)的信息對(duì)通道關(guān)系進(jìn)行建模,捕捉空間的相關(guān)性,從而提高網(wǎng)絡(luò)的表達(dá)能力。對(duì)于輸出的向量可以理解為通道分析出一個(gè)權(quán)重關(guān)系,對(duì)于比較重要的通道賦予更大的權(quán)重。當(dāng)經(jīng)過(guò)激勵(lì)到第2個(gè)全連接層后得到的輸出是經(jīng)過(guò) Sigmoid激活的權(quán)重值.然后把不同通道計(jì)算出來(lái)的權(quán)重系數(shù)分別與進(jìn)行了卷積操作的特征圖對(duì)應(yīng)通道的矩陣相乘,從而實(shí)現(xiàn)了對(duì)特征通道的重新更改,以此更新特征圖。 由于SE模塊使用了全連接層雖然計(jì)算量有所增加,但相比整個(gè)網(wǎng)絡(luò)變化并不大,因此對(duì)算法的實(shí)時(shí)性影響較小同時(shí)準(zhǔn)確率有著顯著的提升。 空間金字塔池化(spatial pyramid pooling,SPP)[16]是一種將特征圖分別映射到多種維度空間并將這些多重感受野融合的池化方法,可以讓網(wǎng)絡(luò)結(jié)構(gòu)適應(yīng)不同尺寸的圖像輸入然后得到大小固定的特征圖,還可以有效地提取到目標(biāo)工件的多尺度特征信息。空間金字塔池化的原理示意圖如圖5所示。 SPP結(jié)構(gòu)在Tiny-YOLOv3中主要實(shí)現(xiàn)局部特征和全局特征的特征圖之間的融合。該方法通過(guò)將局部特征進(jìn)行了3種不同的最大池化操作,得到的特征圖然后進(jìn)行拼接處理,使卷積核感受的視野范圍更加廣闊,同時(shí)使特征圖的表達(dá)能力更加充分,從而提高mAP值。 實(shí)驗(yàn)操作系統(tǒng)為Ubuntu 18.04,硬件配置為Intel Xeon E5-2678v3處理器,NVIDIA GeForce RTX 2080 Ti顯卡,CUDA版本為10.2。模型采用pytorch框架編寫(xiě)。 整個(gè)訓(xùn)練過(guò)程中共迭代300次。本文在訓(xùn)練時(shí)批次大小設(shè)置為8,因?yàn)楫?dāng)批次過(guò)小時(shí),模型收斂困難,批次過(guò)大,則會(huì)導(dǎo)致準(zhǔn)確率下降,初始學(xué)習(xí)率設(shè)置為0.001,由于學(xué)習(xí)率決定權(quán)值更新的速度,設(shè)置太大會(huì)越過(guò)最優(yōu)值,設(shè)置太小會(huì)導(dǎo)致權(quán)值更新速度過(guò)慢;動(dòng)量一般默認(rèn)設(shè)為0.9,因?yàn)榇酥涤绊懱荻认陆底顑?yōu)值的速度;衰減系數(shù)默認(rèn)設(shè)為0.000 5,主要是為了防止模型過(guò)擬合,同時(shí)降低其泛化性能。 文中制作的螺栓螺母數(shù)據(jù)集格式遵循Pascal VOC的數(shù)據(jù)集格式,該數(shù)據(jù)集主要的來(lái)源方式是通過(guò)相機(jī)拍攝和圖片庫(kù)下載。文中采用圖像標(biāo)注工具labelImg對(duì)數(shù)據(jù)集中901張圖片進(jìn)行標(biāo)注處理,通過(guò)在圖像中框選出螺栓螺母且進(jìn)行分類處理,由于原始圖像只有901張,導(dǎo)致模型從原始數(shù)據(jù)獲取的信息相對(duì)較少,因此需要對(duì)圖片進(jìn)行翻轉(zhuǎn)、鏡像和亮度變換處理用于數(shù)據(jù)增強(qiáng),由此得到2 703張?jiān)鰪?qiáng)圖片。本實(shí)驗(yàn)隨機(jī)選取圖片2 433張作為訓(xùn)練集使用,驗(yàn)證集圖片270張,按照9∶1的比例進(jìn)行劃分。 3.2.1訓(xùn)練結(jié)果 由圖6可知,當(dāng)在不斷迭代的過(guò)程中,發(fā)現(xiàn)損失值趨于平緩無(wú)明顯的震蕩,保持穩(wěn)定的狀態(tài)。表明改進(jìn)后的算法具有一定的收斂性且模型訓(xùn)練比較理想。 圖7為在Pascal VOC數(shù)據(jù)集上對(duì)螺栓螺母進(jìn)行檢測(cè)的結(jié)果,從中看出文中改進(jìn)的算法在實(shí)際的應(yīng)用場(chǎng)景中具有良好的魯棒性,可以準(zhǔn)確地檢測(cè)出工件物體并進(jìn)行分類。 3.2.2測(cè)試不同模塊對(duì)模型的影響 為了更好地了解改進(jìn)后的Tiny-YOLOv3性能,對(duì)其中應(yīng)用的模塊進(jìn)行逐個(gè)測(cè)試來(lái)檢測(cè)模塊對(duì)最終檢測(cè)性能的影響?;赥iny-YOLOv3分別構(gòu)建了Tiny-YOLOv3-SE、Tiny-YOLOv3-SPP、Tiny-YOLOv3-SE-SPP以及改進(jìn)的Tiny-YOLOv3網(wǎng)絡(luò)(將SE模塊、SPP模塊和Ghost模塊都應(yīng)用到Tiny-YOLOv3中),并且將基于Tiny-YOLOv3中模型的最大池化操作用卷積操作代替。 由圖8中的數(shù)據(jù)可知,雖然相比Tiny-YOLOv3-SE-SPP在準(zhǔn)確率與mAP值上有著小幅度的降低,但在模型大小上有著很大的改善。從圖9中得出,改進(jìn)的Tiny-YOLOv3的模型大小遠(yuǎn)遠(yuǎn)小于其他模型,大小僅為22.7 MB,相比Tiny-YOLOv3-SE、Tiny-YOLOv3-SPP和Tiny-YOLOv3-SE-SPP的模型大小減少了14 MB、16.5 MB和17 MB,有著大幅的減少,可以滿足在嵌入式設(shè)備中實(shí)時(shí)性的要求。 3.2.3不同模型性能檢測(cè)對(duì)比 由表1可知,改進(jìn)的Tiny-YOLOv3的算法準(zhǔn)確率相比Tiny-YOLOv3提高了8個(gè)百分點(diǎn),同時(shí)mAP值也提升了1.5個(gè)百分點(diǎn),說(shuō)明改進(jìn)的Tiny-YOLOv3的漏檢率明顯下降,可以更好地應(yīng)用在在工業(yè)機(jī)器人進(jìn)行快速準(zhǔn)確地進(jìn)行分揀。 檢測(cè)模型的性能不僅有模型的準(zhǔn)確率、mAP值和模型的大小,還有模型檢測(cè)速度、浮點(diǎn)運(yùn)算數(shù)。文中在同一測(cè)試環(huán)境下,改進(jìn)的模型與Tiny-YOLOv3相比,雖然檢測(cè)速度下降了16.78 fps,檢測(cè)速度稍慢,但仍然滿足實(shí)時(shí)性的要求。改進(jìn)的Tiny-YOLOv3浮點(diǎn)運(yùn)算數(shù)僅有9.3 GFLOPs,說(shuō)明模型相對(duì)比較簡(jiǎn)單,有利于減少設(shè)備資源的消耗。 表1 不同算法的檢測(cè)結(jié)果 文中在Tiny-YOLOv3的基礎(chǔ)上,提出了對(duì)該網(wǎng)絡(luò)的改進(jìn),增加了3個(gè)子模塊,并且使用卷積層代替池化層,從而減少網(wǎng)絡(luò)傳遞過(guò)程中的特征丟失。改進(jìn)的網(wǎng)絡(luò)不僅保證了準(zhǔn)確率和mAP值,而且模型大小、檢測(cè)速度也有很大的改善。該模型對(duì)小目標(biāo)工件檢測(cè)準(zhǔn)確率為84.8%,平均精度均值為94.9%且模型大小為22.7 MB。對(duì)比其他網(wǎng)絡(luò)模型,改進(jìn)的Tiny-YOLOv3網(wǎng)絡(luò)模型綜合性能最佳。能夠解決模型難以移植且檢測(cè)精度較低的問(wèn)題,為工業(yè)機(jī)器人能夠更加快速準(zhǔn)確的進(jìn)行無(wú)序分揀奠定了基礎(chǔ)。2.3 引入SE模塊
2.4 引入SPP結(jié)構(gòu)
3 實(shí)驗(yàn)驗(yàn)證
3.1 數(shù)據(jù)集制作
3.2 實(shí)驗(yàn)結(jié)果與分析
4 結(jié)語(yǔ)