胡亞蘭 柯敏毅
(湖北工業(yè)大學(xué)計(jì)算機(jī)學(xué)院 湖北省武漢市 430068)
隨著社會(huì)生活水平的不斷提高,人們購(gòu)入了豐富的物資,越來越多的垃圾也隨即產(chǎn)出,而垃圾種類繁多,每個(gè)種類的處理方式也不一樣。例如:有害垃圾采取熱處理、化學(xué)分解和無(wú)污染處理的形式;采用生化處理、沼澤生產(chǎn)、堆肥等方式對(duì)濕垃圾進(jìn)行資源化利用或無(wú)害化處理; 干垃圾通過焚燒方式無(wú)害化處理; 可回收垃圾運(yùn)至相關(guān)企業(yè)進(jìn)行回收處理[1]。由此,衍生出了兩個(gè)社會(huì)問題:
(1)由于人們從小沒有垃圾分類的意識(shí),容易將垃圾混在一起丟進(jìn)垃圾箱,這給垃圾分揀場(chǎng)的工作人員帶來極大困擾。垃圾分煉廠需要消耗極大的人力、時(shí)間去將不同種類的垃圾分到對(duì)應(yīng)類別的垃圾框中。由于垃圾分類處理效率不高,導(dǎo)致一部分垃圾未被處理,造成了環(huán)境的污染和資源的浪費(fèi)。
(2)垃圾分類問題逐漸引起社會(huì)的關(guān)注,2019年7月1日,上海實(shí)施垃圾分類政策,將垃圾分為可回收垃圾、廚余垃圾、有害垃圾和其它垃圾四大類。但是,由于人們垃圾分類意識(shí)比較薄弱,容易將垃圾分錯(cuò)類別,還是會(huì)出現(xiàn)將垃圾混在一起的情況。這樣仍然會(huì)使一部分垃圾處于未處理狀態(tài),給垃圾處理場(chǎng)的垃圾分類、垃圾處理造成麻煩。針對(duì)這兩個(gè)問題,我們可以通過提高垃圾分揀的效率或者從源頭來控制人們對(duì)于垃圾分類的錯(cuò)誤率。
隨著人工智能的不斷發(fā)展,深度學(xué)習(xí)(Deep learning)在圖像識(shí)別方面的技術(shù)已經(jīng)較為成熟,例如在人臉識(shí)別、醫(yī)學(xué)圖像識(shí)別、遙感圖像分類、ImageNet 分類識(shí)別、交通識(shí)別和字符識(shí)別等領(lǐng)域已取得了不錯(cuò)的成果[2]。深度學(xué)習(xí)可以對(duì)圖像特征進(jìn)行提取,通過大量訓(xùn)練來達(dá)到對(duì)圖像進(jìn)行分類和識(shí)別的功能[3],因此,深度學(xué)習(xí)是圖像處理的一個(gè)非常有效的技術(shù)。但深度學(xué)習(xí)在垃圾分類這一塊的研究?jī)?nèi)容卻不多,我們可以通過深度學(xué)習(xí)來改善人工分揀效率低、耗時(shí)耗力的問題,也可以通過深度學(xué)習(xí)來從源頭上減少人們對(duì)垃圾識(shí)別的錯(cuò)誤率,從而減少未處理垃圾的數(shù)量,讓更多的資源可以被回收利用。針對(duì)當(dāng)前城市垃圾分類現(xiàn)狀,如果使用人工智能對(duì)垃圾進(jìn)行識(shí)別和分類,不僅可以提高垃圾分揀廠的效率,還能夠增加資源的回收利用率,改善垃圾對(duì)環(huán)境的污染程度,所以在環(huán)境保護(hù)和資源回收利用方面具有重大意義。
值得注意的是,垃圾有類間相似、類內(nèi)差異大的特點(diǎn)。如何針對(duì)這些特點(diǎn)設(shè)計(jì)出適合垃圾分類的神經(jīng)網(wǎng)絡(luò)模型并達(dá)到預(yù)期的效果是智能垃圾識(shí)別的一個(gè)挑戰(zhàn)。
YOLOv4(You Only Look Once, Version 4)模型是Bochkovskiy于2020年在YOLOv3[4]的基礎(chǔ)上提出的。與YOLOv3網(wǎng)絡(luò)結(jié)構(gòu)相比,有如下幾個(gè)改進(jìn):
(1)在輸入端采用Mosaic 數(shù)據(jù)增強(qiáng)方法,源自CutMix 增強(qiáng)[5],通過隨機(jī)縮放、裁剪和排列四張圖片來增加目標(biāo)數(shù)量并增強(qiáng)背景的復(fù)雜度,極大地豐富了檢測(cè)數(shù)據(jù)集,增加了小目標(biāo)的數(shù)量,提高了網(wǎng)絡(luò)的魯棒性。
(2)在主網(wǎng)部分,YOLOv4 基于YOLOv3 主網(wǎng)Darknet53 和CSPNet 構(gòu)建CSPDarknet53 網(wǎng)絡(luò)。CSPDarknet53 網(wǎng)絡(luò)不僅增強(qiáng)了CNN 網(wǎng)絡(luò)的學(xué)習(xí)能力,而且在保證準(zhǔn)確率的同時(shí),減少了計(jì)算量,降低了內(nèi)存成本。
(3)為了更好地提取目標(biāo)的融合特征,YOLOv4 網(wǎng)絡(luò)在主網(wǎng)絡(luò)和輸出層之間插入了SPP(空間金字塔池化)模塊和FPN+PAN。首先,通過使用SPP 模塊,可以放大主干特征接受范圍,并且可以顯著分離最重要的上下文特征。然后使用FPN 結(jié)構(gòu)從上到下傳遞強(qiáng)大的語(yǔ)義特征,最后使用PAN 模塊構(gòu)建的特征金字塔結(jié)構(gòu)從下到上傳遞強(qiáng)大的定位特征。通過該方法,可以融合不同層之間的特征。FPN(區(qū)域候選網(wǎng)絡(luò))+PAN(路徑聚合網(wǎng)絡(luò))結(jié)構(gòu)聚合了不同主干層的不同檢測(cè)層的參數(shù),進(jìn)一步提高了網(wǎng)絡(luò)的特征提取能力。
(4)使用Mish 激活函數(shù)替換主干中的Leaky ReLU 進(jìn)行CSPDarknet53 分類器訓(xùn)練,使用分類器預(yù)訓(xùn)練權(quán)重可以提高分類器和檢測(cè)器的準(zhǔn)確率和泛化能力。
(5)Head 部分繼承了YOLOv3 的Head 結(jié)構(gòu),共有三個(gè)分支。預(yù)測(cè)信息包括對(duì)象坐標(biāo)、類別和置信度。
(6)使用了使用完全交叉并集(CIOU)損失代替IOU_loss作為邊界框區(qū)域損失,還使用DIOU_nms 代替NMS,使得預(yù)測(cè)框回歸的速度和精度更高。
(7)在由一系列下采樣和多個(gè)殘差網(wǎng)絡(luò)組成的DarketNet53 網(wǎng)絡(luò)中使用resblock_body 模塊。
YOLOv4模型分為三個(gè)部分:CSPDarketnet53、Neck 和Head。CSPDarketnet53 結(jié)構(gòu)是模型的骨干網(wǎng)絡(luò)。Neck 結(jié)構(gòu)由SPP和PAN 組成,Head 是模型的預(yù)測(cè)部分。YOLOv4 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)如圖1所示??梢钥闯?,與YOLOv3 一樣,在YOLOv4 中,輸入圖像被處理為寬度和高度為416×416 的圖像。對(duì)于不同大小的目標(biāo), YOLO 網(wǎng)絡(luò)的最終在YOLO Head 之后的輸出層有寬和高三種尺寸,即13×13、26×26 和52×52。注意在輸出層中,例如13×13×(c+5)×3,c 表示要檢測(cè)的種類數(shù);5 反映了anchor box 中是否有目標(biāo)以及anchor box 的4 個(gè)調(diào)整參數(shù);3 表示對(duì)應(yīng)于每個(gè)寬度和高度大小的三個(gè)不同的anchor box。YOLOv4 網(wǎng)絡(luò)的基本卷積塊,即CBL 和CBM,與YOLOv3 類似,主要區(qū)別在于YOLOv4在骨干網(wǎng)絡(luò)中采用Mish 函數(shù)作為激活函數(shù),而在YOLOv3 中使用Leaky ReLU 函數(shù)。

