王朔 郭鳳娜
1. 北京信息科技大學自動化學院,北京 100192;2. 華北電力大學(北京)控制與計算機工程學院,北京 102208
隨著我國社會經濟發(fā)展,居民生活垃圾的產生急劇增加,對于可回收垃圾,如果處理不當會造成資源的浪費,而對于有害垃圾,如果未及時處理甚至會對環(huán)境產生影響。針對如此情況,國家相關部門在2019年4月26日發(fā)布了《關于在全國地級及以上城市全面開展生活垃圾分類工作的通知》,這標志著我國垃圾分類處理已經進入了一個全新的政策化時期。2020年,在新冠疫情期間,因為居家隔離政策以及醫(yī)療負擔的增加,導致生活垃圾、醫(yī)療垃圾均大幅增加,這部分增加的垃圾中很多都可能與新冠患者有著密切接觸,比如隔離產生的生活垃圾,廢棄的口罩、防護服等。這部分垃圾如果得不到正確處理,還是采用原有的人工垃圾分類,不僅會耗費大量人力、物力、時間,甚至會大大增加二次感染的風險,所以,迫切需要一款智能設備來改變現狀。目前,垃圾分類難度大的原因就是群眾對于垃圾的所屬類別不明確,隨著人工智能技術,尤其是深度學習中的卷積神經網絡在圖像處理方面的飛速發(fā)展,再結合相關硬件,使解決這一問題變成了可能。
近年來,基于深度學習的目標檢測與識別方法取得了較為理想的效果,相比較傳統(tǒng)方法好很多,魯棒性更強。這一系列檢測算法基本可以分為兩大類:第一類為二階段檢測器,此算法將檢測問題劃分為兩個階段,需要先通過算法產生目標候選框,包含目標大致的位置信息,然后再針對算法產生的目標候選框進行 分 類 與 回 歸。SPP-Net、R-CNN、Fast R-CNN、Faster R-CNN等都屬于此類目標檢測算法的典型算法,這類算法準確率較高但是速度較慢;第二類為一階段檢測器,這類算法不需要region proposal階段,其僅僅使用一個卷積神經網絡CNN直接預測不同目標的類別與位置,之后只需經過一次檢測就可以得到最終的檢測結果,檢測速度更快,比較典型的算法如SSD、YOLO、YOLOv2、YOLOv3等[1]。YOLO第一代算法性能雖然不如SSD算法[2],但是YOLOv3算法在速度和準確性上均優(yōu)于SSD 算法。YOLOv3算法相比較YOLOv2[3]也有了很大提升。首先,由于YOLOv3算法采用的是3種尺度多采樣特征圖方法,在小目標的檢測上也具有很高的準確率,另外,YOLOv3算法的網絡由YOLOv2使用的Darknet-19網絡換成了更深的Darknet-53網絡,檢測結果與RetinaNet網絡[4]的準確性接近,并且具有更快的速度。綜上所述,YOLOv3滿足了垃圾分類檢測中的快速性要求,也在小目標檢測效果上得到較大的提升。同時,深度殘差網絡(Residual Network,ResNet)等深度學習經典圖像檢測模型的出現[5]也能使垃圾分類的效果顯著提升。
1.1.1 YOLOv3算法概述
經過前代YOLOv1算法和YOLOv2算法的廣泛應用,為了滿足更高的要求,YOLOv3算法應運而生。YOLO算法模型較為簡單,雖然在速度上滿足實時檢測的要求,但因為對網絡劃分進行預測,因此對于小目標檢測效果較差。YOLOv3使用了新的網絡結構Darknet-53,同時借鑒了FPN的思想,采用多尺度特征融合,從不同尺度提取特征,使YOLOv3相比較YOLOv2和YOLOv1在小目標檢測上效果進一步提升。預測分類中,Softmax loss被多個Logistic loss取代,多標簽分類取代單標簽分類。在檢測精度上得到了進一步的提升,同時也保持了檢測速度上的優(yōu)勢。進行垃圾檢測時,YOLOv3使用包含垃圾的圖片作為深度學習網絡的輸入,直接在輸出層回歸預選框所屬的垃圾的類別及其位置,使用一個神經網絡就可以實現端到端的目標檢測,這種思想將目標檢測任務作為一個回歸問題來處理。
1.1.2 Darknet-53網絡框架
在進行特征檢測的過程當中,沒有繼續(xù)沿用YOLOv2算法的Darknet-19網絡,而用Darknet-53網絡代替。YOLOv3算法為了提高網絡檢測的效率,參考了殘差網絡的思路,在某些層設置了快捷鏈路[6]。YOLOv3算法采用的Darknet-53網絡相對于YOLOv2采用的Darknet-19 網絡,在處理速度并沒有明顯降低的情況下,平均準確率有著較大的提升,同時,經過對比Darknet-19網絡和Darknet-53網絡,后者可以實現更高的測試浮點運算,使其在運算中更好地利用GPU,預測的效率也會相應提高。
1.1.3 YOLOv3邊界框預測
YOLOv1算法的預測框坐標(x,y,w,h)是直接預測出來的,坐標即使發(fā)生微小的變化,其映射到實際圖片中會造成很大變化,從而導致預測失敗。YOLOv3針對這一問題進行了改進。YOLOv3邊界框的預測采用維度聚類設定模板框,通過網絡預測相關變量(tx,ty,tw,th),則邊界框中心點坐標與邊界框的寬與高分別為:
其中,(cx, cy) ——網格偏移圖片左上角的位置坐標;
pw, ph——模板框的寬與高,如圖1所示。
邊界框預測在訓練期間采用平方和誤差損失進行監(jiān)督訓練,輸出邊界框后,采用Logistic回歸對框內部分目標進行打分,根據分值選取得分最高的模板框進行預測,節(jié)省計算時間[7]。YOLOv3的邊框回歸計算方式能夠有效防止YOLOv1中因偏移過大帶來預測結果失敗等問題。
隨著統(tǒng)計學習方法的不斷出現與改進,促進了深度學習領域的快速發(fā)展,最近幾年,深度卷積神經網絡在圖像識別領域也取得了較為理想的效果。深度卷積網絡隨著網絡層數的增加,能夠學習到的圖像的信息增加,但是隨著網絡層數的增加,會出現梯度消失和梯度爆炸問題,進而出現網絡模型退化問題,導致系統(tǒng)不能收斂,并且會使模型訓練的難度增加。HE K等人[5]在原始DCNN網絡結構中加入快捷連接,構成基本的殘差元 (residual block,RB),如圖2所示,添加快捷連接能夠在一定程度上解決深度卷積神經網絡模型退化問題[8]。
ResNet34和ResNet50是各領域常用的兩種網絡結構[8],是由不同的殘差元堆疊而成。H(x)表示深度卷積神經網絡中的原映射,添加快捷連接后,H(x)變?yōu)镠(x)=F(x)+x,其中,F(x)=H(x)-x表示ResNet網絡的映射,稱F(x)為殘差,對應的網絡結構就是殘差網絡,F(x)相對于H(x)來說更容易擬合,因此,ResNet網絡提升了深度卷積神經網絡的性能[8]。
殘差元RB定義為:
其中,x——殘差元RB的輸入;
H——殘差元RB的輸出;
F(x,{W}) ——ResNet50網絡的殘差映射,并且x和F(x,{W})的維數必須相等,若x和F(x,{W})的維數不等時,需要在快捷連接上補加ws線性投影[8]:
基于YOLOv3完成垃圾檢測后,需要進行垃圾識別,確定目標垃圾類別,構建 ResNet50模型,完成垃圾的分類識別。
在本次設計中,硬件部分選擇了Arm公司的EAIDK-310開發(fā)板、羅技C270攝像頭以及液晶顯示器。EAIDK-310開發(fā)板預裝嵌入式深度學習框架Tengine,支持Caffe/TensorFlow/Pytorch/MxNet/ONNX/Darknet等訓練框架模型直接部署,支持層融合、量化等網絡性能優(yōu)化策略,提供統(tǒng)一API(C/Python/JNI)接口,提供擴展接口自定義算子,解決了深度神經網絡模型在端側設備上進行推理的問題,滿足在本次設計中進行圖像分類處理等AI決策的需求。羅技C270作為本次的圖像采集裝置,最高可支持720 p、30 fps的圖像高速傳輸,也滿足本次圖像采集的需求。
本次設計的硬件電路采用的是EAIDK-310開發(fā)板,通過電路板的接口外接了攝像頭圖像采集模塊和液晶顯示屏,硬件電路接口如圖3所示。硬件整體實拍圖如圖4所示。
首先,需要配置開發(fā)板所需的環(huán)境,登錄EAIDK-310預裝Fedora 28及輕量級桌面系統(tǒng)LXDE;然后,在Linux系統(tǒng)下對該開發(fā)板的主機固件進行燒寫,配備相關的環(huán)境變量添加源與安裝RPM包,在開發(fā)板相關環(huán)境配備完成后進行具體的實驗設計??傮w來說分為兩個部分:一是搭建基于Tensorflow的深度學習框架和CUDA并行計算庫進行垃圾分類模型的開發(fā)訓練;二是模型導入開發(fā)板后配置調用攝像頭模塊對實際垃圾進行分類識別。
本次設計參照北京市人大常委會最新修訂的《北京市生活垃圾管理條例》,《條例》中將生活垃圾分為4類:有害垃圾、廚余垃圾、其他垃圾、可回收垃圾。在每一種類別中選擇一種具體垃圾作為類別代表,分別是殺蟲劑(有害垃圾),爛蘋果(廚余垃圾),廢棄耳塞(其他垃圾)以及廢舊報紙(可回收垃圾)。每種類型垃圾的數據集圖片約有250張,總共的數據集約1,000張,其中,選擇100張作為測試集,剩余900張作為訓練集進行訓練。
接下來需要對數據集進行預處理,首先設置好讀取圖片的批次大小和訓練需要圖片大小。數據集分類保存為4個文件,讀取時遍歷4個文件,對每一個文件的下的數據集進行像素轉換、歸一化等一系列處理并打上標簽,進而得到標準數據集。
本次設計在硬件上采用的處理模塊是EAIDK-310自帶的Tengine(python),編寫攝像頭調用程序獲取采集圖像,結合OpenCV對圖片進行讀取、預處理,并結合已經導入到開發(fā)板上的訓練好的模型,使用Tengine python接口進行分類,最終將圖像和分類結果實時顯示在液晶顯示屏上。首先進行相關的環(huán)境配置和庫的安裝,安裝Protobuf、python3-devel、numpy數據處理庫和pytengine。根據轉換之后的tmfile模型文件,通過調用Tengine的Python API進行模型的讀取、圖的創(chuàng)建,并獲取最終數據。圖5是具體實現對垃圾檢測和分類的流程。
算法的設計采用的是YOLOv3預訓練模型,加載YOLOv3初始化權重,將學習到的不同種類垃圾特征用于對垃圾進行檢測,然后將檢測出來的垃圾放入ResNet預訓練網絡中,進行垃圾類別的訓練。
完成垃圾檢測和識別模型的搭建后,在訓練集樣本上進行訓練。使用YOLOv3進行垃圾檢測,可以很好地檢測出各種類型的垃圾,使用訓練好的模型對測試集中4類各100張垃圾圖片進行檢測,其平均識別準確率達到95%以上,在對實際生活中的日常垃圾進行實際檢測時,平均檢出率為91.3%。對測試集檢測的部分結果如圖6、圖7所示,其中,測試集對應的標簽為Hazardous_waste_shachongji(有害垃圾—殺蟲劑)、Kitchen_waste_apple(廚余垃圾—爛蘋果)、Otherwaste_waste_ersai(其他垃圾—廢舊耳塞)、Recyclable_waste_newspaper(可回收垃圾—舊報紙)。從圖6、圖7可以看出,本設計能對垃圾進行有效的分類。圖8、圖9是液晶顯示屏實時采集圖像并對其定位框選,輸出垃圾類型,在圖9中對于一旁的書柜并沒有進行框選,說明本次設計對垃圾有很好的檢測效果,精度也較為理想。更為具體的訓練結果如表1所示,展示了在訓練完算法模型后其在測試集上的識別準確率表現;表2展示的是對實際日常生活中垃圾分類檢測的檢出率結果。表1和表2更為直觀的展示了本次設計對垃圾檢測的效果。
表1 算法模型在測試集中的驗證結果
表2 算法模型在實際生活中對垃圾的檢出率
與傳統(tǒng)方法相比,本設計在垃圾檢測中魯棒性較高,穩(wěn)定性好,能夠自動提取垃圾特征,并且檢測準確率遠高于傳統(tǒng)方法,能夠完成在各種環(huán)境下的垃圾檢測分類[9]。
生態(tài)文明建設是當今社會不可避免的話題之一,垃圾分類作為我國生態(tài)文明建設中的重要部分也提升到了國家政策的高度。垃圾分類與我們每個人都息息相關,在疫情期間更是對現有的垃圾分類制度提出了新的挑戰(zhàn)。本設計利用YOLOv3和ResNet50進行垃圾分類模型的訓練,該模型可以實現對常見垃圾的自動定位與識別分類,并實時地將識別分類結果展示在顯示屏上。最終經過實驗,其平均檢出率可達到91.3%,相比傳統(tǒng)方法,魯棒性更好,準確率更高,具有一定的實用價值。該系統(tǒng)也存在一定的不足之處:一是目前數據集種類及數量偏少,識別分類能力有限;二是礙于硬件限制,識別的實時性做的不夠好,識別較攝像頭采集畫面存在一定的延遲。在后續(xù)研究中,將增加垃圾數據集的種類及數量,提高識別的準確率,同時采用性能更強的硬件,進一步提高分類識別的實時性。