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