圖1:YOLOv4 網(wǎng)絡(luò)結(jié)構(gòu)圖
YOLOv4 優(yōu)點(diǎn):
(1)增強(qiáng)CNN 的學(xué)習(xí)能力,使得在輕量化的同時(shí)保持準(zhǔn)確性,速度和精度并存;
(2)降低內(nèi)存成本;
(3)去掉了計(jì)算力較高的計(jì)算瓶頸結(jié)構(gòu),降低計(jì)算;
(4)是一種高效而強(qiáng)大的目標(biāo)檢測(cè)模型,使用 1080Ti 或2080Ti 就能訓(xùn)練出超快、準(zhǔn)確的目標(biāo)檢測(cè)器;
(5)更適合單GPU 訓(xùn)練。
YOLOv4 缺點(diǎn):
(1)在精度和速度上還有可以提升的空間;
(2)因?yàn)闆]有進(jìn)行區(qū)域采樣,所以對(duì)全局信息有較好的表現(xiàn),但是在小范圍的信息上表現(xiàn)較差。
由文獻(xiàn)[6]可知,YOLOv4 在速度和精度上已超過Faster R-CNN和SSD,并且將YOLOv3 的AP 和FPS 分別提高10%和12%,也比較符合垃圾檢測(cè)的條件,因此,本文將使用YOLOv4 算法并根據(jù)垃圾的特性對(duì)其進(jìn)行改進(jìn),來完成垃圾檢測(cè)。
2.2.1 Triplet Attention
近年來,注意力機(jī)制已被應(yīng)用于計(jì)算機(jī)視覺的各種任務(wù)。Non-local[7]通過計(jì)算不同位置的特征之間的依賴關(guān)系來捕獲遠(yuǎn)程特征。SENet 提出了通道注意,它明確地建模了通道之間的依賴關(guān)系。GCNet[8]優(yōu)化了Non-local,結(jié)合了全局注意力和通道注意力。SKNet[9]使用通道注意力機(jī)制來實(shí)現(xiàn)場(chǎng)感知的動(dòng)態(tài)選擇。卷積塊注意模塊(CBAM)在序列模式下結(jié)合了通道和空間注意機(jī)制。
傳統(tǒng)的通道注意力計(jì)算會(huì)選取高層特征圖進(jìn)行全局池化,以具有全局的感受野,但這種計(jì)算方式會(huì)丟失大量的空間信息,也無(wú)法體現(xiàn)通道維數(shù)和空間維數(shù)之間的相互依賴性,傳統(tǒng)的空間注意力計(jì)算同理。基于Spatial 和Channel 的CBAM 雖然可以體現(xiàn)通道與空間之間的相互依賴性,但通道注意與空間注意的計(jì)算是分離的,且在混合維度進(jìn)行添加會(huì)帶來非常巨大的計(jì)算量的消耗。
Triplet attention[10]相對(duì)于其它注意力機(jī)制有以下優(yōu)點(diǎn):
(1)可以保留大量空間和通道信息,避免大量丟失;
(2)能夠進(jìn)行跨維度的交互,強(qiáng)調(diào)了多維交互而不降低維度的重要性,因此消除了通道和權(quán)重之間的間接對(duì)應(yīng);
(3)只需要極小的算力,幾乎沒有參數(shù)。
我們選擇在主干網(wǎng)絡(luò)的最后一層添加Triplet attention。融合空間和通道注意力的注意力模塊通常分別對(duì)空間和通道依賴進(jìn)行建模,這導(dǎo)致特征的不同維度之間缺乏語(yǔ)義交互。Triplet attention 提取了不同維度之間的語(yǔ)義依賴,消除了channels 和weights 之間的間接對(duì)應(yīng)關(guān)系,在不涉及到維數(shù)降低的情況下以很小的計(jì)算開銷達(dá)到提高準(zhǔn)確率的效果,廉價(jià)有效。圖2顯示了Triplet attention 的基本結(jié)構(gòu)。顧名思義,triplet attention 由三個(gè)并行分支組成,其中兩個(gè)分支負(fù)責(zé)捕獲通道維度和空間維度之間的跨維度交互。剩下的最后一個(gè)分支類似于CBAM,用于構(gòu)建空間注意力。所有三個(gè)分支的輸出都使用簡(jiǎn)單的平均法聚合來實(shí)現(xiàn)跨維度的交互。在前兩個(gè)分支中,triplet attention 分別沿H 軸和W 軸逆時(shí)針旋轉(zhuǎn)原始輸入張量90°,并將張量的形狀從C×H×W 變換為W×H×C 和H×C×W。在第三個(gè)分支中,張量以其原始形狀C×H×W 輸入。之后,第一維的張量通過Z-pool 層降到第二維,得到平均聚合特征和最大聚合特征相連。這里的Z-pool 層負(fù)責(zé)通過連接該維度上的平均池化和最大池化特征,將張量的第零維減少到兩個(gè)維度。這使該層能夠保留實(shí)際張量的豐富表示,同時(shí)縮小其深度,使進(jìn)一步的計(jì)算變得輕量級(jí)。Z-pool 定義為:

