肖家麟, 李 鈺, 袁晴龍, 唐志祺
(華東理工大學(xué)信息科學(xué)與工程學(xué)院,上海 200237)
深度神經(jīng)網(wǎng)絡(luò)具有強(qiáng)大的特征提取能力,在機(jī)器學(xué)習(xí)領(lǐng)域表現(xiàn)優(yōu)異[1]。將該類算法部署于嵌入式設(shè)備上,從而實(shí)現(xiàn)工業(yè)現(xiàn)場(chǎng)的物體識(shí)別,已經(jīng)成為眾多工業(yè)智能裝備、機(jī)器人系統(tǒng)的迫切需求。深度神經(jīng)網(wǎng)絡(luò)模型擁有大量的可訓(xùn)練參數(shù),并且通過(guò)增加網(wǎng)絡(luò)層數(shù)和卷積核數(shù)量可以進(jìn)一步提升其性能[2]。然而,隨著層數(shù)和卷積核數(shù)量的增加,模型變得更加復(fù)雜。而嵌入式系統(tǒng)的硬件計(jì)算資源有限,會(huì)造成性能與資源之間的矛盾,主要表現(xiàn)在兩個(gè)方面:一方面,大量參數(shù)的學(xué)習(xí)受限于訓(xùn)練數(shù)據(jù)的規(guī)模,過(guò)參數(shù)化會(huì)導(dǎo)致模型冗余的問(wèn)題。例如,VGG16 模型的參數(shù)量可達(dá)到552 MB[3];另一方面,當(dāng)訓(xùn)練數(shù)據(jù)不足時(shí)會(huì)出現(xiàn)過(guò)擬合現(xiàn)象,導(dǎo)致模型泛化能力變差。因此,減小過(guò)參數(shù)化和過(guò)擬合問(wèn)題的影響是深度神經(jīng)網(wǎng)絡(luò)嵌入式應(yīng)用研究的重點(diǎn)。隨著嵌入式硬件的性能提升和機(jī)器學(xué)習(xí)新算法的不斷提出,對(duì)實(shí)時(shí)嵌入式物體識(shí)別算法網(wǎng)絡(luò)結(jié)構(gòu)正則化方法的研究也在不斷深入。
在正則化方法中,Dropout 是非常有效的技術(shù),能夠有效防止過(guò)擬合[1]。該方法在每輪迭代中,將網(wǎng)絡(luò)中的神經(jīng)元以一定的概率丟棄,訓(xùn)練完成后,整體的網(wǎng)絡(luò)架構(gòu)還會(huì)被使用。文獻(xiàn)[1]建議輸入層的丟棄概率為0.2,隱藏層的丟棄概率為0.5,輸出層則不需要Dropout。由于在相同層中節(jié)點(diǎn)被刪除的概率相等,減少了神經(jīng)元之間復(fù)雜的共適應(yīng)關(guān)系,因此,每次神經(jīng)元的合作運(yùn)算都是全新的,不會(huì)依賴于某個(gè)神經(jīng)元或某種結(jié)構(gòu),在訓(xùn)練中不會(huì)只依賴數(shù)據(jù)的某個(gè)特征。Salehinejad 等[4]提出了一種自適應(yīng)技術(shù),降低了由于數(shù)據(jù)集不平衡和模型參數(shù)初始化過(guò)于接近訓(xùn)練數(shù)據(jù)所造成的不利影響。Chen 等[5]提出了DropCluster,在卷積層輸出中尋找相關(guān)特征的模型權(quán)重。Qi 等[6]提出使用基于變分推理的Dropout 正則化將變分遞歸神經(jīng)網(wǎng)絡(luò)(RNN)推廣到更高級(jí)的聚類,并在每次迭代時(shí)隨機(jī)刪除聚類;然后在模型訓(xùn)練過(guò)程中對(duì)聚類進(jìn)行學(xué)習(xí)和更新,使它們適應(yīng)數(shù)據(jù)和RNN 架構(gòu),如門控遞歸單元(GRU)。Luo 等[7]提出了一種基于Dropout 正則化的多尺度融合(MSF)Dropout 方法,首先訓(xùn)練幾組具有不同Dropout 率組合的網(wǎng)絡(luò)模型,然后使用改進(jìn)的遺傳算法來(lái)計(jì)算每個(gè)網(wǎng)絡(luò)模型的最優(yōu)規(guī)模。Tam 等[8]提出使用神經(jīng)網(wǎng)絡(luò)的Fiedler 值作為一個(gè)工具進(jìn)行正則化。Tseng 等[9]提出了Gradient Dropout 方法,在深度神經(jīng)網(wǎng)絡(luò)參數(shù)的內(nèi)環(huán)優(yōu)化中隨機(jī)降低梯度,從而降低基于梯度的元學(xué)習(xí)的過(guò)擬合風(fēng)險(xiǎn)。Steverson 等[10]開(kāi)發(fā)了一個(gè)測(cè)試框架來(lái)評(píng)估機(jī)器學(xué)習(xí)網(wǎng)絡(luò)防御的對(duì)抗性魯棒性,使用了深度強(qiáng)化學(xué)習(xí)和對(duì)抗性自然語(yǔ)言處理的技術(shù),實(shí)驗(yàn)結(jié)果發(fā)現(xiàn)更高概率的Dropout 會(huì)提高魯棒性。Cai 等[11]提出在卷積操作之前Dropout 會(huì)有更好的正則化效果。胡輝等[12]提出了一種將Dropblock算法和Dropout 算法相結(jié)合的正則化策略,實(shí)現(xiàn)對(duì)整個(gè)卷積分類網(wǎng)絡(luò)的淺層、中層和深層網(wǎng)絡(luò)進(jìn)行正則化。這種方法可有效加快分類網(wǎng)絡(luò)的收斂速度和提升穩(wěn)定性,還能有效提高深度卷積分類網(wǎng)絡(luò)的分類準(zhǔn)確率。鐘忺等[13]提出了多尺度融合Dropout(MSF Dropout)方法,這種方法利用驗(yàn)證數(shù)據(jù)集對(duì)多個(gè)不同尺度的網(wǎng)絡(luò)模型進(jìn)行訓(xùn)練,通過(guò)學(xué)習(xí)得到符合該數(shù)據(jù)集特征的最佳尺度組合。MSF Dropout 具備自適應(yīng)數(shù)據(jù)集的能力,網(wǎng)絡(luò)能夠使用最佳尺度來(lái)進(jìn)行高精確度的預(yù)測(cè)。當(dāng)選擇了合適的尺度數(shù)量和尺度梯度后,這種方法的預(yù)測(cè)精度獲得了明顯的提升,還能很好地控制計(jì)算時(shí)間。劉磊[14]提出了一種統(tǒng)一的Dropout 算法框架,將基于不同分布采樣的Dropout 方法統(tǒng)一到一個(gè)基于β分布的Dropout 框架中,進(jìn)而將Dropout 方法選擇問(wèn)題轉(zhuǎn)變?yōu)橐粋€(gè)參數(shù)調(diào)節(jié)問(wèn)題。這種方法被應(yīng)用在視網(wǎng)膜病變的檢測(cè)場(chǎng)景下,驗(yàn)證了魯棒性和先進(jìn)性。
為了增強(qiáng)模型泛化能力,Wan 等[15]提出將每個(gè)神經(jīng)元的權(quán)重或偏置以一定的概率設(shè)置為0,而不是將神經(jīng)元的輸出設(shè)置為0。為簡(jiǎn)化網(wǎng)絡(luò)結(jié)構(gòu),Molchanov 等[16]提出變分Dropout 正則化方法,基本思想是同時(shí)對(duì)全連接層和卷積層進(jìn)行稀疏化,該方法對(duì)性能的影響很小,大大減少了標(biāo)準(zhǔn)卷積網(wǎng)絡(luò)的參數(shù)。Srivastava 等[17]提出了一種基于貝葉斯理論的方法,將Dropout 解釋為深度高斯過(guò)程的貝葉斯近似,總結(jié)出了一種估計(jì)神經(jīng)網(wǎng)絡(luò)輸出置信度的簡(jiǎn)單方法,此方法廣泛應(yīng)用在不確定性估計(jì)中。Provilkov等[18]提出對(duì)BPE 算法進(jìn)行Dropout 正則化(BPEDropout),使性能獲得了很大的提升。
深度神經(jīng)網(wǎng)絡(luò)的參數(shù)眾多,其中有些參數(shù)對(duì)最終的輸出結(jié)果貢獻(xiàn)不大,這些參數(shù)稱為冗余參數(shù)。為此,一些學(xué)者提出了利用剪枝或量化來(lái)簡(jiǎn)化網(wǎng)絡(luò)結(jié)構(gòu)的方法。文獻(xiàn)[19]提出對(duì)卷積層進(jìn)行完全的剪枝,但是對(duì)卷積輸出層進(jìn)行剪枝時(shí),也會(huì)對(duì)網(wǎng)絡(luò)層造成影響。Courbariaux 等[20]提出了二值化神經(jīng)網(wǎng)絡(luò)(BNN),將參數(shù)進(jìn)行量化,這種方法既快速又節(jié)能,但由于參數(shù)的精度下降,一定程度上會(huì)降低識(shí)別的正確率。
以上防止過(guò)參數(shù)化和過(guò)擬合的研究為提高深度神經(jīng)網(wǎng)絡(luò)的性能提供了很好的思路,然而對(duì)自適應(yīng)剪枝和針對(duì)特定嵌入式平臺(tái)的研究還值得進(jìn)一步深入。受恒虛警檢測(cè)方法啟發(fā),本文提出了一種基于恒虛警率檢測(cè)的Dropout 方法(CFAR-Dropout)。其主要思想是通過(guò)設(shè)計(jì)一個(gè)恒虛警檢測(cè)器,計(jì)算每個(gè)節(jié)點(diǎn)的激活值,利用恒虛警思想自適應(yīng)地調(diào)整閾值,從而決定哪些節(jié)點(diǎn)需要Dropout。該方法在防止過(guò)擬合的同時(shí),其本質(zhì)上是在Dropout 時(shí)對(duì)不同樣本進(jìn)行了區(qū)分,使系統(tǒng)對(duì)樣本的局部結(jié)構(gòu)特征更加敏感,能趨向于保留對(duì)特征更感興趣的節(jié)點(diǎn)。
模型和計(jì)算平臺(tái)的契合程度決定了模型的實(shí)際表現(xiàn)。本文使用的平臺(tái)是嵌入式平臺(tái)PYNQ-Z2,考慮這個(gè)平臺(tái)的運(yùn)算能力,創(chuàng)建了一種基于VGG16(Visual Geometry Group Network-16)的變種卷積網(wǎng)絡(luò)模型。VGG16 模型[3]包含13 層卷積層、5 層池化層、3 層全連接層。卷積層和全連接層都有權(quán)重系數(shù),被稱為權(quán)重層,共16 個(gè)權(quán)重層(卷積-卷積-池化-卷積-卷積-池化-卷積-卷積-卷積-池化-卷積-卷積-卷積-池化-卷積-卷積-卷積-池化-全連接-全連接-全連接);池化層則不涉及權(quán)重。該模型中13 層卷積層和5 層池化層負(fù)責(zé)進(jìn)行特征的提取,最后3 層全連接層負(fù)責(zé)完成分類任務(wù),其網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)如表1 所示。這種模型的優(yōu)點(diǎn)是結(jié)構(gòu)簡(jiǎn)單、權(quán)重參數(shù)較少,能在一定程度上防止過(guò)擬合,但存在需要訓(xùn)練的特征數(shù)量大、訓(xùn)練時(shí)間過(guò)長(zhǎng)和調(diào)參難度大等問(wèn)題。由于需要的特征存儲(chǔ)容量大,不利于直接部署在嵌入式系統(tǒng)中。因此,需要對(duì)參數(shù)進(jìn)行量化操作,減少運(yùn)算量。
表1 網(wǎng)絡(luò)結(jié)構(gòu)參數(shù)表Table 1 Network structure
Dropout 作為消除冗余的重要方法,自從提出就得到了廣泛的應(yīng)用,其工作原理如圖1 所示。圖1(a)示出了原神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)連接狀態(tài),圖1(b)示出了Dropout 正則化后的節(jié)點(diǎn)連接狀態(tài),圖中虛線圓是被丟棄的節(jié)點(diǎn),虛線箭頭是節(jié)省的運(yùn)算通路,可以直觀地感受到通過(guò)Dropout 正則化,運(yùn)算量將大大減少。
圖1 Dropout 正則化前后對(duì)比Fig. 1 Comparison before and after Dropout
經(jīng)過(guò)Dropout 正則化產(chǎn)生的局部網(wǎng)絡(luò)本身屬于原網(wǎng)絡(luò)的一部分,雖然總的網(wǎng)絡(luò)個(gè)數(shù)增加了,但參數(shù)卻比原網(wǎng)絡(luò)更少,能有效防止模型過(guò)擬合問(wèn)題。因此,在保持訓(xùn)練復(fù)雜度的情況下可以同時(shí)得到多個(gè)網(wǎng)絡(luò)的訓(xùn)練結(jié)果,當(dāng)測(cè)試時(shí)再將這些局部網(wǎng)絡(luò)組合起來(lái),可以提升網(wǎng)絡(luò)的泛化性。另一方面,神經(jīng)網(wǎng)絡(luò)的節(jié)點(diǎn)之間相互影響,很容易擬合到一些噪聲,可能產(chǎn)生過(guò)擬合現(xiàn)象。Dropout 正則化隨機(jī)選擇節(jié)點(diǎn)刪除,打破了這種相互影響,能有效防止模型的過(guò)擬合問(wèn)題[21]。這個(gè)過(guò)程可以表示為
式中:f(x)為激活函數(shù);x是該層的輸入;W是該層的權(quán)值矩陣;y為該層的輸出;m為該層的掩膜(mask),mask 中每個(gè)元素為1 的概率為p。
Wan 等[15]提出的Dropconnect 方法是對(duì)Dropout正則化的一種泛化。與式(1)不同的是,式(2)中的M是一個(gè)掩模矩陣,相乘后權(quán)重以一定的概率被設(shè)置為0 和1。Dropconnect 正則化方法在訓(xùn)練時(shí)網(wǎng)絡(luò)層的輸出可以被寫(xiě)成
深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練期間更新生成的參數(shù)包含大量冗余信息。對(duì)參數(shù)的量化主要包括神經(jīng)網(wǎng)絡(luò)層的3 個(gè)方面:輸入激活、突觸權(quán)重和輸出激活。如果3 個(gè)部分都是二進(jìn)制的,稱之為完全二值化;具有一個(gè)或兩個(gè)部分是二進(jìn)制的情況稱為部分二值化[2]。本文對(duì)權(quán)重進(jìn)行二值化。
深度神經(jīng)網(wǎng)絡(luò)中的目標(biāo)函數(shù)F(ω) 可以分解為多個(gè)函數(shù)f1,f2,···,fn??紤]經(jīng)驗(yàn)風(fēng)險(xiǎn)最小化,即
完成參數(shù)的二值化后,可以顯著減少計(jì)算參數(shù)權(quán)重需要消耗的資源,但實(shí)驗(yàn)結(jié)果的準(zhǔn)確性會(huì)有一定程度的下降。為了降低這種負(fù)面影響,可以適度地增加網(wǎng)絡(luò)層數(shù),這就需要在實(shí)驗(yàn)中進(jìn)行權(quán)衡。
恒虛警率檢測(cè)是利用信號(hào)和噪聲的統(tǒng)計(jì)特性等信息來(lái)建立最佳判決的數(shù)學(xué)理論,常用在雷達(dá)系統(tǒng)中。它主要解決在受噪聲干擾的觀測(cè)中有無(wú)信號(hào)的判決問(wèn)題[22]。恒虛警檢測(cè)的基本流程是在保持虛警概率(α)為恒定的條件下對(duì)接收機(jī)輸出的信號(hào)和噪聲進(jìn)行判別,以確定目標(biāo)信號(hào)是否存在。通過(guò)恒虛警檢測(cè)保持恒虛警率,可以有效地抗干擾。
在雷達(dá)信號(hào)檢測(cè)中,當(dāng)外界干擾強(qiáng)度變化時(shí),雷達(dá)能自動(dòng)調(diào)整其靈敏度,使雷達(dá)的虛警概率保持不變,這種特性稱為恒虛警率特性。本文受此啟發(fā)提出了基于恒虛警率檢測(cè)的Dropout 正則化方法。設(shè)置一個(gè)恒虛警率,將深度神經(jīng)網(wǎng)絡(luò)神經(jīng)元的輸入看作輸入信號(hào),將神經(jīng)元的激活值看作輸出信號(hào)。這種方法可以在輸入數(shù)據(jù)不同和輸出結(jié)果分布不均勻時(shí)自適應(yīng)調(diào)整閾值,使分類效果依然良好。
那么,節(jié)點(diǎn)的激活值為
在Dropout 正則化方法中,M是一個(gè)服從伯努利分布取值的掩模矩陣,其取值概率設(shè)置之后是固定的[1]。在稀疏性Dropout 正則化方法中,節(jié)點(diǎn)以激活值的中值為閾值取舍,其閾值也是固定的[15]。此時(shí),M中的元素值取決于節(jié)點(diǎn)的激活值。當(dāng)節(jié)點(diǎn)的激活值大于閾值λ時(shí),mij取1;激活值小于閾值β時(shí),mij取0。每次進(jìn)行恒虛警檢測(cè)后,系統(tǒng)可以自適應(yīng)地調(diào)整λ值,λ值在每一層都可能不同。
在實(shí)驗(yàn)中,神經(jīng)網(wǎng)絡(luò)訓(xùn)練需要設(shè)置權(quán)重初始值,選取的初始值應(yīng)當(dāng)盡量使各層激活值的分布有適當(dāng)?shù)膹V度。分別使用標(biāo)準(zhǔn)差為1 和0.01 的高斯分布作為權(quán)重初始值時(shí),各層激活值的分布如圖2 所示。
圖2 權(quán)重初始值是標(biāo)準(zhǔn)差為1(a)和0.01(b)的高斯分布時(shí)激活值的分布Fig. 2 Initial weight value is the distribution with the activation value with Gaussian distribution of standard deviations 1(a) and 0.01(b)
圖2(a)顯示標(biāo)準(zhǔn)差為1 時(shí),各層激活值呈偏向0 和1 的分布。偏向0 和1 的數(shù)據(jù)分布會(huì)造成反向傳播中梯度的值不斷變小,最后消失,會(huì)導(dǎo)致靠近輸入層的隱藏層權(quán)值更新緩慢或者更新停滯。這就導(dǎo)致在訓(xùn)練時(shí),只等價(jià)于后面幾層的淺層網(wǎng)絡(luò)的學(xué)習(xí),這種現(xiàn)象稱為梯度消失。圖2(b)顯示標(biāo)準(zhǔn)差為0.01時(shí),不同層的激活值過(guò)于集中在一個(gè)區(qū)域,這種現(xiàn)象意味著激活值表現(xiàn)的特征基本相同,很多特征被忽略,最后的識(shí)別效果會(huì)受影響。為了避免這兩種現(xiàn)象,使每一層能根據(jù)當(dāng)前狀態(tài)自動(dòng)調(diào)整,當(dāng)前一層節(jié)點(diǎn)數(shù)為n時(shí),將初始值設(shè)為標(biāo)準(zhǔn)差為√ 的高斯分布。此時(shí)激活值的分布如圖3 所示。
圖3 權(quán)重初始值是標(biāo)準(zhǔn)差為 1 / 的高斯分布時(shí)激活值的分布Fig. 3 Initial value of the weight is the distribution of the activation value with a Gaussian distribution of standard deviation 1/
理論上,高激活值的節(jié)點(diǎn)代表對(duì)樣本感興趣程度高的部分,低激活值的節(jié)點(diǎn)代表對(duì)樣本感興趣程度低的部分,所以低激活值節(jié)點(diǎn)Rjl應(yīng)該刪除。但在實(shí)際應(yīng)用中,數(shù)據(jù)分布并不均勻,中值并不能很好地區(qū)分高低激活,所以本文提出了基于恒虛警檢測(cè)的Dropout 正則化方法。
在雷達(dá)系統(tǒng)中,當(dāng)接收機(jī)有信號(hào)輸入(D0),而檢測(cè)器判為無(wú)信號(hào)(H1)時(shí),稱為漏警,漏警率為PM;當(dāng)接收機(jī)無(wú)信號(hào)輸入(D1),而檢測(cè)器判為有信號(hào)(H0)時(shí),稱為虛警,虛警率為PF。這兩個(gè)概率都是越小越好,但理論上兩者無(wú)法同時(shí)達(dá)到最小。在其他條件一定時(shí),虛警概率越小,漏警概率就會(huì)越大;漏警概率越小,虛警概率就會(huì)越大。轉(zhuǎn)化為統(tǒng)計(jì)的語(yǔ)言就是一個(gè)假設(shè)檢驗(yàn)犯第一類錯(cuò)誤和第二類錯(cuò)誤的概率,無(wú)法同時(shí)變小。所以,可采用的方法是給定其中一個(gè)錯(cuò)誤的概率不超過(guò)某個(gè)值時(shí),讓另一個(gè)錯(cuò)誤的概率盡量小。本文中讓虛警率恒定,使漏警率最小,從而求得閾值。虛警率PF和漏警率PM分別為
利用拉格朗日乘子λ構(gòu)造目標(biāo)函數(shù)
當(dāng)PF=α?xí)r,漏警率可以達(dá)到最小值。此時(shí),目標(biāo)函數(shù)J對(duì)輸入z求導(dǎo)??傻?/p>
然后,可由式(14)求出閾值λ
本文中假定激活值數(shù)據(jù)服從高斯分布,如果某個(gè)節(jié)點(diǎn)為高激活值節(jié)點(diǎn),但判為低激活值節(jié)點(diǎn),稱為漏警Rhl。如果某個(gè)節(jié)點(diǎn)為低激活值節(jié)點(diǎn),但判為高激活值節(jié)點(diǎn),這種情況稱為虛警Rlh。虛警率PF和漏警率PM分別為
由PF=α,可以求出R0,則λ為
經(jīng)過(guò)以上步驟,得到調(diào)整后的閾值,可以將節(jié)點(diǎn)分為高激活值節(jié)點(diǎn)和低激活值節(jié)點(diǎn)。
文獻(xiàn)[23]指出相關(guān)性接近0 的弱相關(guān)節(jié)點(diǎn)對(duì)相關(guān)性高的節(jié)點(diǎn)有補(bǔ)充作用,所以低激活節(jié)點(diǎn)并非全無(wú)用。若保留比例為 γ (0 ≤γ ≤1) ,則相應(yīng)的高激活值節(jié)點(diǎn)刪除的比率為1?γ。高激活值節(jié)點(diǎn)的掩模矩陣中的元素以伯努利概率P+取值為0 或1,低激活值節(jié)點(diǎn)的掩模矩陣中的元素以伯努利概率P?取值為0 或1。
按以下方式處理節(jié)點(diǎn)
其中:S為保留節(jié)點(diǎn)的比率;R+為保留的節(jié)點(diǎn);R?為刪除的節(jié)點(diǎn)。CFAR-Dropout 的原理如圖4 所示。
圖4 CFAR-Dropout 原理簡(jiǎn)圖Fig. 4 CFAR-Dropout schematic diagram
當(dāng)進(jìn)入新的一層進(jìn)行計(jì)算時(shí),輸入發(fā)生變化,依舊需要將虛警率保持為α,所以將α稱為恒虛警率。經(jīng)過(guò)實(shí)驗(yàn)得出α的最佳取值范圍為0.030~0.120,本文取0.1。
本文實(shí)驗(yàn)在嵌入式平臺(tái)PYNQ-Z2 上完成。PYNQ 主要芯片采用ZYNQ XC7Z020,其內(nèi)部異構(gòu)雙核ARM-A9 CPU+FPGA,PS(ARM)和PL(FPGA)之間通過(guò)片上高速AXI 總線進(jìn)行數(shù)據(jù)交互,能有效克服ARM 和FPGA 間數(shù)據(jù)傳輸?shù)牡退?、延時(shí)、外界干擾等問(wèn)題。在PYNQ 的ARM-A9 CPU 上運(yùn)行的軟件包括Jupyter Notebooks 網(wǎng)絡(luò)服務(wù)器、 IPython 內(nèi)核和程序包、Linux-Ubuntu 以及FPGA 的基本硬件庫(kù)和API。
PC 端負(fù)責(zé)進(jìn)行數(shù)據(jù)集的準(zhǔn)備和預(yù)處理,選擇合適的物體識(shí)別方案,搭建好網(wǎng)絡(luò)結(jié)構(gòu),訓(xùn)練后得到參數(shù)權(quán)重。通過(guò)VIVADO HLS 創(chuàng)建卷積Pool 和池化Conv IP 核,設(shè)計(jì)的加速電路如圖5 所示。由于神經(jīng)網(wǎng)絡(luò)中的卷積層與全連接層相似,所以全連接層可以復(fù)用卷積的IP 核。
圖5 卷積和池化部分IP 核Fig. 5 Binarization error rate convolution and pooling of IP cores
嵌入式平臺(tái)PYNQ-Z2 加載PC 端訓(xùn)練的權(quán)重參數(shù),將加速電路的比特流文件燒寫(xiě)在PL 端形成加速電路。之后,系統(tǒng)通過(guò)相機(jī)或者以太網(wǎng)接口開(kāi)始讀取圖片或者視頻幀。PS 端和PL 端通過(guò)AXI 總線進(jìn)行信息交互, PS 端都會(huì)調(diào)用PL 端的加速電路進(jìn)行運(yùn)算神經(jīng)網(wǎng)絡(luò)的每一層。運(yùn)算結(jié)束后,實(shí)現(xiàn)物體識(shí)別。系統(tǒng)流程如圖6 所示。
圖6 物體識(shí)別系統(tǒng)檢測(cè)步驟Fig. 6 Object recognition system detection steps
3.2.1 基于公開(kāi)數(shù)據(jù)集的實(shí)驗(yàn)驗(yàn)證 為了測(cè)試CFARDropout 正則化的效果,以Dropout 正則化方法作為比較對(duì)象,采用基于VGG16 的二值化模型。實(shí)驗(yàn)采用3 種公開(kāi)數(shù)據(jù)集,其中數(shù)據(jù)集CIFAR-10 包含6 萬(wàn)張32×32 的RGB 圖片,共分為10 個(gè)類別,訓(xùn)練數(shù)據(jù)50 000 張圖片(每類5 000 張),測(cè)試數(shù)據(jù)10 000 張圖片;數(shù)據(jù)集MNIST 由大小為28×28 的手寫(xiě)數(shù)字圖片組成,包含60 000 張訓(xùn)練圖片和10 000 張測(cè)試圖片;數(shù)據(jù)集SVHN 是真實(shí)世界的街景門牌號(hào)數(shù)據(jù)集,結(jié)構(gòu)與MNIST 類似,其訓(xùn)練集含有73 257 張圖像,其測(cè)試集含有26 032 張圖像。
實(shí)驗(yàn)中一次輸入的數(shù)據(jù)量不能過(guò)大,所以將訓(xùn)練集分為多個(gè)批次,分批次訓(xùn)練完成。如果批次數(shù)量取值過(guò)小,訓(xùn)練數(shù)據(jù)就會(huì)非常難收斂;如果增大批次數(shù)量,相對(duì)處理速度加快,但所需內(nèi)存容量增加,所以需要選擇合適的批次數(shù)量,在內(nèi)存效率和內(nèi)存容量之間達(dá)到平衡。訓(xùn)練批次數(shù)量設(shè)置為200,測(cè)試集的批次數(shù)量設(shè)置為100。最終,數(shù)據(jù)集CIFAR-10和MNIST 各測(cè)試了100 批,共10000 次。數(shù)據(jù)集SVHN 測(cè)試了261 批,共26 032 次。所有測(cè)試集測(cè)試完畢,取各批次錯(cuò)誤率的均值,得到平均錯(cuò)誤率。
將虛警率α設(shè)置為不同大小,對(duì)3 個(gè)數(shù)據(jù)集進(jìn)行多次重復(fù)實(shí)驗(yàn),其折線圖如圖7 所示。
由圖7 可知,當(dāng)α為0.030~0.120 時(shí),測(cè)試錯(cuò)誤率較低。α取值過(guò)小,在實(shí)際中很難實(shí)現(xiàn),恒虛警檢測(cè)沒(méi)有起到作用,最極端的情況下,虛警率取值等于0 時(shí),相當(dāng)于使用標(biāo)準(zhǔn)的Dropout 方法;α取值過(guò)大,相當(dāng)于人為增加了誤差,錯(cuò)誤率也會(huì)上升。
圖7 恒虛警率不同時(shí)的測(cè)試錯(cuò)誤率Fig. 7 Test error rates with different constant false alarm rates
(1)正則化方法的過(guò)擬合性能測(cè)試。將本文的網(wǎng)絡(luò)模型命名為A,α設(shè)置為0.1。采用不同的正則化方法,對(duì)數(shù)據(jù)集CIFAR-10 和MNIST 各測(cè)試了10 000 次;對(duì)數(shù)據(jù)集SVHN 測(cè)試了26 032 次,實(shí)驗(yàn)結(jié)果如表2 所示。
從表2 可以看到,當(dāng)不使用正則化方法時(shí),測(cè)試誤差遠(yuǎn)遠(yuǎn)大于訓(xùn)練誤差,產(chǎn)生了過(guò)擬合現(xiàn)象。使用Dropout 和CFAR-Dropout 方法后,測(cè)試誤差接近訓(xùn)練誤差,說(shuō)明這兩種方法都能有效緩解過(guò)擬合。CFAR-Dropout 在3 個(gè)數(shù)據(jù)集上都取得了最好的實(shí)驗(yàn)結(jié)果,但由于數(shù)據(jù)集本身不同的特征,CFAR-Dropout方法對(duì)訓(xùn)練CIFAR-10 數(shù)據(jù)集的誤差降低最明顯。與Dropout 相比,CFAR-Dropout 方法由于更敏感,進(jìn)一步降低了訓(xùn)練和測(cè)試誤差,降低程度在2%左右。
表2 不同正則化方法的錯(cuò)誤率Table 2 Error rates of different regularization methods
(2)在PYNQ-Z2 上的實(shí)驗(yàn)。首先,嵌入式PYNQZ2 讀取加載訓(xùn)練好的參數(shù)權(quán)重,將bit 流文件燒錄生成加速電路;然后,使用PYNQ-Z2 的以太網(wǎng)接口或者攝像頭讀取圖像,進(jìn)行識(shí)別后輸出結(jié)果。實(shí)驗(yàn)結(jié)果如表3 所示。
表3 不同的正則化方法在PYNQ 上的錯(cuò)誤率Table 3 Error rates of different regularization methods on PYNQ
從表3 可以看到,CFAR-Dropout 方法的實(shí)測(cè)錯(cuò)誤率比Dropout 方法更低。PYNQ 通過(guò)以太網(wǎng)接口直接讀取圖像和訓(xùn)練時(shí)的測(cè)試誤差率差別極小,在0.5%之內(nèi),這一現(xiàn)象說(shuō)明神經(jīng)網(wǎng)絡(luò)成功部署在嵌入式平臺(tái)上,可以正常運(yùn)行。使用相機(jī)拍照時(shí),錯(cuò)誤率略微上升。經(jīng)過(guò)分析,這種現(xiàn)象的出現(xiàn)是因?yàn)槭艿酵饨绻庹?、攝像頭性能等因素的影響。
(3)參數(shù)量化的效果測(cè)試。對(duì)神經(jīng)網(wǎng)絡(luò)的權(quán)重進(jìn)行二值化之后,速率大大提升,但是準(zhǔn)確率會(huì)有一定程度的下降。在這種情況下,需要權(quán)衡網(wǎng)絡(luò)大小、速率和精度之間的關(guān)系。在MNIST 數(shù)據(jù)集上進(jìn)行了一組實(shí)驗(yàn),重復(fù)實(shí)驗(yàn)10 000 次,比較了網(wǎng)絡(luò)層數(shù)不同時(shí)的浮點(diǎn)錯(cuò)誤率和二進(jìn)制錯(cuò)誤率,結(jié)果見(jiàn)表4。
表4 網(wǎng)絡(luò)層數(shù)對(duì)正確率的影響Table 4 Influence of network layer numbers on accuracy
從表4 可以發(fā)現(xiàn),當(dāng)神經(jīng)元層數(shù)比較少時(shí),錯(cuò)誤率差別較大;當(dāng)神經(jīng)元層數(shù)增加時(shí),錯(cuò)誤率差別變小,能效比增加。實(shí)際應(yīng)用中,可以通過(guò)增加一定層數(shù)的方式降低錯(cuò)誤率,但當(dāng)網(wǎng)絡(luò)層數(shù)增加時(shí),運(yùn)算量又會(huì)增大,這就需要對(duì)速率和準(zhǔn)確率進(jìn)行權(quán)衡,在具體的實(shí)驗(yàn)中選擇最恰當(dāng)?shù)木W(wǎng)絡(luò)層數(shù)。
實(shí)驗(yàn)還表明,參數(shù)二值化可以極大地提高運(yùn)算速率,表5 示出了不同網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)量和運(yùn)行速率對(duì)比結(jié)果。
表5 不同網(wǎng)絡(luò)結(jié)構(gòu)的參數(shù)量和運(yùn)行速率Table 5 Numbers of parameters and running rates of different network structures
對(duì)比本文和VGG16 的網(wǎng)絡(luò)結(jié)構(gòu)可以發(fā)現(xiàn),雖然兩者結(jié)構(gòu)類似,卷積層和全連接層數(shù)量一致,但本文模型的參數(shù)量明顯減少,只有原網(wǎng)絡(luò)結(jié)構(gòu)的8%,運(yùn)行速率明顯增加。與其他網(wǎng)絡(luò)結(jié)構(gòu)對(duì)比,本文的網(wǎng)絡(luò)結(jié)構(gòu)的運(yùn)行速率在嵌入式上具有明顯優(yōu)勢(shì)。
3.2.2 基于移液機(jī)器人物體識(shí)別的實(shí)驗(yàn)結(jié)果 以一個(gè)4×6 細(xì)胞培養(yǎng)板為例,實(shí)驗(yàn)設(shè)備包括一臺(tái)PC、一臺(tái)PYNQ-Z2、一個(gè)攝像頭、一個(gè)顯示器、測(cè)試的圖片和物體,如圖8 所示。
圖8 實(shí)驗(yàn)設(shè)備Fig. 8 Experimental equipment
(1)數(shù)據(jù)集的準(zhǔn)備。訓(xùn)練需要制作特定數(shù)據(jù)集,分別控制光照、背景和拍攝角度等變量,拍攝原始數(shù)據(jù)集圖片。但由于原始數(shù)據(jù)量始終有限,所以需要通過(guò)數(shù)據(jù)增強(qiáng)的方法增加樣本數(shù)。本文使用的是有監(jiān)督單樣本數(shù)據(jù)增強(qiáng),原始圖片經(jīng)過(guò)加噪、模糊和顏色變換,然后進(jìn)行翻轉(zhuǎn)、裁剪、變形和縮放等幾何操作,可以生成大量新的數(shù)據(jù)集圖片。將圖片轉(zhuǎn)換為類似于CIFAR-10 數(shù)據(jù)集的格式,包含數(shù)據(jù):是一個(gè)numpy 格式數(shù)組,陣列的每一行存儲(chǔ)一個(gè)224×224 的彩色圖像。標(biāo)簽:是一個(gè)列表,索引處的數(shù)字指示數(shù)組中對(duì)應(yīng)的映像數(shù)據(jù)。標(biāo)簽名:是一個(gè)列表,用來(lái)保存標(biāo)簽名。
(2)輸入圖像的預(yù)處理。圖像由攝像頭輸入后,在PYNQ-Z2 上進(jìn)行圖像的預(yù)處理。圖像預(yù)處理包括圖像尺寸、通道順序和圖像格式標(biāo)準(zhǔn)化的調(diào)整,目的是滿足識(shí)別網(wǎng)絡(luò)的要求。由于對(duì)象本身的透明和反光特殊性,對(duì)圖像首先進(jìn)行中值濾波,之后采取了一種邊緣提取方法提升準(zhǔn)確度,這種方法可以計(jì)算出更小的梯度變化。按照這種方法設(shè)置好x方向和y方向的3×3 邊緣檢測(cè)算子:
圖9 示出了一般物體的邊緣提取結(jié)果,圖10 示出了細(xì)胞培養(yǎng)板的邊緣提取結(jié)果。其中圖9(a)、圖10(a)為原圖,圖9(b)、圖10(b)為用Canny 算子進(jìn)行邊緣提取,圖9(c)、圖10(c)為用本文算子進(jìn)行邊緣提取。
圖9 一般物體邊緣提取Fig. 9 General object edge extraction
圖10 細(xì)胞培養(yǎng)板邊緣提取Fig. 10 Cell culture plate edge extraction
通過(guò)檢測(cè)可以發(fā)現(xiàn),對(duì)于一般物體,Canny 算子和本文算子的提取效果近似。對(duì)于透明的細(xì)胞培養(yǎng)板,本文算子的提取效果更好。原因是透明物體的邊緣像素值相差比較小,本文算子通過(guò)將濾波器中的權(quán)重系數(shù)放大,從而增大了像素值間的差異。
由于輸入的是640×480、通道順序?yàn)锽GR 的彩色圖像,為了適應(yīng)識(shí)別網(wǎng)絡(luò),需要調(diào)整圖像尺寸為224×224。PYNQ-Z2 是ARM+FPGA 雙核結(jié)構(gòu),安裝了Linux 系統(tǒng),可以使用python 進(jìn)行編譯工作。在系統(tǒng)頂層直接調(diào)用OpenCv 編寫(xiě)函數(shù)作相應(yīng)調(diào)整,用相應(yīng)函數(shù)或模塊即可調(diào)整圖像尺寸,變更圖像通道順序,使圖像格式符合系統(tǒng)需要。
(3) 實(shí)驗(yàn)結(jié)果。系統(tǒng)通過(guò)bin 文件加載好參數(shù)權(quán)重,再將bit 流文件燒錄形成加速電路,調(diào)用FPGA 部分進(jìn)行加速運(yùn)算,最終ARM 部分輸出結(jié)果如圖11所示。
圖11 細(xì)胞培養(yǎng)板的識(shí)別結(jié)果Fig. 11 Recognition results of cell culture plate
圖11(a)為程序中的判斷結(jié)果,圖11(b)為輸出在顯示器上的結(jié)果。實(shí)驗(yàn)步驟包括關(guān)鍵目標(biāo)檢測(cè)、語(yǔ)義標(biāo)注和目標(biāo)框選。嵌入式PYNQ-Z2 目標(biāo)檢測(cè)完成后,在識(shí)別的物體周圍進(jìn)行目標(biāo)框選,并在左下角標(biāo)注物體種類。圖11 中兩圖左下角標(biāo)注均為“4×6 細(xì)胞培養(yǎng)板”,識(shí)別成功。通過(guò)函數(shù)記錄耗時(shí),此次推理過(guò)程總共花了1538 μs,而優(yōu)化之前推理需要250454 μs,速率顯著提升。
為進(jìn)一步提高深度神經(jīng)網(wǎng)絡(luò)Dropout 正則化算法的性能并驗(yàn)證其在移液機(jī)器人物體識(shí)別中的應(yīng)用效果,本文提出了基于恒虛警率的Dropout 正則化方法(CFAR-Dropout)。實(shí)驗(yàn)結(jié)果表明,本文方法通過(guò)自適應(yīng)地刪減神經(jīng)元并對(duì)參數(shù)進(jìn)行量化優(yōu)化后,可以有效防止過(guò)擬合和過(guò)參數(shù)化現(xiàn)象。將優(yōu)化的網(wǎng)絡(luò)結(jié)構(gòu)部署在嵌入式PYNQ-Z2 上后,可以達(dá)到更好的識(shí)別精度和速率,可以應(yīng)用于移液機(jī)器人系統(tǒng)來(lái)有效提高嵌入式物體識(shí)別系統(tǒng)的性能。