王少韓,劉淼
(201620 上海市 上海工程技術(shù)大學(xué) 機(jī)械與汽車工程學(xué)院)
圖像識(shí)別在無(wú)人機(jī)、醫(yī)學(xué)、自動(dòng)駕駛等許多熱門領(lǐng)域有著廣泛的運(yùn)用。在一些復(fù)雜場(chǎng)景,深度學(xué)習(xí)有非常好的性能。卷積神經(jīng)網(wǎng)絡(luò)近十年飛速發(fā)展,逐漸成為主流算法。在實(shí)時(shí)監(jiān)控方面,YOLO[1-2]算法是應(yīng)用最廣的算法之一,有良好的準(zhǔn)確率。YOLO 自發(fā)布以來(lái),版本已經(jīng)到了第5 代。本文使用的Tiny-YOLOv3[3]是YOLOv3 版本的改進(jìn)版,其模型相對(duì)較小,檢測(cè)速度也有較大提升,然而它在計(jì)算能力較低設(shè)備上的性能表現(xiàn)不是特別好,所以引進(jìn)了SqueezeNet[4]中的Fire 模塊,并用緊密連接鏈接,將網(wǎng)絡(luò)部分卷積層改成Fire 模塊,從而壓縮了模型和加快了檢測(cè)速度。
本文主要介紹了改進(jìn)版的Tiny-YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu),在自建的測(cè)試數(shù)據(jù)集上獲得了實(shí)驗(yàn)結(jié)果,得到了幾個(gè)改進(jìn)的Tiny-YOLOv3 模型的主要衡量指標(biāo),并與原模型以及其他模型進(jìn)行了比較,并得出實(shí)驗(yàn)結(jié)論。
YOLOv3 是 YOLO 的第3 版,借鑒了 ResNet[5]、RetinaNet[6]、SSD[7]等網(wǎng)絡(luò)的結(jié)構(gòu)和做法,如多尺度融合預(yù)測(cè),進(jìn)一步提高了速度和準(zhǔn)確率,特別是在檢測(cè)小目標(biāo)方面有了比較顯著的提高。YOLOv3的網(wǎng)絡(luò)結(jié)構(gòu)如圖1 所示??蓪⒃摼W(wǎng)絡(luò)分成2 部分:特征提取部分和預(yù)測(cè)部分。特征提取部分為Darknet53,YOLOv3 網(wǎng)絡(luò)為全卷積(沒有池化層,通過調(diào)整卷積的步長(zhǎng)進(jìn)行下采樣);預(yù)測(cè)部分,共有3 層輸出,分別是13 ×13 × 255,26 ×26 ×255,52 ×52 ×255。
圖1 YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu)Fig.1 Network structure of YOLOv3
YOLOv3 的3 個(gè)基本組件:
(1)CBL:是YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)中的最小組件,由Conv+Bn+Leaky_relu 激活函數(shù)三者組成。
(2)Res unit:借鑒Resnet 網(wǎng)絡(luò)中的殘差結(jié)構(gòu),讓網(wǎng)絡(luò)可以構(gòu)建得更深。
(3)ResX:由1 個(gè)CBL 和X 個(gè)殘差組件構(gòu)成,是YOLOv3 中的大組件。每個(gè)Res 模塊前面的CBL都起到下采樣的作用。
YOLOv3 主要的改進(jìn)有:調(diào)整了網(wǎng)絡(luò)結(jié)構(gòu);利用多尺度特征進(jìn)行對(duì)象檢測(cè);識(shí)別對(duì)象分類用logistic 取代了softmax;借鑒了殘差網(wǎng)絡(luò)等。v3 版本主要是對(duì)小目標(biāo)檢測(cè)進(jìn)行了性能提升。
Tiny-YOLOv3 是一個(gè)輕量級(jí)的算法,它本身 是YOLO算法v3 版本的改進(jìn),但隨著識(shí)別任務(wù)的復(fù)雜程度及難度越來(lái)越大,Tiny-YOLOv3 逐漸不太適合計(jì)算能力比較差的設(shè)備。從圖 2 網(wǎng)絡(luò)結(jié)構(gòu)可以看出,它由主要是用于圖像特征提取的7 個(gè)卷積層和6 個(gè) maxpool層組成,網(wǎng)絡(luò)結(jié)構(gòu)非常小,可以獲得2 個(gè)不同尺度的特征圖,從而確保大小物體的檢測(cè)準(zhǔn)確率。Tiny-YOLOv3 為保證準(zhǔn)確率,使用了含有512 和 1 024 個(gè)卷積核的多個(gè)卷積層,而卷積核過多,會(huì)造成進(jìn)行深度學(xué)習(xí)時(shí)所需的參數(shù)較多,使得存儲(chǔ)也比較大,因此檢測(cè)速度受到很大限制,但比v3 版本的物體識(shí)別速度快。
圖2 Tiny-YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Network structure of Tiny-YOLOv3
Tiny-YOLOv3 使用許多帶有很多參數(shù)的卷積層,這導(dǎo)致在受限環(huán)境中大量參數(shù)、大量存儲(chǔ)會(huì)極大地限制檢測(cè)速度。Tiny-YOLOv3 的另一個(gè)問題是檢測(cè)精度不是很高,這主要是網(wǎng)絡(luò)中不合理的數(shù)據(jù)壓縮方法導(dǎo)致的。為解決此類問題,本文使用了改進(jìn)版的Tiny-YOLOv3 的網(wǎng)絡(luò)結(jié)構(gòu),具體網(wǎng)絡(luò)結(jié)構(gòu)如圖3 所示。該算法模型引入了Fire 模塊實(shí)現(xiàn)網(wǎng)絡(luò)參數(shù)壓縮,同時(shí),為提升模型性能,利用緊密連接將Fire 模塊鏈接在一起,對(duì)原網(wǎng)絡(luò)結(jié)構(gòu)的其他部分未做改動(dòng)。
圖3 改進(jìn)算法的網(wǎng)絡(luò)結(jié)構(gòu)Fig.3 Network structure of improved algorithm
卷積層如果全被Fire 模塊代替,檢測(cè)效率就會(huì)下降;如果保留具有少于256 個(gè)卷積核的少量卷積層,而不是由Fire 模塊代替,準(zhǔn)確率將增加5%左右,模型大小僅增加2 MB。因此對(duì)Tiny-YOLOv3 網(wǎng)絡(luò)的部分卷積層用Fire 模塊代替。
為了更有效地使用Fire 模塊,其嵌入位置要合理。改進(jìn)的Tiny-YOLOv3 網(wǎng)絡(luò)結(jié)構(gòu)共引入8 個(gè)Fire 模塊,用5 個(gè)Fire 模塊取代原網(wǎng)絡(luò)中第6 和第7 卷積層。第1 個(gè)輸出層之前的一個(gè)卷積層被替換為Fire 模塊,第7 和第8 個(gè)Fire 模塊也被Fire 模塊代替。這樣的改進(jìn)可以極大減少參數(shù),但網(wǎng)絡(luò)的深度和寬度并沒有很大改變,特征提取也沒有變?nèi)酢?/p>
引入Fire 模塊不僅減少了數(shù)據(jù)模型,并且加深了網(wǎng)絡(luò)。Fire 模塊由2 部分組成:壓縮數(shù)據(jù)部分的1×1 的卷積層和數(shù)據(jù)擴(kuò)展部分的1×1 和3×3的卷積層的組合。1×1 的卷積層是一種十分有效減少參數(shù)個(gè)數(shù)的方法,并且1×1 的卷積層只有1個(gè)參數(shù)需要訓(xùn)練和學(xué)習(xí),檢測(cè)精度不會(huì)降低很多。圖4 是Fire 模塊的網(wǎng)絡(luò)結(jié)構(gòu)。
圖4 Fire 模塊的網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 Network structure of Fire module
由于加入了Fire 模塊,特征提取比較弱,為了加強(qiáng)特征提取,在Fire 模塊之間使用了緊密連接。簡(jiǎn)單地講,在Fire 模塊中,每一層的輸入是前幾層的所有輸出,這樣的做法可以極大地保證特征提取和火災(zāi)識(shí)別準(zhǔn)確率。Fire 模塊之間的緊密連接如圖5 所示。
圖5 改進(jìn)Tiny-YOLOv3 之間的緊密連接Fig.5 Tight connection improve between Tiny-YOLOv3
當(dāng)特征圖的尺寸較大時(shí),使用緊密連接會(huì)使計(jì)算量變大,實(shí)時(shí)性會(huì)受到很大影響。因此測(cè)試了3 個(gè)不同類型密集連接的網(wǎng)絡(luò)實(shí)時(shí)性能,如表1 所示,本文使用的密集連接方式具有最佳的實(shí)時(shí)性。
表1 不同類型的緊密連接實(shí)時(shí)性能Tab.1 Real-time performance of different types of tight connections
軟件環(huán)境為Win10 系統(tǒng),Python3.7.2,深度學(xué)習(xí)框架為tensorflow。CPU 為i7-9750H,顯卡為GTX1650,內(nèi)存是16 GB。
Pascal VOC 和 COCO 數(shù)據(jù)集主要是用來(lái)進(jìn)行訓(xùn)練和驗(yàn)證,并得出權(quán)重,最后利用遷移學(xué)習(xí)將訓(xùn)練好的權(quán)重應(yīng)用在改進(jìn)的算法上,并用自建的火災(zāi)圖像測(cè)試數(shù)據(jù)集進(jìn)行訓(xùn)練,最后得出性能指標(biāo)并進(jìn)行檢測(cè)。
前2 個(gè)數(shù)據(jù)集應(yīng)用比較廣泛,特別是在人工智能領(lǐng)域。Pascal VOC 的數(shù)據(jù)集包括PASCAL VOC 2007 和 Pascal VOC 2012 等。有 20 種物體,3 萬(wàn)張圖片左右。當(dāng)計(jì)算 AP 值和 mAP 時(shí),默認(rèn)值 0.5 用于(IOU)。COCO 的數(shù)據(jù)集比 Pascal VOC 更難訓(xùn)練。對(duì)于目標(biāo)檢測(cè)算法,模型的性能通常更傾向于COCO。COCO 中有 80 個(gè)物品類別,每張圖像中包含的目標(biāo)數(shù)量是 Pascal VOC 的 3 倍。
而本實(shí)驗(yàn)中用到的數(shù)據(jù)集是通過自己網(wǎng)上扒取的400 張火災(zāi)照片,并加入了30 張非火災(zāi)圖像,這樣做是為了使模型的性能更加優(yōu)越。
在對(duì)數(shù)據(jù)集進(jìn)行訓(xùn)練之前,首先將 Darknet53加載到改進(jìn)版的 Tiny-YOLOv3 中,得到一個(gè)預(yù)訓(xùn)練的網(wǎng)絡(luò)模型,然后通過預(yù)訓(xùn)練模型對(duì)數(shù)據(jù)集訓(xùn)練,得到最優(yōu)的模型和權(quán)重,最后進(jìn)行檢測(cè)。檢測(cè)結(jié)果如圖6 所示。
圖6 火災(zāi)圖片的檢測(cè)結(jié)果Fig.6 Detection results of fire pictures
從圖7 數(shù)據(jù)訓(xùn)練的損失曲線可以看出,2 種模型隨著訓(xùn)練迭代次數(shù)的增加,損失穩(wěn)定在一個(gè)數(shù)值,并上下波動(dòng);從圖7 還可以看出,改進(jìn)的模型在損失方面有著明顯的優(yōu)勢(shì)。
圖7 數(shù)據(jù)訓(xùn)練的損失曲線Fig.7 Loss curve of data training
BFLOP/s 通常用來(lái)衡量模型所需的計(jì)算能力。BFLOP/s 越大,對(duì)器件的要求就越高。由表 2 可知,改進(jìn) Tiny-YOLOv3 的 BFLOP/s 只有 2.643,約等于Tiny-YOLOv3 的一半,適用范圍更廣。改進(jìn) Tiny-YOLOv3 的模型尺寸幾乎為原算法的1/4。
表2 不同模型的性能比較Tab.2 Performance comparison of different models
實(shí)時(shí)性的重要參考標(biāo)準(zhǔn)是FPS 和平均檢測(cè)時(shí)間,其中FPS 值越大越好,檢測(cè)時(shí)間越小越好。具體數(shù)值見表3,從表3可見,改進(jìn)的模型性能更優(yōu)。
表3 算法實(shí)時(shí)性能比較Tab.3 Real-time performance comparison of algorithms
通常使用mAP 來(lái)衡量檢測(cè)精度。該檢測(cè)精度也是在測(cè)試數(shù)據(jù)集上的表現(xiàn),Tiny-YOLOv3 的mAP 值為 61.3,而改進(jìn)版的Tiny-YOLOv3 的mAP值為65.7,從數(shù)據(jù)上看改進(jìn)的算法精度提升了。
本文使用了一種運(yùn)行于計(jì)算能力較差的設(shè)備中的實(shí)用算法——改進(jìn)Tiny-YOLOv3。為了縮小模型尺寸,將Tiny-YOLOv3 中的部分卷積層用Fire 模塊替換,這樣的改進(jìn)不但使網(wǎng)絡(luò)結(jié)構(gòu)變小,并且使算法的深度增加。然后,討論了Tiny-YOLOv3 中Fire 模塊之間的連接方法,即通過DenseNet 中密集連接實(shí)現(xiàn);同時(shí)討論了不同的緊密連接方式,獲得了最優(yōu)方式。Tiny-YOLOv3 中密集連接有助于增強(qiáng)檢測(cè)準(zhǔn)確性和實(shí)時(shí)性,因?yàn)榭梢栽鰪?qiáng)特征傳播并確保網(wǎng)絡(luò)中的最大信息流。在測(cè)試數(shù)據(jù)集上進(jìn)行的實(shí)驗(yàn)和檢測(cè)表明,改進(jìn)Tiny-YOLOv3 比Tiny-YOLOv3 更有效。并且改進(jìn)Tiny-YOLOv3 在損失曲線、模型大小、BFLOP/s、FPS 和mAP 值等方面也顯示出競(jìng)爭(zhēng)優(yōu)勢(shì)。通過這些性能指標(biāo)也可以證明改進(jìn)Tiny-YOLOv3在計(jì)算能力受限的設(shè)備中可以很好地應(yīng)用。