圖2:Triplet attention

其中0d 是發(fā)生最大和平均池化操作的第0 維。例如,形狀為(C×H×W)的張量的Z-Pool 將得到形狀為(2×H×W)的張量。
然后,將縮減后的張量通過核大小為K 的標(biāo)準(zhǔn)卷積層、批量歸一化層,最后將sigmoid 函數(shù)生成的對(duì)應(yīng)維度的注意力權(quán)重加入到旋轉(zhuǎn)張量中。 在最終輸出時(shí),第一個(gè)分支的輸出沿H 軸順時(shí)針旋轉(zhuǎn)90 度,第二個(gè)分支的輸出沿W 軸順時(shí)針旋轉(zhuǎn)90 度,確保形狀與輸入相同。最后,將三個(gè)分支的輸出平均聚合為輸出。綜上所述,對(duì)于輸入張量x∈RC×H×W,從Triplet attention 獲得精煉的注意力應(yīng)用張量y 的過程可以用以下等式表示:

其中σ 表示sigmoid 激活函數(shù);ψ1、ψ2和ψ3分別代表了Triplet attention 的三個(gè)分支中由核大小k 定義的標(biāo)準(zhǔn)二維卷積層。簡(jiǎn)化式(3),y 變?yōu)椋?/p>

其中ω1、ω2和ω3是三重注意力中計(jì)算的三個(gè)跨維度注意力權(quán)重。等式中的y1和y2表示順時(shí)針旋轉(zhuǎn)90°,以保留(C×H×W)的原始輸入形狀。
2.2.2 改進(jìn)后的CSPDarknet53
本文將Triplet attention 加入YOLOv4 主干網(wǎng)絡(luò)CSPDarknet53中來改進(jìn)主干網(wǎng)絡(luò),這樣可以使網(wǎng)絡(luò)在幾乎不添加參數(shù)的情況下能夠自動(dòng)學(xué)習(xí)進(jìn)行跨維度的交互,提升有效的特征通道權(quán)重,從而讓網(wǎng)絡(luò)重點(diǎn)關(guān)注重要的特征通道,加強(qiáng)特征提取能力。改進(jìn)后的CSPDarknet53 主干網(wǎng)絡(luò)如圖3所示。我們?cè)诿恳唤MCSPResblock后面加一個(gè)注意力機(jī)制,由于注意力機(jī)制對(duì)特征圖的尺寸和通道數(shù)都不會(huì)發(fā)生變化,所以對(duì)下一模塊的輸入不會(huì)產(chǎn)生影響。

