彭強(qiáng)強(qiáng),黃璜
1. 北京航天自動(dòng)控制研究所,北京 100039
2. 北京科正平工程技術(shù)檢測(cè)研究院有限公司,北京 100007
目標(biāo)檢測(cè)算法是計(jì)算機(jī)視覺領(lǐng)域的基本任務(wù)之一,主要解決目標(biāo)對(duì)象分類及目標(biāo)位置預(yù)測(cè)等問題,是許多計(jì)算機(jī)視覺任務(wù)及相關(guān)應(yīng)用的基礎(chǔ)與前提,廣泛應(yīng)用于安保、圖像檢測(cè)及自動(dòng)駕駛等領(lǐng)域[1?2]。為取得更高的識(shí)別率,深度神經(jīng)網(wǎng)絡(luò)模型朝著越來越復(fù)雜的方向研究,而大多數(shù)復(fù)雜的網(wǎng)絡(luò)模型無法應(yīng)用在真實(shí)場(chǎng)景或部署在移動(dòng)設(shè)備中,因此高效的目標(biāo)檢測(cè)模型具有非常高的研究價(jià)值。通常情況下,輕量級(jí)目標(biāo)檢測(cè)網(wǎng)絡(luò)通過減少網(wǎng)絡(luò)結(jié)構(gòu)來降低訓(xùn)練后模型大小,從而使得網(wǎng)絡(luò)模型能夠更好地部署在移動(dòng)設(shè)備中,在不影響準(zhǔn)確率的情況下適應(yīng)更多的應(yīng)用場(chǎng)景。常見的輕量級(jí)網(wǎng)絡(luò)主要包括YOLOv3-Tiny[3]、 YOLOv4-Tiny[4]、MobileNet[5]、MobileNet V2[6]、ThunderNet[7]、ShuffleNet V1[8]、ShuffleNet V2[9]等,其中,YOLO系列算法[10?12]將復(fù)雜的目標(biāo)檢測(cè)任務(wù)利用回歸來解決,達(dá)到精度與速度之間的平衡。YOLOv3-Tiny 及YOLOv4-Tiny 網(wǎng)絡(luò)在原YOLO 系列的基礎(chǔ)上進(jìn)行結(jié)構(gòu)上的簡化,以犧牲一定的檢測(cè)精度為代價(jià),極大地提高了檢測(cè)速度。此外,在訓(xùn)練后的模型大小相近下,ShuffleNet 系列的檢測(cè)準(zhǔn)確率通常比MobileNet 的表現(xiàn)更好。ShuffleNet V1 采用了分組卷積和深度可分離卷積,在減少了模型的參數(shù)量以及運(yùn)算量的同時(shí)保證檢測(cè)的精度,但過多分組卷積的使用將會(huì)加重設(shè)備內(nèi)存的負(fù)擔(dān);ShuffleNet V2 摒棄了分組卷積的方法,轉(zhuǎn)而采用了ChannelSplit 操作,進(jìn)一步提升了模型準(zhǔn)確率并解決了設(shè)備內(nèi)存的問題,然而存在參數(shù)冗余以及空間信息丟失的問題。此類模型大多是利用修改和優(yōu)化網(wǎng)絡(luò)模型結(jié)構(gòu)來減少網(wǎng)絡(luò)的復(fù)雜度,但多數(shù)輕量級(jí)網(wǎng)絡(luò)無法兼顧特征圖中目標(biāo)的全局及局部的上下文信息,感受野較為有限,從而降低了網(wǎng)絡(luò)模型的檢測(cè)精度。
2020 年,一種輕量化的網(wǎng)絡(luò)模型NanoDet 被提出,該模型通過集成多種性能強(qiáng)勁的網(wǎng)絡(luò)模型,可同時(shí)兼顧精度和參數(shù)量,能夠較好滿足應(yīng)用實(shí)時(shí)性的要求。但存在以下問題:一是NanoDet對(duì)大目標(biāo)檢測(cè)效果明顯,但在特征提取的過程中容易忽視小目標(biāo),從而導(dǎo)致存在部分物體漏檢的可能;二是輕量化骨干網(wǎng)絡(luò)模型在特征傳遞的過程中網(wǎng)絡(luò)結(jié)構(gòu)以及卷積核的選擇并不完善,易損失部分感受野,且模型的泛化能力較差。
針對(duì)上述問題,本文在NanoDet 的基礎(chǔ)上提出一種面向移動(dòng)端應(yīng)用的實(shí)時(shí)目標(biāo)檢測(cè)網(wǎng)絡(luò):雙注意力機(jī)制NanoDet 網(wǎng)絡(luò)(double attention module nanodet,DAM-NanoDet)。首先,設(shè)計(jì)一種輕量化且高效的混合注意力模塊,利用雙池化方法同時(shí)提取通道特征,增加網(wǎng)絡(luò)對(duì)局部區(qū)域的關(guān)注度,更好地捕捉通道維度之間的依賴關(guān)系,并將空間注意力模塊在長寬方向進(jìn)行拆分,減少模型的計(jì)算量;其次,修改骨干網(wǎng)絡(luò)的結(jié)構(gòu),引入空洞卷積,增強(qiáng)模型的感受野。由實(shí)驗(yàn)結(jié)果可知,本文算法在嵌入式及移動(dòng)端設(shè)備的檢測(cè)中更為流暢和高效,整體性能和效率優(yōu)于已有的YOLO 系列等算法,具有較強(qiáng)的可移植性、實(shí)時(shí)性、魯棒性和實(shí)用價(jià)值。
NanoDet 是一個(gè)開源的實(shí)時(shí)目標(biāo)檢測(cè)模型,其整體結(jié)構(gòu)如圖1 所示,包括輕量化的主干網(wǎng)絡(luò)(backbone)、 路徑聚合網(wǎng)絡(luò) (path aggregation network,PAN)以及輕量化檢測(cè)頭(head)。其網(wǎng)絡(luò)結(jié)構(gòu)簡單、檢測(cè)速度快,因此適合在嵌入式設(shè)備及移動(dòng)端部署。
圖1 NanoDet 目標(biāo)檢測(cè)網(wǎng)絡(luò)模型
在NanoDet 網(wǎng)絡(luò)模型中,可供選擇的骨干網(wǎng)絡(luò)包括MobilNet 系列、 GhostNet[13]、 ShuffleNet V2 以及EfficientNet[14]等。其中ShuffleNet V2 在保證精度的同時(shí)模型參數(shù)量最小,對(duì)移動(dòng)端的推理也較為友好。因此,綜合平衡網(wǎng)絡(luò)的精度、計(jì)算量及權(quán)重等因素,本文選擇ShuffleNet V2 作為骨干網(wǎng)絡(luò)。由圖1 所示,在NanoDet 結(jié)構(gòu)中,去掉ShuffleNet V2 最后一卷積層,將提取的8、16、32 倍下采樣的特征圖作為后續(xù)路徑聚合網(wǎng)絡(luò)的輸入。
1.2.1 ShuffleNet V2 基本單元的改進(jìn)
在ShuffleNet V2 中包含2 個(gè)步長為1 的基本單元以及步長為2 的下采樣單元,方法上保留了ShuffleNet 中的通道劃分、通道混洗及深度可分離卷積等操作。其中深度可分離卷積包括逐點(diǎn)卷積的通道對(duì)齊以及卷積核為3×3 的深度卷積。相比于常規(guī)方法,ShuffleNet V2 基本單元的計(jì)算成本更低,而目標(biāo)檢測(cè)通常環(huán)境較為復(fù)雜,降低檢測(cè)成本同時(shí)會(huì)損失部分的檢測(cè)精度,導(dǎo)致模型精度不佳。因此,為了兼顧模型的精度與計(jì)算量,本文提出了一種改進(jìn)的ShuffleNet V2 基本單元,如圖2(b)所示。
圖2 改進(jìn)的ShuffleNet V2 單元
首先,ShuffleNet V2 單元1 結(jié)構(gòu)保持不變,將ShuffleNet V2 單元2 中3×3 的深度卷積替換為空洞率為2 的空洞卷積,在保證參數(shù)量不增加的同時(shí)加強(qiáng)模型的感受野。其次,在該結(jié)構(gòu)的右分支中1×1 卷積并不改變通道維度,只起到特征融合的作用,多層卷積將導(dǎo)致結(jié)構(gòu)冗余且泛化能力較差。因此,為進(jìn)一步減少模型的計(jì)算量以適應(yīng)移動(dòng)端的部署,去掉右分支最后一層的1×1 卷積,可以在保留模型泛化能力的同時(shí)減少模型的參數(shù)量。最后,ReLU 激活函數(shù)雖然計(jì)算復(fù)雜度較低且網(wǎng)絡(luò)訓(xùn)練收斂較快,但是ReLU 的函數(shù)曲線不平滑,易致使神經(jīng)元在訓(xùn)練時(shí)“壞死”。因此,在ShuffleNet V2 單元中摒棄ReLU 函數(shù),用曲線更為平滑且可以保留小部分負(fù)值的Mish[15]函數(shù),Mish 函數(shù)公式為
Mish 激活函數(shù)與ReLU 相似,無上界但有下界,但Mish 函數(shù)相比于ReLU 保留了部分負(fù)值,從而規(guī)避了模型中少數(shù)神經(jīng)元在反向傳播時(shí)失效的情況[16]。因此,更為平滑的Mish 函數(shù)可使得特征信息傳遞到較深的網(wǎng)絡(luò)中更加容易,模型更加容易訓(xùn)練,從而達(dá)到增強(qiáng)模型泛化能力的目的。
1.2.2 注意力機(jī)制
近年來,注意力機(jī)制在計(jì)算機(jī)視覺領(lǐng)域逐漸涌現(xiàn)出了巨大的潛能,通過對(duì)特征圖的不同區(qū)域或通道進(jìn)行加權(quán),使得神經(jīng)網(wǎng)絡(luò)對(duì)特征圖每個(gè)區(qū)域側(cè)重不同,從而提升網(wǎng)絡(luò)的特征提取能力。當(dāng)今許多注意力機(jī)制的改進(jìn)都致力于提升網(wǎng)絡(luò)的復(fù)雜性以提供更強(qiáng)大的性能[17?18],但同時(shí)也會(huì)降低模型的實(shí)時(shí)性[19]。針對(duì)上述問題,本文在ECANet 的基礎(chǔ)上設(shè)計(jì),提出一種輕量化高效注意力模塊(lightweight efficient attention module, LEAM)。該結(jié)構(gòu)主要包含通道注意力模塊和空間注意力模塊,兩者采用串聯(lián)方式。圖3 為該輕量化高效注意模塊示意。
圖3 輕量化高效注意力模塊
如圖3 所示,本文提出的LEAM 通道注意力模塊在ECA-Net 的基礎(chǔ)上改進(jìn)擠壓操作,由此獲得自適應(yīng)權(quán)值。首先,在改進(jìn)的ECA-Net 中通過全局平均池化(global average pooling,GAP)操作獲取全局的特征信息,但對(duì)于目標(biāo)特征較少或者目標(biāo)較小的情況,只關(guān)注全局信息會(huì)導(dǎo)致?lián)p失部分局部特征,而全局最大池化(global max pooling,GMP)操作則能彌補(bǔ)這個(gè)損失。因此本文同時(shí)引入了2 種池化方法,在捕獲通道維度依賴關(guān)系的同時(shí)獲取目標(biāo)的全局與局部的特征信息,從而輔助優(yōu)化檢測(cè)效果。特征圖經(jīng)過GAP 與GMP 獲得2 個(gè)維度為1×1×C 的通道特征后,將不同維度的通道特征進(jìn)行加權(quán),具體為
式中:XC為加權(quán)后通道特征,fA為GAP 操作,fM為GMP 操作,α為加權(quán)通道因子。
為避免通道互相獨(dú)立,在隨后的ECA 模塊基于權(quán)重共享的思路,引入自適應(yīng)卷積核大小為k的一維快速卷積并通過sigmiod 獲取通道的權(quán)重,以降低模型的復(fù)雜度并提高計(jì)算效率,自適應(yīng)卷積核大小k由下式?jīng)Q定:
式中|t|odd為最近的奇數(shù)t。
在目標(biāo)檢測(cè)網(wǎng)絡(luò)中引入通道注意力子模塊對(duì)各通道賦予不同的權(quán)值,提升了重點(diǎn)關(guān)注信息在特征中的權(quán)重,從而達(dá)到提升模型感受野的目的,對(duì)大目標(biāo)的檢測(cè)效果有較為顯著的提升。而小目標(biāo)物體的檢測(cè)效果依賴于空間區(qū)域的關(guān)注度。通過引入空間注意力機(jī)制捕捉全局作用域中任意區(qū)域的關(guān)系,但內(nèi)存與計(jì)算量隨之提升。
針對(duì)上述問題,本文設(shè)計(jì)了一種改進(jìn)的空間注意力子模塊與上述通道注意力子模塊進(jìn)行串聯(lián),在減少模塊計(jì)算量的同時(shí)改善網(wǎng)絡(luò)對(duì)小目標(biāo)的檢測(cè)效果,如圖4 所示。
圖4 改進(jìn)的空間注意力模塊
首先,對(duì)通道注意力子模塊輸出的特征圖進(jìn)行寬、高2 個(gè)方向的全局平均池化,得到大小為1×W×1 及H×1×1 的2 個(gè)特征向量。將2 個(gè)特征向量通過矩陣乘法生成H×W×1 的二維特征圖,最后通過與輸入特征圖加權(quán)逐點(diǎn)相乘的方式得到通道空間注意圖。對(duì)空間注意力機(jī)制的改進(jìn)進(jìn)一步減少了內(nèi)存的占用和計(jì)算負(fù)擔(dān)。
1.2.3 改進(jìn)的NanoDet 骨干網(wǎng)絡(luò)
圖5 為NanoDet 改進(jìn)前后骨干網(wǎng)絡(luò)對(duì)比圖。本文所提的骨干網(wǎng)絡(luò)模型結(jié)構(gòu)如圖5(b)所示,在ShuffleNet V2 的基礎(chǔ)上引入LEAM 注意力機(jī)制,并將ShuffleNet V2 單元2 替換為改進(jìn)后的ShuffleNet V2 單元2;使用Mish 激活函數(shù)替代ReLU 激活函數(shù),并為更好融合通道注意力摒棄最大池化層,而使用卷積核大小為3×3、步長為2 的深度分離卷積,豐富骨干網(wǎng)絡(luò)提出的特征。
圖5 NanoDet 改進(jìn)的骨干網(wǎng)絡(luò)對(duì)比
路徑聚合網(wǎng)絡(luò)使用了步長為2 的卷積將高層含豐富的語義信息的特征圖下采樣。首先為了簡化模型使其輕量化,舍棄PAN 中的所有卷積,只保留從NanoDet 骨干網(wǎng)絡(luò)輸出后的1×1 卷積來實(shí)現(xiàn)特征通道的維度對(duì)齊,且在路徑聚合網(wǎng)絡(luò)中的上、下采樣均用插值進(jìn)行替代。最后,與YOLO不同,選擇將多尺度的特征圖利用相加的方式進(jìn)行融合,因此極大減小了特征融合模塊的計(jì)算量。
檢測(cè)頭采用了FCOS 系列的共享權(quán)重檢測(cè)頭,即利用相同卷積對(duì)多尺度特征圖預(yù)測(cè)檢測(cè)框,然后每一層使用一個(gè)可學(xué)習(xí)的尺度因子作為系數(shù),并對(duì)檢測(cè)框進(jìn)行縮放。其優(yōu)點(diǎn)是能夠?qū)z測(cè)頭的參數(shù)量降低4/5。但對(duì)于輕量化模型,其模型通過中央處理單元(central processing unit,CPU)推理計(jì)算,共享權(quán)重失去了加速的意義,且在檢測(cè)頭非常輕量的情況下,模型的檢測(cè)能力還會(huì)進(jìn)一步降低,因此,在NanoDet 中一層特征對(duì)應(yīng)一組卷積。此外,F(xiàn)COS 檢測(cè)頭計(jì)算量較大,在邊框回歸和分類上一共有8 個(gè)256 通道的卷積。為最大程度的輕量化,選擇深度可分離卷積,并且減少卷積的堆疊數(shù)。將256 維壓縮至96 維,減少網(wǎng)絡(luò)計(jì)算量的同時(shí)獲得并行加速的能力,輕量化處理后的檢測(cè)頭如圖6 所示。
圖6 輕量化檢測(cè)頭
實(shí)驗(yàn)以Pytorch 深度學(xué)習(xí)框架為基礎(chǔ),編程語言為Python3.7,軟件環(huán)境為Linux 平臺(tái),操作系統(tǒng)為Ubuntu18.04。模型訓(xùn)練在GPU 型號(hào)為NVIDIA GeForce GTX 1 660 Ti 上的設(shè)備進(jìn)行,顯存為8 G。測(cè)試使用的CPU 型號(hào)為Intel(R) Core(TM) i7-9750H。在實(shí)驗(yàn)中,設(shè)置檢測(cè)閾值為0.5,訓(xùn)練迭代次數(shù)為100 次,初始學(xué)習(xí)率設(shè)置為0.02。
本文在MS COCO(common objects in context)數(shù)據(jù)集上[20]完成對(duì)改進(jìn)網(wǎng)絡(luò)的訓(xùn)練、驗(yàn)證和測(cè)試,MS COCO2017 數(shù)據(jù)集是微軟在2017 年整理的一個(gè)用于檢測(cè)識(shí)別的數(shù)據(jù)集,此外還提供目標(biāo)分割和對(duì)圖像的語義文本描述信息。數(shù)據(jù)集總共有90 個(gè)類別且包含3 個(gè)部分,其中,train-2017 為訓(xùn)練集,共有11 萬余張訓(xùn)練圖片;val-2017 為實(shí)驗(yàn)的驗(yàn)證集,共包含5 000 多張圖片樣本;test-2017 則共有4 萬余張圖片樣本為測(cè)試集。
在目標(biāo)檢測(cè)領(lǐng)域中,檢測(cè)精確度P和召回率R是2 個(gè)基本的指標(biāo)。精確度和召回率是根據(jù)以下4 個(gè)指標(biāo)來計(jì)算:
1)真正類(true positive,TP)NTP:模型預(yù)測(cè)為正的正樣本;
2)真負(fù)類(true negative,TN)NTN:模型預(yù)測(cè)為正的負(fù)樣本;
3)假負(fù)類(false negative,F(xiàn)N)NFN:模型預(yù)測(cè)為負(fù)的負(fù)樣本;
4)假正類(false positive,F(xiàn)P)NFP:模型預(yù)測(cè)為負(fù)的正樣本。
因此,精確度P的計(jì)算公式為
召回率R的公式為
平均精確度(mean average precision, mAP)mAP為
式中:P(R)為在不同的置信度閾值下,由檢測(cè)精確度和召回率所構(gòu)造的曲線, 而AP(average precision)為模型的均值精度,即P(R)曲線與坐標(biāo)軸圍起來的面積,對(duì)數(shù)據(jù)集中的所有類別求平均即得到mAP。為了分析檢測(cè)網(wǎng)絡(luò)對(duì)不同尺度目標(biāo)的檢測(cè)效果,COCO 數(shù)據(jù)集還使用了APS、APM、APL這3 個(gè)指標(biāo)分別表示對(duì)小目標(biāo)、中目標(biāo)和大目標(biāo)的mAP 值。本文實(shí)驗(yàn)主要使用上述指標(biāo)衡量模型的檢測(cè)性能。
在對(duì)檢測(cè)模型各模塊進(jìn)行輕量化后,得到了本文的目標(biāo)檢測(cè)模型。在輸入分辨率為320×320及426×426 的情況下選取test2017 的數(shù)據(jù)集進(jìn)行測(cè)試。表1 列出了本文目標(biāo)檢測(cè)算法與其他模型的對(duì)比,所有數(shù)據(jù)均在CPU 設(shè)備上獲得。
表1 在分辨率320×320 下本文目標(biāo)檢測(cè)算法與其他模型的性能對(duì)比
由表1 可知,DAM-NanoDet 算法在COCO2017數(shù)據(jù)集上輸入分辨率為320×320 的測(cè)試中,mAP 達(dá)到了23.2,模型參數(shù)量相較于原NanoDet算法提升了0.22 M,網(wǎng)絡(luò)延遲有較小增加,但檢測(cè)精度有顯著提升。由對(duì)比可知,本文算法在小目標(biāo)及大目標(biāo)的校測(cè)效果上提升明顯,綜合效果好于原NanoDet、ThunderNet、YOLO-Nano 等輕量級(jí)網(wǎng)絡(luò)模型。整個(gè)模型每秒浮點(diǎn)運(yùn)算次數(shù)(floatingpoint operations per second,F(xiàn)LOPS)僅有1.06 B,模型的參數(shù)量僅為1.17 MB,復(fù)雜度較低。
由表2 可知,DAM-NanoDet 算法在COCO2017數(shù)據(jù)集上輸入分辨率為416×416 的測(cè)試中,mAP 達(dá)到了25.6,相比原算法提高了2.1 個(gè)百分點(diǎn),AP50 及AP75 明顯高于其他算法,效果好于原NanoDet 算法以及YOLO 系列的輕量級(jí)模型。整個(gè)模型FLOPS 僅有1.52 B,模型的參數(shù)量僅為1.17 MB在有效減小應(yīng)用程序體積的條件下,17.64 ms的延遲同時(shí)保證在移動(dòng)端部署的檢測(cè)速度。
表2 在分辨率426×426 下本文目標(biāo)檢測(cè)算法與其他模型的性能對(duì)比
2.4.1 PC 端實(shí)驗(yàn)結(jié)果
圖7 和圖8 分別為本文所述目標(biāo)檢測(cè)算法在COCO2017 數(shù)據(jù)集上和安卓手機(jī)端對(duì)目標(biāo)的檢測(cè)結(jié)果。
圖7 改進(jìn)NanoDet 模型目標(biāo)檢測(cè)效果
圖8 安卓手機(jī)端目標(biāo)檢測(cè)結(jié)果
圖7 為PC 端的4 組目標(biāo)檢測(cè)效果圖。從圖7中可以明顯看出,本文算法在大、中、小目標(biāo)中都有較高的檢測(cè)精確度,且在目標(biāo)存在嚴(yán)重遮擋的情況下依舊能準(zhǔn)確地檢測(cè)出目標(biāo)。
2.4.2 算法在移動(dòng)端的部署實(shí)驗(yàn)
移動(dòng)端實(shí)驗(yàn)的硬件條件為Redmi K30 Pro 智能手機(jī),配高通驍龍865 處理器,運(yùn)行內(nèi)存為8 GB。安卓手機(jī)端目標(biāo)檢測(cè)結(jié)果如圖8 所示。從圖8 中可以看出本文檢測(cè)算法能夠很好地定位目標(biāo)并識(shí)別出物體的類別,具有較高的定位準(zhǔn)確度和較好的檢測(cè)效果。安卓手機(jī)端的平均檢測(cè)幀率可以達(dá)到60 幀/秒以上,能夠滿足實(shí)時(shí)性要求。
為了滿足目標(biāo)檢測(cè)在移動(dòng)端部署條件下對(duì)于目標(biāo)檢測(cè)算法中實(shí)時(shí)性以及準(zhǔn)確性的要求,本文提出了一種可部署在移動(dòng)端的實(shí)時(shí)目標(biāo)檢測(cè)算法。
1)考慮到目標(biāo)檢測(cè)的實(shí)時(shí)性及計(jì)算復(fù)雜度等要求,設(shè)計(jì)了一種輕量化高效注意力模塊,增強(qiáng)了特征通道信息以及空間信息的表達(dá)能力,在計(jì)算量及精度之間保證更好的平衡。
2)改進(jìn)了骨干網(wǎng)絡(luò)的結(jié)構(gòu),加強(qiáng)網(wǎng)絡(luò)的泛化效果,得到了一個(gè)兼顧精度、速度和體積的檢測(cè)模型。實(shí)驗(yàn)結(jié)果表明,本文算法相比YOLO 系列模型參數(shù)量更低且準(zhǔn)確度更高,更適合部署在移動(dòng)端設(shè)備上。 在未來的研究中,還需要進(jìn)一步結(jié)合先進(jìn)的深度學(xué)習(xí)技術(shù)在目標(biāo)檢測(cè)效率以及模型的訓(xùn)練速度上進(jìn)一步研究。