曹遠(yuǎn)杰,高瑜翔
(1.成都信息工程大學(xué) 通信工程學(xué)院,成都 610225;2.氣象信息與信號(hào)處理四川省高校重點(diǎn)實(shí)驗(yàn)室,成都 610225)
卷積神經(jīng)網(wǎng)絡(luò)自提出以來在計(jì)算機(jī)視覺領(lǐng)域被廣泛應(yīng)用。在生活中運(yùn)用智能機(jī)器可以節(jié)省人力資源,例如自動(dòng)售水機(jī)、無人超市等。但是當(dāng)售水機(jī)部署在學(xué)校等人流量較多的地方時(shí),售水機(jī)暴露出效率低、耗時(shí)長等缺點(diǎn)。假設(shè)給機(jī)器安裝上飲料自動(dòng)識(shí)別,飲料選擇和刷臉支付一體化會(huì)使售水機(jī)效率更高。因此,飲料等商品的識(shí)別對(duì)于無人售賣機(jī)、智能化超市等是非常必要的。
深度學(xué)習(xí)在目標(biāo)識(shí)別與檢測上有著較強(qiáng)的魯棒性,深層神經(jīng)網(wǎng)絡(luò)能夠在復(fù)雜環(huán)境下對(duì)目標(biāo)具有較好的識(shí)別性能。隨著對(duì)目標(biāo)檢測性能要求的提高,研究人員提出了許多深層神經(jīng)網(wǎng)絡(luò)。例如,2014 年ILSVRC 競賽提出的VGGNet[1]和 GoogleNet[2],2015 年提出 的ResNet 以及后來提出的DenseNet[3]等。但是隨著性能的提高卷積層數(shù)也隨之增加,從而出現(xiàn)權(quán)重參數(shù)較大和設(shè)備推理速度慢的問題。因此,上述方法在實(shí)際應(yīng)用中常因?yàn)閰?shù)量高和效率低而不能部署在資源有限的設(shè)備上。
為解決效率和存儲(chǔ)問題,研究人員采取剪枝[4]、量化[5]、知識(shí)蒸餾[6]以及設(shè)計(jì)輕量化網(wǎng)絡(luò)的方法來提高推理的速度。例如針對(duì)參數(shù)和推理速度推出的YOLOv3-Tiny[7]網(wǎng)絡(luò)是YOLOv3[8]網(wǎng)絡(luò)的一個(gè)簡化版;邵偉平等[9]提出采用MobileNet 作為YOLOv3 主干的網(wǎng)絡(luò),在基本沒有精度損失的情況下模型尺寸減小到26 MB,相對(duì)于YOLOv3 減少了90%;劉萬軍等[10]提出采用深度可分離卷積[11]構(gòu)建反殘差模塊來替換YOLOv3-Tiny 的主干網(wǎng)絡(luò),在精度無損失的情況下模型尺寸減小到18.2 MB,相對(duì)于YOLOv3-Tiny減少了47.7%。但是以上這些網(wǎng)絡(luò)相對(duì)于內(nèi)存較低的處理器還是過于龐大。
近年來研究人員設(shè)計(jì)一些高效的網(wǎng)絡(luò)模型,例如IANDOLA 等[12]提出SqueezeNet,主要是將3×3 的卷積替換為1×1 的卷積,通過減少3×3 卷積的通道數(shù)等來減小計(jì)算量和參數(shù)量;HOWARD 等[13-14]提出了MobileNets,采用大量的深度可分離卷積設(shè)計(jì)的神經(jīng)網(wǎng)絡(luò),該結(jié)構(gòu)可以很大程度地減少參數(shù)量和計(jì)算量。但是使用深度可分離卷積也存在缺陷,例如EfficientNet網(wǎng)絡(luò)[15]使用了大量低計(jì)算量(FLOPs)和高數(shù)據(jù)讀寫量的操作。由于GPU 訪存帶寬的限制,網(wǎng)絡(luò)浪費(fèi)大量的時(shí)間在顯存中讀寫數(shù)據(jù)。當(dāng)顯存較低時(shí),即使計(jì)算量較低推理速度也很慢。例如EfficientNet-B3 的計(jì)算量不到ResNet50[16]的1/2,推理速度卻比ResNet50 慢了1 倍。本文針對(duì)目標(biāo)檢測網(wǎng)絡(luò)計(jì)算量、參數(shù)量大以及設(shè)備推理速度慢等問題,設(shè)計(jì)一種基于GhostNet[17]殘差結(jié)構(gòu)網(wǎng)絡(luò)架構(gòu)作為YOLOv4-Tiny 的主干來降低計(jì)算量和參數(shù)量,以提高運(yùn)算效率。
YOLO 算法[18-19]是近年來較受歡迎的神經(jīng)網(wǎng)絡(luò)算法,該算法使用回歸的方法進(jìn)行目標(biāo)檢測。YOLO 用一個(gè)神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)可以同時(shí)預(yù)測出預(yù)測框和類別概率,具有執(zhí)行速度快、檢測效率高的特點(diǎn)。YOLOv4[20]是2020 年提出的神經(jīng)網(wǎng)絡(luò)算法,YOLOv4-Tiny 是縮小版的YOLOv4,YOLOv4-Tiny 結(jié)構(gòu)如圖1 所示。
圖1 YOLOv4-Tiny 網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 YOLOv4-Tiny network structure
YOLOv4-Tiny 模型尺寸僅為23 MB,有21 層卷積層、3 層Maxpool 層和2 層步長為2 的卷積。當(dāng)輸入為416 尺寸時(shí)輸出為13×13 和26×26 兩種大小的輸出層[21]。圖1 中虛線部分為Resblock_body[22],該結(jié)構(gòu)經(jīng)過第一個(gè)卷積層后將特征圖分組后進(jìn)行后續(xù)的操作。YOLOv4-Tiny 采用了兩層兩步長的普通卷積和3 個(gè)Resblock_body 結(jié)構(gòu)作為主干。采用Resblock_body 結(jié)構(gòu)提高了特征的復(fù)用,相較于YOLOv3-Tiny,采用傳統(tǒng)卷積作為主干網(wǎng)絡(luò)有著更好的特征提取,在加快推理速度的同時(shí)使得參數(shù)更少。
在經(jīng)過卷積后的特征圖是比較相似的,GhostNet的思想是將傳統(tǒng)的卷積分兩步進(jìn)行:第1 步使用較少的卷積核生成一部分特征圖;第2 步對(duì)第1 步生成的特征圖使用比較簡單的計(jì)算獲得另一部分特征圖,最后將兩組特征圖拼接在一起。第2 個(gè)部分的計(jì)算可以采用3×3或5×5的通道卷積來替代。標(biāo)準(zhǔn)卷積與GhostNet卷積過程如圖2 所示。
圖2 標(biāo)準(zhǔn)卷積與GhostNet 卷積Fig.2 Standard convolution and GhostNet convolution
假設(shè)輸入特征圖為Di×Di×M,標(biāo)準(zhǔn)卷積核的寬和高為K,GhostNet 卷積的第1 部分卷積核的寬和高為K′,第2 部分為K′′,輸出特征圖為Do×Do×N。
標(biāo)準(zhǔn)卷積的計(jì)算量為:
GhostNet 卷積的計(jì)算量為:
標(biāo)準(zhǔn)卷積的參數(shù)量為:
GhostNet 卷積的參數(shù)量為:
針對(duì)Resblock_body 計(jì)算量大、參數(shù)量大、推理速度慢等問題,本文提出采用GhostNet 殘差結(jié)構(gòu)。該結(jié)構(gòu)使用標(biāo)準(zhǔn)卷積與點(diǎn)卷積進(jìn)行降通道,這里第2層卷積層通道為第1 層卷積層的1/2,然后使用5×5 的通道卷積獲得另一半特征圖,通過一個(gè)Concat 層拼接起來后與第一層特征圖相加。GhostNet 殘差結(jié)構(gòu)如圖3 所示。
圖3 GhostNet 殘差結(jié)構(gòu)Fig.3 GhostNet residual structure
假設(shè)經(jīng)過卷積過后沒有改變特征圖大小,GhostNet 殘差結(jié)構(gòu)與Resblock_body 結(jié)構(gòu)的輸入特征圖大小都為F×F×P,第1 個(gè)卷積層大小都為C×C×P×Q,則GhostNet 殘差結(jié)構(gòu)與Resblock_body 結(jié)構(gòu)計(jì)算量之比為:
在步長為1 的卷積時(shí),計(jì)算量之比等于參數(shù)量之比。P、Q為輸入輸出通道數(shù),一般遠(yuǎn)大于C,根據(jù)式(5)可以明顯看出,當(dāng)輸入特征圖相同時(shí),GhostNet殘差結(jié)構(gòu)在參數(shù)量和計(jì)算量上都比YOLOv4-Tiny 的Resblock_body 結(jié)構(gòu)更低,理論上推理速度也更快。
YOLO-GhostNet 網(wǎng)絡(luò)各層參數(shù)如表1 所示。
表1 YOLO-GhosNet 網(wǎng)絡(luò)參數(shù)Table 1 YOLO-GhosNet network parameters
YOLOv4-Tiny 網(wǎng)絡(luò)相對(duì)于YOLOv3-Tiny 網(wǎng)絡(luò),無論是在識(shí)別精度還是模型尺寸上都有不少的改進(jìn)。但是網(wǎng)絡(luò)在類似于CPU 這樣的處理器上,還是顯得有些龐大。因此,本文將GhostNet 殘差結(jié)構(gòu)代替YOLOv4-Tiny 的Resblock_bod 結(jié)構(gòu),將網(wǎng)絡(luò)大部分3×3 標(biāo)準(zhǔn)卷積采用由一個(gè)點(diǎn)卷積和一個(gè)5×5 的通道卷積所組成的GhostNet 卷積替代。由式(1)和式(2)可知,使用GhostNet卷積替代標(biāo)準(zhǔn)卷積會(huì)隨著輸入通道的變化減少計(jì)算量和參數(shù)量,當(dāng)輸入通道越大時(shí),計(jì)算量減小越多。YOLO-GhostNet 相比于YOLOv4-Tiny 網(wǎng)絡(luò)計(jì)算量減小為原來的31%,參數(shù)量減小為原來的10%。
本文實(shí)驗(yàn)采用10 097張飲料數(shù)據(jù)集,分別包括雪碧、可樂、綠茶和王老吉4種飲料,每個(gè)種類大約2 500張。測試集908張,訓(xùn)練集8 281張,驗(yàn)證集908張。本次實(shí)驗(yàn)在Windows10操作系統(tǒng)下進(jìn)行,軟件平臺(tái)為PyCharm,訓(xùn)練與驗(yàn)證框架為Keras Tensorflow1.13-GPU 以及CPU 版本。硬件為AMD Ryzen5 3500X型號(hào)CPU,GTX1060 6G型號(hào)GPU,Batchsize設(shè)置為4,學(xué)習(xí)率采用0.001與0.000 1訓(xùn)練100個(gè)epoch,直到Loss不再變化自動(dòng)終止訓(xùn)練。
4 種飲料在2 個(gè)算法檢測精度如圖4 所示。由圖4 可知,YOLO-GhostNet 在可樂和綠茶2 個(gè)種類的精度比YOLOv4-Tiny 算法高,在另外2 種種類略微低一點(diǎn)。平均精確度均值(mAP)為79.43%,相較于YOLOv4-Tiny 基本沒有損失。YOLO-GhostNet 網(wǎng)絡(luò)有12 個(gè)BN 層,BN 層在訓(xùn)練時(shí)對(duì)算法有用,但是在推理時(shí)會(huì)增加算法訪存量和復(fù)雜度。由于BN 層在做線性運(yùn)算,因此可以將BN 層融入到卷積層。由于深度學(xué)習(xí)網(wǎng)絡(luò)有較好的魯棒性,進(jìn)行BN 層的融合基本不會(huì)影響精度,還可以加快推理速度。BN 層優(yōu)化前后部分參數(shù)如表2 所示。
圖4 YOLO-GhostNet 與YOLOv4-Tiny 算法檢測精度對(duì)比Fig.4 Comparison of detection accuracy between YOLO-GhostNet and YOLOv4-Tiny algorithm
表2 YOLO-GhostNet 網(wǎng)絡(luò)BN 層優(yōu)化前后部分參數(shù)Table 2 Some parameters before and after BN layer optimization YOLO-GhostNet network
由表2 可知,經(jīng)過BN 層優(yōu)化后YOLO-GhostNet網(wǎng)絡(luò)在各種類的精度并沒有損失,反而在參數(shù)個(gè)數(shù)上減少了4 632 個(gè)參數(shù),對(duì)于參數(shù)影響雖然不大,但是在一定程度上減少了網(wǎng)絡(luò)訪存量,使得在CPU 上的推理速度快了22%,GPU 上的推理速度快了10%。
YOLO-GhostNet 與YOLOv4-Tiny 以及經(jīng)過BN 層優(yōu)化后的YOLO-GhostNet算法各項(xiàng)參數(shù)如表3 所示。
表3 YOLO-GhostNet 與YOLOv4-Tiny 各參數(shù)對(duì)比Table 3 Comparison of parameters between YOLO-GhostNet and Yolov4-Tiny
由表3可知,YOLO-GhostNet相較于YOLOv4-Tiny算法在輸入為416×416×3 大小時(shí),平均精確度基本無損失,模型尺寸和計(jì)算量卻下降較多,大幅減少了設(shè)備的資源消耗,提高了模型的性價(jià)比,在推理時(shí)間上由于GPU 對(duì)卷積加速支持程度的區(qū)別,推理時(shí)間并沒有快很多,而在CPU 處理器上運(yùn)行時(shí),優(yōu)勢可以明顯體現(xiàn)出來,對(duì)CPU 和計(jì)算資源不足的處理器是非常合適的。
本文設(shè)計(jì)一種YOLO-GhostNet 輕量級(jí)網(wǎng)絡(luò)模型。該模型采用GhostNet 殘差結(jié)構(gòu)代替原網(wǎng)絡(luò)的Resblock_body,能夠解決計(jì)算量和參數(shù)量大以及推理速度慢而難以部署到計(jì)算資源少的設(shè)備的問題。此外,將YOLO-GhostNet 算法運(yùn)用NCNN 框架經(jīng)過半精度量化和BN 層優(yōu)化后,在AMD Ryzen5 3500X 型號(hào)CPU 上推理時(shí)處理一張圖片只需要45 ms,相對(duì)YOLOv4-Tiny 算法速度提高58%,量化后的模型大小為1.1 MB,可在CPU 上達(dá)到實(shí)時(shí)檢測的效果。