圖3:改進(jìn)后的CSPDarknet53 網(wǎng)絡(luò)
目前關(guān)于垃圾分類公開數(shù)據(jù)集主要有兩個(gè),TrashNet 數(shù)據(jù)集和華為垃圾數(shù)據(jù)集。還有一部分自制數(shù)據(jù)集,如醫(yī)療廢棄物、街道垃圾等。TrashNet 數(shù)據(jù)集從分類情況上來看,主要是對(duì)可回收垃圾進(jìn)行分類,并且缺少了布料這一類別,又由于本文主要針對(duì)上海垃圾分類標(biāo)準(zhǔn)進(jìn)行分類識(shí)別,所以主要選取華為垃圾數(shù)據(jù)集作為參考。但華為數(shù)據(jù)集主要針對(duì)圖像識(shí)別進(jìn)行分類,沒有對(duì)圖像進(jìn)行標(biāo)注,所以在網(wǎng)絡(luò)上搜索到其它研究者標(biāo)注好的在飛槳平臺(tái)AI Studio 公開的數(shù)據(jù)集。除此之外,還通過網(wǎng)絡(luò)下載和拍照的方式對(duì)數(shù)據(jù)集進(jìn)行了補(bǔ)充。因此,本文的數(shù)據(jù)集主要由以下三種形式組合而成:
(1)飛槳平臺(tái)AI Studio 公開的標(biāo)注好的華為垃圾數(shù)據(jù)集,并對(duì)其進(jìn)行了篩選和調(diào)整。
(2)網(wǎng)絡(luò)上搜索并通過篩選的相關(guān)垃圾圖片。
(3)對(duì)日常生活垃圾進(jìn)行拍照得到的垃圾圖片。
本實(shí)驗(yàn)中垃圾數(shù)據(jù)集一共包含14964 張垃圾圖片,分為4 大類,44 小類。由于目標(biāo)檢測(cè)的標(biāo)簽一般為英文,每一小類后面的英文為各類別對(duì)應(yīng)的英文名,格式為“大類代號(hào)+小類類別名稱”,其中1 為其它垃圾,2 為廚余垃圾,3 為可回收垃圾,4 為有害垃圾。由于圖片中可能不止包含一個(gè)目標(biāo),會(huì)有多個(gè)標(biāo)注,所以標(biāo)注數(shù)會(huì)大于收集到的圖片數(shù),最終得到24248 個(gè)標(biāo)注。如表1所示,其中有5467 個(gè)其它垃圾,4234 個(gè)廚余垃圾,12874 個(gè)可回收垃圾和1673 個(gè)有害垃圾。圖4為每一小類的標(biāo)注數(shù)量,最多的為陶瓷器皿1263 個(gè),最少為金屬?gòu)N具285 個(gè)。

