申晉祥,鮑美英
(山西大同大學(xué)計(jì)算機(jī)與網(wǎng)絡(luò)工程學(xué)院,山西大同 037009)
隨著信息和網(wǎng)絡(luò)技術(shù)的快速發(fā)展,大量的視覺信息數(shù)據(jù)如圖像、視頻、表情包等應(yīng)運(yùn)而生,如何在海量繁雜的視覺信息數(shù)據(jù)中快速并準(zhǔn)確的對(duì)目標(biāo)物體進(jìn)行識(shí)別,是計(jì)算機(jī)視覺和數(shù)字圖像處理領(lǐng)域研究的熱門問題[1]。在軍事目標(biāo)檢測(cè)、車輛識(shí)別、行人檢測(cè)、無人駕駛以及醫(yī)學(xué)手術(shù)中的器械定位等方面具有重要的研究?jī)r(jià)值[2]。
目標(biāo)檢測(cè)算法能夠?qū)崿F(xiàn)在復(fù)雜的場(chǎng)景中快速且準(zhǔn)確的對(duì)環(huán)境中的目標(biāo)物體進(jìn)行識(shí)別。隨著深度學(xué)習(xí)技術(shù)的蓬勃發(fā)展,出現(xiàn)了R-CNN(Region-based Convolutional neural network)、Fast R-CNN、Faster RCNN、SSD 模型等[3],將深度學(xué)習(xí)技術(shù)應(yīng)用到目標(biāo)檢測(cè)模型上,能夠快速推動(dòng)目標(biāo)檢測(cè)算法在準(zhǔn)確率以及檢測(cè)速度方面大大提高[4]。
基于深度學(xué)習(xí)的目標(biāo)檢測(cè)算法相比于傳統(tǒng)算法具有更高的魯棒性和準(zhǔn)確性,其中SSD目標(biāo)檢測(cè)算法的檢測(cè)精度以及檢測(cè)速率相對(duì)更高[5]。
SSD 模型網(wǎng)絡(luò)結(jié)構(gòu)的特征是在基礎(chǔ)網(wǎng)絡(luò)VGG(Visual Geometry Group network)之上添加新的網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行目標(biāo)檢測(cè)[6],把VGG 的最后兩個(gè)全連接層,用卷積層來替換,同時(shí)在后面再增加四個(gè)卷積層,便于在不同尺度下對(duì)前端網(wǎng)絡(luò)產(chǎn)生的特征層進(jìn)行特征提取,是一種端到端的單次卷積神經(jīng)網(wǎng)絡(luò),SSD 網(wǎng)絡(luò)結(jié)構(gòu)圖如圖1所示。
圖1 SSD網(wǎng)絡(luò)結(jié)構(gòu)圖
算法采用多尺度特征圖進(jìn)行目標(biāo)檢測(cè),多尺度主要是指利用不同層級(jí)和不同尺度的特征圖來進(jìn)行目標(biāo)框定檢測(cè),卷積模型在每一特征層級(jí)都是不同的。在VGG 之上添加的每一個(gè)特征層可通過濾波器產(chǎn)生一組固定的預(yù)測(cè),為了使輸出的邊框離散化,可通過將不同形狀的初始化邊框使用在不同尺度的特征圖上。通過此方式能夠明顯提高目標(biāo)檢測(cè)的準(zhǔn)確率。
SSD 模型訓(xùn)練過程中,在訓(xùn)練樣本確定后需進(jìn)一步計(jì)算算法的損失函數(shù),默認(rèn)框與目標(biāo)類別的置信度損失和相應(yīng)位置回歸的損失共同確定SSD 算法的目標(biāo)損失函數(shù),具體如式(1)所示。
式中,N表示在檢測(cè)過程中與真實(shí)標(biāo)簽匹配到的默認(rèn)框的數(shù)量,Lconf表示置信度損失,Lloc表示相應(yīng)位置回歸的損失,x表示區(qū)域候選框與不同類的真實(shí)框匹配結(jié)果,c表示被預(yù)測(cè)的物體類別置信度,l表示預(yù)測(cè)結(jié)果的位置信息,g表示標(biāo)注的邊界框坐標(biāo),α一般置為1,用來調(diào)整位置損失和置信度損失之間的比例。通過對(duì)模型多次的訓(xùn)練能夠減少損失值從而提高其檢測(cè)性能。
二值神經(jīng)網(wǎng)絡(luò)(Binary Neural Network,BNN)是指對(duì)神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中的權(quán)重值和激活函數(shù)進(jìn)行二值化來計(jì)算參數(shù)梯度,即權(quán)重值和激活函數(shù)轉(zhuǎn)換為+1 和-1。二值化可以實(shí)現(xiàn)比特運(yùn)算,比浮點(diǎn)運(yùn)算在速度上有很大提高,同時(shí)二值神經(jīng)網(wǎng)絡(luò)能夠大大減少內(nèi)存的使用量,對(duì)網(wǎng)絡(luò)模型容量壓縮以及提速方面具有重要意義。全連接二值化神經(jīng)網(wǎng)絡(luò)圖如圖2所示。
圖2 全連接二值化神經(jīng)網(wǎng)絡(luò)圖
神經(jīng)網(wǎng)絡(luò)的二值化即權(quán)重值和激活函數(shù)轉(zhuǎn)換為+1和-1,有決定式和隨機(jī)式兩種方法,隨機(jī)式雖然比決定式相對(duì)更合理,但因?yàn)橛布看紊呻S機(jī)數(shù)耗時(shí)很長(zhǎng),所以通常使用決定式二值化方法。
根據(jù)浮點(diǎn)型的權(quán)重值和激活函數(shù)分別采用決定式方法進(jìn)行二值化,二值化后的參數(shù)再繼續(xù)運(yùn)算,具體過程如式(2)所示。
其中Binarize()函數(shù)是采用決定式方法將權(quán)重和激活函數(shù)二值化的參數(shù),BatchNorm()函數(shù)是對(duì)激活函數(shù)批量正則化。
求解各層梯度具體方式如式(3)所示。
二值神經(jīng)網(wǎng)絡(luò)是對(duì)原神經(jīng)網(wǎng)絡(luò)實(shí)值參數(shù)進(jìn)行二值化后再計(jì)算參數(shù)的梯度。二值化相當(dāng)于對(duì)原神經(jīng)網(wǎng)絡(luò)的權(quán)重值和激活值增加了“噪聲”,具有正則化的作用,能夠有效防止網(wǎng)絡(luò)過擬合現(xiàn)象。另外,二值化會(huì)使訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型保存時(shí)只需較少的內(nèi)存空間,因?yàn)樵L存時(shí)間要比計(jì)算時(shí)間更耗時(shí),所以能夠大大減小算法的計(jì)算量,有效提高算法的檢測(cè)速度,同時(shí)檢測(cè)的準(zhǔn)確率也能夠基本保證。
實(shí)驗(yàn)環(huán)境配置IntelCoreTMi7-8750H CPU@2.20 GHz,16 GB RAM,顯卡的型號(hào)為Nvidia GeForce GTX 1050Ti,利用Tensorflow 框架并通過GPU 進(jìn)行加速運(yùn)算。數(shù)據(jù)集用公開的PASCAL VOC2007、PAS?CAL VOC2012 以及MS COCO,算法訓(xùn)練在PASCAL VOC2007、PASCAL VOC2012 數(shù)據(jù)集上進(jìn)行,通過MS COCO 數(shù)據(jù)集進(jìn)行測(cè)試。實(shí)驗(yàn)選取數(shù)據(jù)集中的4類:bike、chair、dog 和cat 進(jìn)行測(cè)試,每類共1 000 張圖片。所提基于BNN 的Binary SSD 算法與Fast R-CNN 算法和SSD算法進(jìn)行比較,不同算法實(shí)驗(yàn)結(jié)果對(duì)比如表1所示。
表1 不同算法實(shí)驗(yàn)結(jié)果對(duì)比
在目標(biāo)檢測(cè)實(shí)驗(yàn)中,通常以mAP(Mean Average Precision)作為檢測(cè)精度的評(píng)價(jià)指標(biāo),以FPS(Frame Per Second)作為檢測(cè)速度的評(píng)價(jià)指標(biāo)。
通過實(shí)驗(yàn)結(jié)果驗(yàn)證了各算法的性能,F(xiàn)ast RCNN 算法雖然使用了多任務(wù)損失函數(shù)能夠完成端到端的訓(xùn)練,對(duì)網(wǎng)絡(luò)中包括卷積層在內(nèi)的各個(gè)層均實(shí)現(xiàn)微調(diào),將目標(biāo)完整輸入到CNN 進(jìn)行特征提取,在鄰接時(shí)再映射到各個(gè)候選區(qū)域,所以僅會(huì)在末尾的較少層單獨(dú)處理各個(gè)候選框,能夠提高提取候選區(qū)域的速度,并且網(wǎng)絡(luò)訓(xùn)練所提取到的特征能夠暫存在顯存中而無需占用額外的存儲(chǔ)空間,具有較高的檢測(cè)精度和檢測(cè)速度。但是在興趣區(qū)域特征提取時(shí)采用的選擇性搜索算法計(jì)算量太大,影響了算法的檢測(cè)速度,因此在比較的算法中性能表現(xiàn)最差。
SSD 算法融合了回歸的模式和基于區(qū)域的概念,是在基礎(chǔ)網(wǎng)絡(luò)VGG 上進(jìn)行變動(dòng),通過使用卷積層來替換VGG 的最后兩個(gè)全連接層,并在其后增加四個(gè)卷積層以有利于對(duì)不同尺度下前端網(wǎng)絡(luò)所產(chǎn)生的特征層進(jìn)行特征提取,其根本改進(jìn)之處在于算法無需對(duì)假定的邊框進(jìn)行像素和特征的重復(fù)采集取樣。神經(jīng)網(wǎng)絡(luò)中由于淺層的特征圖包含有豐富的細(xì)節(jié)內(nèi)容而便于進(jìn)行小目標(biāo)的檢測(cè),而深層的特征圖包含有較多的全局內(nèi)容而有利于進(jìn)行大目標(biāo)的檢測(cè),網(wǎng)絡(luò)通過在不同的特征圖上對(duì)多個(gè)層次在不同尺度下進(jìn)行測(cè)量,實(shí)現(xiàn)目標(biāo)的高準(zhǔn)確率檢測(cè)并提高檢測(cè)的速度,因此SSD 算法與Fast R-CNN 算法相比有較好的準(zhǔn)確率和檢測(cè)速度。
基于BNN 的SSD 算法進(jìn)一步提高目標(biāo)檢測(cè)速度,SSD模型的浮點(diǎn)型參數(shù)使得網(wǎng)絡(luò)計(jì)算量過大且對(duì)模型的存儲(chǔ)還需要較大的內(nèi)存空間,引入BNN 方法將神經(jīng)網(wǎng)絡(luò)的浮點(diǎn)型參數(shù)與激活函數(shù)二值化,極大降低算法的時(shí)間復(fù)雜度和空間復(fù)雜度。二值化能夠使網(wǎng)絡(luò)的主要計(jì)算由浮點(diǎn)運(yùn)算變?yōu)檎瓦\(yùn)算,并且使訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)模型保存時(shí)只需較少的內(nèi)存空間,因?yàn)樵L存時(shí)間要比計(jì)算時(shí)間更耗時(shí),所以能夠大大減小算法的計(jì)算量,有效提高算法的檢測(cè)速度。實(shí)驗(yàn)結(jié)果表明,基于BNN 的SSD 算法與SSD 算法相比,檢測(cè)精度雖然降低了將近5%,但檢測(cè)速度提高了近3倍,內(nèi)存占用量減少了近76%,在基本保持準(zhǔn)確率的情況下有效提高目標(biāo)檢測(cè)的速度。
為進(jìn)一步提高SSD目標(biāo)檢測(cè)算法的檢測(cè)速度,提出基于BNN 的SSD 目標(biāo)檢測(cè)算法,將算法模型的參數(shù)和激活函數(shù)進(jìn)行二值化處理,把浮點(diǎn)型的運(yùn)算轉(zhuǎn)換為整型運(yùn)算,在保持精確度基本不變的情況下,即提高了算法的檢測(cè)速度,又降低了模型內(nèi)存空間的占用量。未來將繼續(xù)探索新方法用于改進(jìn)算法,進(jìn)一步提高目標(biāo)檢測(cè)的精確度和速度。