李博威,侯 明,李 擎,徐文龍
(北京信息科技大學自動化學院,北京 100192)
隨著我國的經濟快速發(fā)展,人民的生活水平有了極大的提升,但同時伴隨著生活垃圾快速增長,2016年中國城市固體垃圾產生量達到了2.34億噸,與1996年相比增幅為88%[1]。與此同時,垃圾中也富含著豐富的資源,在當前資源匱乏的時代,如果生活垃圾的有用物質可以得到有效利用,將對循環(huán)經濟的發(fā)展有著重大作用[2],故如何對垃圾進行有效的檢測與分揀已經成為垃圾資源化處理的前提。垃圾本身形態(tài)各異、種類繁多;其分類是一種復雜度高、強度大、環(huán)境惡劣的工作,采用人工分揀是當前的主要形式,避免不了對工作人員造成損傷。采用先進設備代替人類從事惡劣、復雜、高強度的工作,是當前AI與機器人技術的重要應用,這里主要研究垃圾檢測的問題。
目前的目標檢測算法分為兩類:傳統(tǒng)的特征提取方法、基于深度學習的方法。傳統(tǒng)方法是通過圖像特征即SIFT[3]、HOG[4]等,與SVM[5]等分類器組成,但由于傳統(tǒng)的方法對于圖像特征的提取人為干預過多,在明顯的物體與簡單背景的情形下,有很好的檢測效果。對于垃圾這種形狀不規(guī)則、尺寸變化范圍大、混疊遮擋嚴重、種類繁多的復雜應用場合,傳統(tǒng)的目標檢測算法對于興趣目標的檢測性能低,魯棒性差,不能滿足實時要求。近些年來,隨著深度學習領域的研究與發(fā)展,基于深度學習的目標檢測算法廣泛地應用在遙感圖像[6]、無人駕駛[7]等領域中?;谏疃葘W習的目標檢測算法在人工智能方面應用的越來越多,其具有結構靈活、特征自動提取、檢測精度高、檢測速度快等優(yōu)點,目前分為兩大類,兩步算法與一步算法。
以Faster R-CNN[8]為代表的兩步檢測算法,利用區(qū)域提取的方法,在每張圖像上提取約兩千多個候選區(qū)域,然后對候選區(qū)域進行分類以及位置回歸,雖然這種算法檢測精度高,但是存在運行效率低的問題,為了實現垃圾檢測算法在實際生活中應用,算法需要滿足實時檢測要求,故此類算法不能高效的完成垃圾分類工作。
以SSD[9](Single Shot Multibox Detector)為代表一步檢測算法,相比于兩步的檢測算法少了RPN(Region Proposal Network)這一步,并采用了兩步法中Faster R-CNN的Anchor思想,即對于每一點上選取一系列不同長寬比的矩形邊框,直接在輸出層回歸邊界框極其類別,且在不同尺寸的特征圖上進行預測,在檢測結果上可以媲美兩步法,同時檢測速率高,可以滿足實時要求,因此選擇SSD算法處理垃圾檢測問題。
SSD是經典的一步檢測算法,如圖1所示。以VGG16為基礎提取網絡層,并用卷積層Conv6 與Conv7 分別替代了原FC6 和FC7,增加了4 個深度卷積層,最終在Conv4_3,Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2 這一組特征層上進行分類預測與邊框回歸。
圖1 SSD檢測結構Fig.1 SSD Detection Model
SSD目標檢測算法的優(yōu)勢在于,使用了回歸思想與候選框方法,通過設計特征金字塔形式,添加4個深度卷積層,用于高級語義信息的提取,從不同尺度的特征圖下面來預測目標分類與位置。在保證檢測速度的情況下使得檢測精度與兩階段算法相當。
這種思路可以提高對大目標定位與分類的準確性,但作為垃圾檢測算法不能達到預期效果,首先SSD算法中的基礎提取網絡VGG16相對于目前所提出的網絡,其網絡層數淺、參數量大,對于特征層之間的信息交流少;其次由于大目標在圖片中的占比大,包含信息更多,通過多尺度預測能夠達到預期效果,但是對于低分辨率的小目標來說,所包含的有效信息較少,即使用分辨率大的淺層特征圖來檢測,也無法很好的完成分類與回歸的預測;最后SSD網絡使用的回歸損失與網絡的評估標準不等價,存在局限性,不能更好的完成邊界框回歸。因此為了提高垃圾檢測的準確率,并保證檢測速率,現對該算法進行如下改進。
(1)使用DenseNet[10]網絡替換原SSD 中的VGG16 網絡。與原網絡相比,該結構能夠保證檢測速率,從特征復用的角度上提高了網絡性能,不僅減少了參數量,并且將網絡加深,同時減輕了梯度消失的現象,實現密集連接。
(2)借鑒FPN(Feature Pyramid Network)的思想改善SSD 在小目標檢測精度不明確的問題,對不同尺寸的特征圖進行融合,利用淺層網絡分辨率高的特點,學習圖片的細節(jié)特征;利用深層網絡分辨率低特點,學習語義特征。
(3)使用GIoU(Generalized IoU)損失函數作為本網絡的回歸損失,用于解決回歸損失與網絡評估時的不等價問題,并且可以較好的表現邊框重疊程度。
針對SSD算法中基礎特征提取網絡中網絡層數淺、參數量大的問題,選用DenseNet替換原網絡中的VGG16。DenseNet網絡結構,如圖2所示。該網絡由多個Dense Block和Transition Layer組成。
圖2 DenseNet 檢測模型Fig.2 DenseNet Detection Model
核心在于每一個Dense Block是由多個Dense Layer組成,每一層的輸入是由前面所有層的輸出通過通道拼接的形式結合所形成的。每一層的輸入計算公式,如式(1)所示,此處不同于ResNet中的相加的操作,如式(2)所示。
DenseNet是通過通道合并的方式將特征圖進行合并,如圖3所示。避免直接相加對信息造成的損失,且只需要保證特征圖大小相同,通道數則不受限制,即描述圖像本身的特征增加了,而每一層下的信息量沒有增加,從特征復用的角度上獲得更優(yōu)的性能,緩解梯度消失現象。
圖3 疊加模塊Fig.3 Concat Module
由于拼接操作大量占用顯存,對Dense Block做出簡化,只對相鄰的兩個Dense Layer進行拼接操作。Dense Block通過采用通道疊加的方式,以及Dense Layer中1*1卷積的存在,可以有效解決VGG16網絡中網絡層數少、參數量大、特征層間信息交流少的問題。選用Dense Block2、Dense Block3、Dense Block4,與原網絡保留的最后三個特征圖一起用于多尺度預測。輸出的特征圖大小為{37*37、18*18、9*9、5*5、3*3、1*1},如表1所示。
表1 輸出特征圖Tab.1 Output Feature Map
針對SSD算法對于小目標檢測性能差的問題,采用特征融合方式強化算法對小目標的識別。FPN用來解決在目標檢測算法中對于不同尺度目標的檢測問題,通過簡單更改網絡布局,最大化提升網絡對于小物體的檢測能力,如圖4所示。首先通過輸入圖像通過卷積操作得到特征圖,然后將最高層特征圖與前一層獲得的相同大小的特征圖進行逐元素相加,從而加強每一層特征圖語義特征,并且在處理信息時,都有作為高層的信息作為輸入。
圖4 FPNFig.4 FPN
通過借鑒FPN算法,通過將高分辨率的淺層特征圖進行反卷積,映射為高分辨率特征圖,進行元素相加,如圖5所示。首先對高層特征圖進行上采樣,然后與通過1*1卷積層降維后的前一層特征圖相加,最后通過一個3*3的卷積層去除混疊效應。
圖5 這里的檢測模型Fig.5 The Detection Model in This Paper
原網絡通過預測框與真實框之間的smoothL1損失,本質上是使L1損失函數在0點附近更加平滑,如式(3)~式(4)所示。
原網絡使用smoothL1計算位置回歸損失,但在評估時則用IoU判斷是否檢測到目標,故會發(fā)生損失相同的情況下,IoU效果不一定相同,如圖6所示。因此為了更好的完成邊界框回歸,可選用IoU作為損失函數。
圖6 相同損失下不同IoUFig.6 Same Loss but Different IoU
但IoU 作為損失函數會有兩個局限:(1)當IoU 為0時,沒有梯度,無法進行訓練;(2)IoU不能反映預測框與真實框的重疊程度,即IoU結果相同,但回歸的效果不同。
GIoU可以解決上面兩個問題,如圖7所示。通過找出包含目標框(A)和預測框(B)的最小圖形(C),假設預測框和真實框的坐標分別用,得到的IoU值、GIoU值、最終損失函數,如式(5)~式(7)所示。
圖7 GIoU原理Fig.7 GIoU Principle
式中:Ap-預測框的面積;At-真實框的面積;I-重疊面積;Ac-包含真實框與預測框的最小面積。
由上述計算得出,當IoU值為0時,GIoU為1,可以解決局限一;當IoU值相同時,求得的最小包含面積不同,所以GIoU可以反應重疊程度,解決局限二。故選用GIoU作為回歸損失函數。
這里的實驗環(huán)境均在云服務器搭建,訓練環(huán)境為Linux系統(tǒng)Ubuntu16.04LT,深度學習框架為Pytorch,GPU為Titan RTX 24G。
在訓練過程中,這里的算法與SSD算法設置學習率為0.001,動量為0.9,衰減因子為0.00005。在輸入尺度為(300×300)時,batch_size設置為32,輸入尺度為(512×512)時,batch size設置為16。VOC數據集分別在70000,90000次時調整學習率為原來的十分之一,迭代100000次;生活垃圾檢測數據集在50000此時調節(jié)學習率為原來的十分之一,迭代60000次。
為驗證算法的性能,在PASCAL VOC 數據集上進行算法的訓練與評估的對比實驗。在PASCAL VOC數據集中采取聯合訓練的方式,訓練集由PASCAL VOC2007的訓練集部分與PASCAL VOC2012的訓練集部分組成。測試集由PASCAL VOC2007的測試集部分組成。
在VOC2007的測試集上所得到的結果,如表2所示。SSD算法與這里的算法使用了不同的初始尺度進行訓練,Faster R-CNN采用了不同網絡結構進行訓練。這里的算法300 的mAP 為79.0%,檢測精度較原SSD300 提高了1.7%;這里的算法512 的mAP為81.4%,檢測精度較SSD512提高了1.9%。
表2 VOC2007測試集檢測結果對比Tab.2 Comparison of Test Results of VOC2007 Test Set
為了進一步驗證算法對各個目標的檢測能力,通過對比這里的算法300與SSD300算法在VOC2007測試集中20類目標的檢測精度,如表3所示。這里的算法對小目標‘Bottle’,‘Pottedplant’,‘Sheep’,‘Tvmonitor’上的檢測精度相比原SSD 算法分別提升了3.7%,5.4%,5.6%,3.1%。通過對比可知,這里的算法能夠通過提升網絡對檢測小目標的檢測能力,進而提升算法整體的性能。
表3 VOC2007 各類目標檢測結果對比Tab.3 Various Target Detection Results in VOC2007
由于目前網絡上沒有公開的生活垃圾檢測數據集,故采用爬蟲技術與相機拍攝共采集圖片13880張圖片,共37類分別為可回收垃圾:充電寶、廢舊包、洗護用品、塑料玩具、玻璃器皿、插頭、塑料器皿、易拉罐、廢舊枕頭、塑料衣架、快遞紙袋、廢舊衣服、毛絨玩具、廢舊鞋、砧板、紙箱、調料瓶、酒瓶、金屬食品罐、鍋、食用油桶、飲料瓶。廚余垃圾:剩飯菜、大骨頭、魚骨、果皮、菜幫菜葉、茶葉渣、蛋殼。有害垃圾:干電池、藥物軟膏、過期藥品。其他垃圾:陶瓷器皿、煙蒂、筷子、塑料袋、快餐盒。通過Labelimg軟件對采集的圖片進行標注,并轉化為VOC格式,其中訓練集分為11104張圖片,測試集圖片分為2776張圖片。
測試集上的檢測結果,如表4所示。所設計的網絡與原網絡相比,在輸入尺度為300 和512 時,檢測精度分別提升了2.1%、3%。損失曲線圖,如圖8、圖9所示??梢钥闯鲞@里的算法在訓練起始階段損失低于SSD算法,并且隨著訓練逐漸趨于穩(wěn)定。
表4 生活垃圾測試集檢測結果對比Tab.4 Comparison of Test Results of Domestic Garbage Test Set
圖8 SSD損失曲線Fig.8 SSD Diagram
圖9 這里的算法損失曲線Fig.9 Loss Diagram of the Algorithm in This Paper
這里的算法512與SSD512的各類目標準確率結果,如表5所示。這里的算法在煙蒂、插頭的小目標物體較原算法分別有6.4%,5.9%的提升,并且對于果皮、菜葉、大骨頭較難識別的廚余垃圾也有4.6%、4.5%、2.9%的提升,特別是對于酒瓶的檢測,有了10%左右的提升。
表5 各類生活垃圾檢測結果對比Tab.5 Various Target Detection Results in Domestic Garbage
為了檢驗算法的實時性效果,在生活垃圾的測試集上進行測試,如表6 所示。這里的算法300 和算法512 的FPS 分別為17、23,SSD算法的FPS分別為16、26,在精度提升的情況下,保證了檢測速度,可以滿足實時要求。
表6 不同算法的檢測速度對比Tab.6 Comparison of Different Algorithm Detection Speeds
進一步驗證算法的可靠性,這里進行了兩組可視化檢測實驗,第一組為特征圖可視化實驗,如圖10所示。對SSD網絡與這里的網絡的前兩個預測特征圖進行可視化,可以發(fā)現,這里的網絡可以有效的增強底層特征圖的信息,提高對小目標的識別能力,其中輸入尺度為512時第一層與第二層的預測特征圖,如圖10(a)、圖10(b)所示。
圖10 這里的算法(左)與SSD算法(右)特征圖對比Fig.10 Comparison of Feature Map Between the Algorithm in This Paper(Left)and SSD(Right)
第二組為檢測結果可視化實驗,如圖11所示。
圖11 這里的算法(左)與SSD算法(右)檢測結果對比Fig.11 Comparison of Detection Results Between the Algorithm in The(Left)and SSD(Right)
SSD算法對于小目標的檢測能力差,容易出現漏檢、錯檢、定位不準的現象。這里的算法極大改善了這一性能算法則可以在多目標的情況下進行有效預測,抗干擾能力強,可以獲得更優(yōu)的檢測效果。
針對生活垃圾的檢測工作,提出了改進的SSD 垃圾檢測算法,通過研究SSD網絡及相關的理論基礎,并分析了SSD算法所存在的問題,用簡化的DenseNet 替換原網絡中的基礎網絡VGG16,實現了網絡結構的密集連接,在保證特征的傳遞與特征重用的基礎上,從一定程度上減輕了梯度消失問題;引用FPN結構,大幅度提升了小物體檢測的性能;使用GIoU損失作為回歸損失,獲得更好的檢測性能。
最后通過實驗分析,所提出的算法在VOC數據集上相比于SSD300 和SSD512 分別有1.7%和1.9%的提升,在生活垃圾檢測數據集上分別有2.1%和3%的提升,實驗表明,所設計算法能夠提升檢測精度,提高魯棒性,相比于原算法在小目標的檢測精度上有了顯著的提升,同時保證了檢測速率,滿足實時垃圾檢測的需求。由于所設計的網絡結構,通道疊加操作過多,數據需要多次的復制并傳遞到下一層,需要開辟過多的顯存,導致檢測速度提升不大,在下一步的研究工作中,我們將對網絡結構做進一步的優(yōu)化,在保證精度的同時提高檢測速度。