圖4:垃圾數(shù)據(jù)集子集

表1:垃圾數(shù)據(jù)集
在垃圾數(shù)據(jù)集中,由于大類中還分為了各個(gè)小類,會(huì)導(dǎo)致同一個(gè)大類中小類和小類之間差距較小,例如:飲料瓶和酒瓶外觀相似,需要從更細(xì)節(jié)的特征來區(qū)分。而由于每個(gè)小類中也有不同尺度、也可能由于外力對(duì)形狀產(chǎn)生形變,例如:被擠壓的易拉罐、揉成一團(tuán)的衣服,各小類垃圾之間的差異較大。因此,類內(nèi)差距大,類間差異小,導(dǎo)致出現(xiàn)大量的錯(cuò)誤檢測(cè)。為了解決這些困難的樣本,我們引入了注意力機(jī)制,以優(yōu)化網(wǎng)絡(luò)的特征提取能力,有效提高檢測(cè)精度。
本實(shí)驗(yàn)的硬件環(huán)境:處理器為Inter(R) Core(TM) i7-4710HQ CPU @ 2.50GHz,內(nèi)存為12GB,顯卡為GeForce GTX 1080Ti,操作系統(tǒng)是64 位,磁盤大小1T。
軟件環(huán)境:操作系統(tǒng)為Windows 10,深度學(xué)習(xí)框架為pyTorch 1.9.0,開發(fā)環(huán)境為Visual Studio Code,開發(fā)語(yǔ)言為Python,包管理器和環(huán)境管理器為Anaconda,GPU 為CUDA 11.1 和cuDNN 8.0.5。
本實(shí)驗(yàn)將采用YOLOv4 在COCO 數(shù)據(jù)集上訓(xùn)練出來的預(yù)訓(xùn)練模型進(jìn)行遷移學(xué)習(xí),將預(yù)訓(xùn)練權(quán)重用于垃圾檢測(cè)實(shí)驗(yàn)中進(jìn)行訓(xùn)練,輸入圖像尺寸為416×416。垃圾識(shí)別的使用遷移學(xué)習(xí)的流程圖如圖5所示。

