洪樹亮,巴麗合亞·卡里布汗,程麗娟
(新疆工程學院,新疆 烏魯木齊 830023)
為將垃圾分類真正落實到每個人身上,積極引導市民參與垃圾分類,提升居民的垃圾分類意識,同時將加強社區(qū)定時定點的督導工作,引導社區(qū)居民進行準確的垃圾分類,增強人們垃圾分類意識的同時更需要提升垃圾分類的技術。傳統(tǒng)的目標檢測主要以人工特征檢測算法為主,通常用滑動窗口的方式,即一個窗口,在檢測圖片上滑動進行依次選取感興趣區(qū)域,分別對滑動的每個窗口進行特征提取,比如SIFT,HOG等特征提取算法進行提取特征,之后對提取的特征利用機器學習算法,比如支持向量機等進行分類,最終得到該窗口是否包含某一類物體。
隨著卷積神經(jīng)網(wǎng)絡(CNN)在2012年的興起,目標檢測開始了在深度學習下進行分類識別。在深度學習下,目標檢測的效果比傳統(tǒng)手工特征效果更加突出。目前,基于深度學習的檢測算法依然是目標檢測的主流。
深度學習目標檢測的框架主要分為兩類:兩階段(Two Stages)算法和單階段(One Stage)。兩階段(Two Stages)目標檢測算法首先由算法生成一系列作為樣本的候選框,再通過卷積神經(jīng)網(wǎng)絡進行樣本分類,常見的算法有R-CNN、Fast R-CNN、Faster R-CNN等。單階段(One Stage)不需要產(chǎn)生候選框,直接將目標框定位的問題轉(zhuǎn)化為回歸問題處理,無需候選區(qū)域(Region Proposal),常見的算法有YOLO、SSD等。
R-CNN[1]是目標檢測的開山之作,首先由Selective Search圖像聚類算法生成大約2000個區(qū)域候選框(Region Proposal),將生成的每個區(qū)域候選框(Region Proposal)分別送入到CNN進行特征提取,接著送入全連接網(wǎng)絡,最后使用SVM線性分類器進行分類,檢測準確率較傳統(tǒng)的目標檢測提高了很多,但檢測運行時間比較慢。
Fast R-CNN[2]是在R-CNN基礎上進行改進,將生成的候選區(qū)域(Region Proposal)整體送入CNN,同樣使用SVM線性分類器進行分類,檢測速度較R-CNN有明顯提升。
Faster R-CNN[3]是在Fast R-CNN基礎上進行改進,將R-CNN和Fast R-CNN生成候選區(qū)域(Region Proposal)的Selective Search圖像聚類算法用RPN網(wǎng)絡替代,最大的優(yōu)勢在于共用Faster R-CNN的Backbone,在準確率和檢測速度較Fast R-CNN有較大提升。
YOLOv3[4]算法也借鑒了Faster R-CNN算法的思想,檢測準確率比Faster R-CNN要低,但在檢測速度上較Faster R-CNN更勝一籌。
對于上述兩種方式,基于候選區(qū)域(Region Proposal)的方法在檢測準確率和定位精度上占優(yōu),基于端到端(End-to-End)的算法速度占優(yōu)。本文基于深度學習的垃圾圖像分類,涉及到檢測準確率、定位精度、算法速度以及小樣本目標檢測,實驗結(jié)果驗證,采用改進YOLOv3深度學習架構垃圾圖像分類模型的效果最優(yōu)。
本文YOLOv3使用的基礎網(wǎng)絡是Darknet-53,Darknet-53深度學習框架有著非常好的圖像識別的效果[5],網(wǎng)絡結(jié)構如圖1。
YOLOv3算法的基本思想,一般使用416×416大小的圖片作為輸入,首先進行特征提取生成固定大小的特征圖,主干網(wǎng)絡使用Darknet-53結(jié)構,最后得到特征圖大小為13×13、26×26、52×52,YOLOv3的網(wǎng)絡結(jié)構圖如圖2[5]。
圖1中的DBL是YOLOv3的基本組件,Darknet53的卷積層后接Batch Normalization(BN)和Leaky ReLU。除最后一層卷積層外,在YOLOv3中BN和Leaky ReLU共同構成了最小組件。
圖1 Darknet-53網(wǎng)絡結(jié)構
圖2 YOLOv3網(wǎng)絡結(jié)構圖
主干網(wǎng)絡中使用了5個resn結(jié)構,n代表數(shù)字,有res1,res2, ,res8等等,表示這個res_block里含有n個res_unit,這是YOLOv3的大組件。從YOLOv3開始借鑒了ResNet的殘差結(jié)構,使用這種結(jié)構可以讓網(wǎng)絡結(jié)構更深。
輸入圖像分成13×13的grid cell,接著如果真實框中某個object的中心坐標落在某個grid cell中,那么就由該grid cell來預測該object。每個object有固定數(shù)量的bounding box,YOLOv3中有三個bounding box,使用邏輯回歸確定用來預測的回歸框。
邊框回歸主要是解決目標框和錨框之間的相對位置關系,通過邊框回歸使得錨框更接近目標框,提高目標檢測的準確度,邊框回歸如圖3[5]。
圖3 邊框回歸圖
邊框回歸公示如下所示:
人工智能快速發(fā)展,相關的框架、算法等層出不窮,要檢驗一個算法的好壞,就需要用有關的數(shù)據(jù)集進行實驗,目前一些AI領域公開的數(shù)據(jù)集,如COCO,ImageNet等數(shù)據(jù)集,用戶可以在AI算法項目中直接使用,使用訓練好的模型測試自己的數(shù)據(jù)集,同樣地,用戶可以建立自己的數(shù)據(jù)集在AI算法上訓練和測試[6]。
建立數(shù)據(jù)集:
第一步,準備圖片。本文主要以生活垃圾分類為主,先從網(wǎng)上下載生活垃圾圖片,每個種類下載200張左右即可,保存在YOLOv3相應的目錄下。第二步,用Labellmg標注圖片,標注文件為.txt格式,與圖片同名。第三步,制作訓練數(shù)據(jù)和測試數(shù)據(jù)集文件。用下面的Python腳本文件制作訓練數(shù)據(jù)集文件“train.txt”和測試數(shù)據(jù)集文件“test.txt”。第四步,創(chuàng)建類別名文件,文件夾的每一行是一個對象的名稱。第五步,數(shù)據(jù)集配置文件。第六步,模型配置。第七步,下載Darknet源碼。第八步,啟動YOLOv3模型訓練。第九步,測試訓練模型。
本文垃圾圖像分類YOLOv3算法在深度學習中的tensorflow2.0和Open CV平臺。本實驗首先使用COCO數(shù)據(jù)集訓練的模型進行測試,COCO數(shù)據(jù)集主要是針對目標檢測所創(chuàng)建的數(shù)據(jù)庫,類別比較豐富,可以用COCO數(shù)據(jù)集訓練的參數(shù)對自己建立的數(shù)據(jù)集進行測試[7]。其次使用自己創(chuàng)建的數(shù)據(jù)集在改進YOLOv3進行訓練和測試,利用改進YOLOv3算法精度要高。通過實驗驗證了改進YOLOv3用于垃圾圖像目標檢測的可行性和高效性,但存在數(shù)據(jù)較少、目標標注引入干擾背景的問題, 后續(xù)的工作可以針對數(shù)據(jù)集進行優(yōu)化擴展。
隨著視覺大數(shù)據(jù)的出現(xiàn),單階段的YOLOv3深度學習算法的準確率相比兩階段Faster R-CNN深度學習算法要低,但是在檢測快速性上YOLOv3更勝一籌,本文提出了使用YOLOv3算法進行垃圾圖片的識別和分類,系統(tǒng)使用自己建立數(shù)據(jù)集,用于對象檢測的模式預測和訓練算法。