邱志敏,魏云龍,林鈺森
(1.福州大學物理與信息工程學院,福州350100;2.華南理工大學電子與信息學院,廣州510640)
針對禽蛋裂紋檢測系統(tǒng)復雜識別算法受時間和空間的約束很難在嵌入式平臺上實現(xiàn)的缺陷,提出一種基于ARM處理器(STM32F407)的禽蛋裂紋檢測系統(tǒng)的研究方法。該方法的主要思想為在嵌入式平臺ARM處理器的基礎上運用BP神經(jīng)網(wǎng)絡結構實現(xiàn)禽蛋裂紋檢測,并對原有算法進行優(yōu)化,其中嵌入式神經(jīng)網(wǎng)絡結構和優(yōu)化算法具有減少硬件資源占用和降低實施復雜程度的優(yōu)點。實驗結果表明,基于ARM平臺的BP神經(jīng)網(wǎng)絡的方法測試完好蛋和裂紋蛋的準確率較原有PC端上的測試準確率一致,但該方法可以更好地適應工業(yè)化要求。
嵌入式系統(tǒng);禽蛋裂紋檢測;BP神經(jīng)網(wǎng)絡;ARM處理器
禽蛋含有豐富的蛋白,在人們?nèi)粘J称分姓加门e足輕重的地位。蛋殼一旦發(fā)生破損,產(chǎn)生裂紋,容易使細菌等微生物通過裂紋侵入到禽蛋內(nèi)部,使得整個禽蛋受到感染,從而嚴重危害食用者的健康。因此,裂紋蛋檢測在自動化禽蛋分級生產(chǎn)流水線中是極為重要的一環(huán)。在國內(nèi)的大部分蛋品加工企業(yè),裂紋蛋檢測是通過人工實現(xiàn),人工檢測速度慢,工作量大,成本高,在高速多通道的禽蛋分級生產(chǎn)線上,顯然人工檢查已經(jīng)滿足不了需求,禽蛋裂紋檢測已經(jīng)成為了制約整條生產(chǎn)線速度的一個瓶頸,急需自動化的裝備來解決問題。針對上述的問題,熊利榮[1]提出了一種基于聲學特征和支持向量的識別實驗裝置運行在計算機端,禽蛋總體識別準確率達到97.37%以上,運行時間為0.3s/枚。王海軍[2]提出了一種基于電磁激勵的伸縮式激勵機構將聲音傳感器布置在內(nèi)部排除了大部分的環(huán)境噪聲,并且提出了優(yōu)化特征參數(shù)的方法,利用F比率用于評估每個特征對聲音和破裂雞蛋的區(qū)分的影響。建立了神經(jīng)網(wǎng)絡訓練模型,搭建在線檢測系統(tǒng),滿足最快5個/秒的檢測速度。郭小軍[3]提出一種基于聲學特性和LabVIEW的雞蛋裂紋檢測研究,創(chuàng)建了一個直觀可視化的雞蛋裂紋檢測模型,其實際檢測準確率達到96%。但是他們的方法大多局限于PC端的理論研究,實用性不強且面向工業(yè)生產(chǎn)對象少。而工業(yè)生產(chǎn)設備上裂紋檢測系統(tǒng)卻要求使用嵌入式芯片作為主要的處理器,其中ARM處理器因其具有低成本、結構靈活等優(yōu)點成為最常用的嵌入式處理器之一,但神經(jīng)網(wǎng)絡在嵌入式上的實現(xiàn)不能得到很好的泛化且存在擬合精度低,收斂速度慢,訓練時間長等諸多問題,所以優(yōu)化神經(jīng)網(wǎng)絡結構是當前一個亟待解決的問題。
針對以上的不足,本文提出面向ARM處理器的BP神經(jīng)網(wǎng)絡結構設計的方法,該方法的具體思想為:采用動態(tài)鏈表的思想設計BP神經(jīng)網(wǎng)絡數(shù)據(jù)使該結構更好地在ARM平臺運行,使該結構滿足在嵌入式平臺上的檢測要求。
BP神經(jīng)網(wǎng)絡因為具有可以對任何復雜模式進行分類的能力和對多維函數(shù)良好映射的能力,逐漸成為廣泛使用的算法模型之一。該算法模型也可稱為梯度下降法,基本思想為:通過反向傳播輸出對應的誤差,其中權值和閾值的不斷更新可以使神經(jīng)網(wǎng)絡的實際輸出值和期望輸出值的均方差值達到最小,最后只要輸出滿足網(wǎng)絡性能要求的最小誤差值即可。BP網(wǎng)絡的結構如圖1所示:主要由輸入層、輸出層和至少一層隱藏層組成而其中學習過程可分為正向傳播學習和反向傳播學習兩個階段。
圖1 BP神經(jīng)網(wǎng)絡結構
如圖1所示BP神經(jīng)網(wǎng)絡的基本工作原理為:信息從輸入層輸入并經(jīng)由隱藏層傳送至輸出層,輸出層會根據(jù)閾值函數(shù)輸出對應的信息。若處于正向傳播的階段則每一層神經(jīng)元狀態(tài)僅與上一層神經(jīng)元狀態(tài)緊密相關。反之輸出層輸出的信息與網(wǎng)絡性能要求不符,則需要計算出實際輸出值與期望值的差值,所獲得的差值需要反饋到輸入層。與此同時系統(tǒng)需要根據(jù)求取的差值適當?shù)恼{整各神經(jīng)元之間連接的權重,直到迭代計算出滿足系統(tǒng)性能要求的參數(shù)才停止上述過程[4]。
基于以上對BP神經(jīng)網(wǎng)絡原理的分析,本研究將在此基礎上提出了一個可將BP神經(jīng)網(wǎng)絡的訓練和應用進行分離的方法。該方法的主要思想為在PC端完成BP神經(jīng)網(wǎng)絡復雜的訓練過程,而應用過程則在ARM平臺上實現(xiàn)。其中PC端完成訓練并得到對應的權重和偏置,最后獲得的數(shù)據(jù)需導入到ARM平臺應用實現(xiàn)對應的功能。
為了讓BP神經(jīng)網(wǎng)絡在ARM平臺上的運行得以實現(xiàn),本設計從BP神經(jīng)網(wǎng)絡的原理出發(fā)對BP神經(jīng)網(wǎng)絡的嵌入式實現(xiàn)進行研究。BP神經(jīng)網(wǎng)絡一經(jīng)訓練,完成后的權重參數(shù)在應用途中將只需前向傳播而不再需要進行反向傳播。因此,BP神經(jīng)網(wǎng)絡的訓練和應用是可分離的。根據(jù)上述思路,可將運算量大的訓練過程放到處理能力強的PC端進行,訓練結束后需要將權重和偏置保存到文件中,最后在ARM處理器建立神經(jīng)網(wǎng)絡時也需將訓練結束所獲得的數(shù)值再次導入。其中前向傳播的主要計算如公式(1)所示:可以分成三步即矩陣乘、加法和激活函數(shù)運算。
其中:A為經(jīng)過激活函數(shù)后的輸出,k為神經(jīng)網(wǎng)絡的層數(shù),g為激活函數(shù),W為權重,b為偏置。
在2.1小節(jié)BP神經(jīng)網(wǎng)絡嵌入式實現(xiàn)原理的基礎上,本系統(tǒng)提出了一種基于ARM平臺的BP神經(jīng)網(wǎng)絡結構,完成了BP神經(jīng)網(wǎng)絡在ARM上的便利使用。BP神經(jīng)網(wǎng)絡模型中根據(jù)實際應用而改變的有神經(jīng)元數(shù)、隱藏層數(shù)和隱藏層激活函數(shù)等參數(shù),若上述過程有誤那么BP神經(jīng)網(wǎng)絡在ARM平臺上的實現(xiàn)以及程序的封裝設計將出現(xiàn)問題。為了解決上述問題,提高程序在ARM平臺上的通用性,這里提出了一種BP神經(jīng)網(wǎng)絡的結構,如圖2所示。
圖2 神經(jīng)網(wǎng)絡數(shù)據(jù)結構
其中pnext:鏈表指針區(qū),pdata:鏈表數(shù)據(jù)區(qū),X:輸入矩陣,W:權重,b:偏置,A:輸出矩陣,row:矩陣行,col:矩陣列,data:矩陣數(shù)據(jù)
由于BP神經(jīng)網(wǎng)絡的隱藏層數(shù)需要根據(jù)實際情況而定,因此BP神經(jīng)網(wǎng)絡的建立是一種動態(tài)建立的過程。而其中鏈表則是一種動態(tài)建立的數(shù)據(jù)結構,鏈表數(shù)據(jù)的大小和預設內(nèi)存空間無需預先獲知,只需保證有數(shù)據(jù)可隨意地插入鏈表中,這樣就可以充分利用計算機的內(nèi)存空間也可以很好地保持BP神經(jīng)網(wǎng)絡的動態(tài)性。因此,在神經(jīng)網(wǎng)絡結構的設計上應選用鏈表[5]。本文選用得是帶有頭結點的鏈表即用頭指針分配頭結點,這樣就可以讓鏈表的程序簡化、操作邏輯更加直觀清晰、代碼可讀性也更好[6]。
BP神經(jīng)網(wǎng)絡在ARM平臺上的實現(xiàn)分為兩步:建立神經(jīng)網(wǎng)絡和運行神經(jīng)網(wǎng)絡。建立神經(jīng)網(wǎng)絡過程需先判斷是否正在創(chuàng)建輸入層,若是則先創(chuàng)建一條新的鏈表,否則表示鏈表已經(jīng)存在無需重復創(chuàng)建。之后再對新創(chuàng)建結點中神經(jīng)網(wǎng)絡層幀的各模塊數(shù)據(jù)進行初始化,最后將結點添加進鏈表。然后再創(chuàng)建下一層神經(jīng)網(wǎng)絡,直至最后一層。運行神經(jīng)網(wǎng)絡的過程即是對鏈表進行遍歷的過程,鏈表的遍歷從頭結點開始。遍歷過程中需要進行公式(1)的計算,計算的結果即為輸出矩陣的數(shù)據(jù),然后將本層輸出矩陣的數(shù)據(jù)傳入下一層輸入矩陣中,直至鏈表遍歷結束,神經(jīng)網(wǎng)絡運行的結果存放在最后一層的輸出接口中,然后僅需對最后一層的輸出接口的數(shù)據(jù)根據(jù)實際應用進行解析即可。ARM平臺上建立和運行神經(jīng)網(wǎng)絡的過程如圖3所示。
圖3 ARM平臺上神經(jīng)網(wǎng)絡建立與運行流程圖
采用市場選購新鮮的完好雞蛋和裂紋雞蛋各250枚,其中裂紋蛋的裂紋為人為地隨機制造。為了保證實驗模型的識別和預測能力,本實驗將500枚雞蛋樣本分為兩組,其中400枚作為訓練集,通過10倍交叉驗證法驗證模型性能。另外100枚作為預測集,用來檢測模型的預測能力。禽蛋聲音信號的敲擊設備采用電磁驅動的伸縮式敲擊設備,參照發(fā)明專利一種禽蛋裂紋敲擊聲音采集裝置[7](專利號201320573927.5)。禽蛋特征提取來自前人在基于聲學的禽蛋裂紋領域的研究[8]選取5個特征變量均能反映完好和裂紋雞蛋的差異主要特征有:尾部動態(tài)變化、總能量、x向頻譜重心、y向頻譜重心、中低頻能量。
為了驗證在PC訓練好的權重和偏置導入到ARM平臺不會影響網(wǎng)絡模型的預判結果。首先,在計算機端利用TensorFlow框架進行BP神經(jīng)網(wǎng)絡模型訓練,輸入的雞蛋裂紋特征參數(shù)有:尾部動態(tài)變化、總能量、x向頻譜重心、y向頻譜重心、中低頻能量。訓練結束后將得到權重和偏置導入到ARM平臺。在ARM平臺上建立與計算機端一致的BP神經(jīng)網(wǎng)絡,然后傳入預測集數(shù)據(jù)運行神經(jīng)網(wǎng)絡進行測試并對ARM實驗系統(tǒng)和PC實驗系統(tǒng)神經(jīng)網(wǎng)絡的測試準確率進行比較結果如表1所示。
表1 BP神經(jīng)網(wǎng)絡準確率比較
根據(jù)實驗結果,PC端神經(jīng)網(wǎng)絡判別準確率與ARM平臺上的準確率一致,說明通過PC訓練得到的權重和偏置導入到ARM端不會造成神經(jīng)網(wǎng)絡判別準確率的下降。
針對原有的禽蛋裂紋檢測技術不能滿足工業(yè)生產(chǎn)要求的缺陷,本文提出一種面向ARM處理器的BP神經(jīng)網(wǎng)絡的優(yōu)化方法。該方法的主要思想為通過禽蛋數(shù)據(jù)采集及處理,提取禽蛋的5個特征參數(shù),在PC端完成BP神經(jīng)網(wǎng)絡模型的訓練得到的權重和參數(shù)導入到ARM平臺,為了BP神經(jīng)網(wǎng)絡更好地在ARM平臺上運行設計鏈表結構的方法使得BP神經(jīng)網(wǎng)絡有更好的動態(tài)性。該算法結構可以實現(xiàn)禽蛋裂紋快速檢測,判別準確率達到90%以上,可以達到工業(yè)化技術要求。