圖5:垃圾識(shí)別任務(wù)流程圖
本實(shí)驗(yàn)的學(xué)習(xí)率設(shè)置采取了余弦退火衰減(Cosine Annealing)策略,余弦退火可以通過余弦函數(shù)來降低學(xué)習(xí)率。我們將初始的學(xué)習(xí)率設(shè)為0.001,最小學(xué)習(xí)率設(shè)為0.00001,總共訓(xùn)練100 個(gè)epoch。本實(shí)驗(yàn)采用Adam 對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行迭代優(yōu)化,我們將動(dòng)量設(shè)為0.9,衰減因子設(shè)為0.0002,mini-batch 設(shè)為8。
本節(jié)實(shí)驗(yàn)在CSPDarknet53 中加入注意力機(jī)制Triplet Attention,在實(shí)驗(yàn)參數(shù)設(shè)置統(tǒng)一的情況下,將YOLOv4 網(wǎng)絡(luò)和改進(jìn)后的網(wǎng)絡(luò)在上一章提到的垃圾數(shù)據(jù)集的訓(xùn)練集上進(jìn)行訓(xùn)練和驗(yàn)證,并且在測(cè)試集上進(jìn)行測(cè)試和評(píng)估。在實(shí)驗(yàn)過程中統(tǒng)計(jì)了mAP(平均精度的平均值)和FPS(速度)用來作為本實(shí)驗(yàn)主要的評(píng)價(jià)指標(biāo)。原YOLOv4 的實(shí)驗(yàn)結(jié)果和加入注意力機(jī)制后的實(shí)驗(yàn)結(jié)果如表2所示。

表2:注意力機(jī)制實(shí)驗(yàn)對(duì)比結(jié)果
由測(cè)試結(jié)果可知,加入Triplet Attention 注意力機(jī)制后雖然速度從28 降到26,但可以將mAP 從56.66%提升到58.57%,提升了1.91%。因此,我們可以得出加入Triplet Attention 到CSPDarknet53能夠在幾乎不增加參數(shù)和犧牲少量速度的條件下顯著提高模型的性能。
為了更直觀地展示檢測(cè)效果,YOLOv4 和改進(jìn)后的檢測(cè)結(jié)果如圖6所示。左圖為原YOLOv4,右圖為改進(jìn)后的算法,可以看出,改進(jìn)后的YOLOv4 對(duì)上述測(cè)試圖像有更好的檢測(cè)效果。

圖6:檢測(cè)效果對(duì)比圖
本文主要對(duì)YOLOv4 在垃圾分類上的應(yīng)用展開了研究,在研究的基礎(chǔ)上,針對(duì)垃圾數(shù)據(jù)集的特點(diǎn),對(duì)YOLOv4 網(wǎng)絡(luò)模型做出改進(jìn)。由于垃圾分類數(shù)據(jù)集同一個(gè)大類中小類和小類之間差距較小,而由于每個(gè)小類中也有不同尺度、也可能由于外力對(duì)形狀產(chǎn)生形變,各小類垃圾之間的差異較大,需要從更細(xì)節(jié)的特征來區(qū)分。我們將注意力機(jī)制Triplet attention 加入YOLOv4 主干網(wǎng)絡(luò)CSPDarknet53中來改進(jìn)主干網(wǎng)絡(luò),這樣可以使網(wǎng)絡(luò)在幾乎不添加參數(shù)的情況下能夠自動(dòng)學(xué)習(xí)進(jìn)行跨維度的交互,提升有效的特征通道權(quán)重,從而讓網(wǎng)絡(luò)重點(diǎn)關(guān)注重要的特征通道,提高網(wǎng)絡(luò)檢測(cè)精度。最后,基于以上改進(jìn),本文在自己制作的垃圾數(shù)據(jù)集上將原YOLOv4 算法與改進(jìn)后的算法進(jìn)行對(duì)比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果證明本文的改進(jìn)對(duì)垃圾檢測(cè)精度方面有所提升,說明此改進(jìn)對(duì)垃圾分類研究是有效的,對(duì)智能垃圾分類技術(shù)提供了參考。