劉科征 曾德港 重慶郵電大學
近年來,隨著人工智能,邊緣計算的興起,嵌入式系統的應用已經不僅僅局限在傳統的工業控制、消費電子、家用電器等領域,而是轉向計算機視覺等新興應用。嵌入式系統的課程設計上應該與時俱進,新增與人工智能相融合的實驗內容。本文總結了通信學院開設嵌入式課程的改革創新經驗。學院在原有課程內容基礎上,將人工智能,計算機視覺等新技術融入課程的實驗教學中,增加了圖像分割,卷積神經網絡等新技術的運用,拓展了學生對新技術的理解,豐富了學生對跨專業應用的視野。為嵌入式系統課程建設提供了新的思路。
在各種深度神經網絡結構中,卷積神經網絡是應用最為廣泛的一種,它由LeCun 在1989 年提出最早被成功的應用在手寫數字圖像的識別上,卷積神經網絡通過卷積和池化自動學習圖像在各各層次上的特征,這符合我們理解圖像的常識。人在認知圖像時是分層抽象的,首先理解的是顏色和亮度,然后是邊緣、角點、直線等局部細節特征,接下來是紋理、幾何形狀等更復雜的信息和結構,最后形成整個物體的概念。通常在計算機視覺課程的實驗設計中,卷積神經網絡是教學的重點內容。因此在嵌入式系統的實驗拓展中,嘗試將卷積神經網絡的實驗內容遷徙到嵌入式系統中完成。
在卷積神經網絡的學習過程中,由于對訓練集處理的運算壓力較大。嵌入式系統的處理器運算能力不可能在短時間內完成模型的訓練和驗證。因此本實驗的內容我們分成了兩個部分來進行。第一階段是在高性能計算機上設計神經網絡的結構,訓練并導出網絡訓練模型,在這個階段主要應該考慮神經網絡的模型選擇,訓練集測試集的選擇。第二階段是利用樹莓派進行圖像獲取和圖像處理,將第一階段所得出的訓練模型用于嵌入式系統并得出識別結果,該階段主要考慮圖像獲取方式,圖像處理步驟,圖像如何格式等內容。
2.1.1 BP 神經網絡
誤差反向傳播神經網絡是一種多層的前饋神經網絡,也是我們學習中最先接觸到的神經網絡結構,由輸入層、隱含層、輸出層組成,其主要的特點是信號前向傳遞,誤差反向傳播。根據預測的誤差調整網絡權值和閾值,使得預測輸出不斷逼近期望輸出,使輸出誤差最小或者既定條件為止。

圖2.1 全連接神經網絡模型
2.1.2 LeNet-5 神經網絡模型
LeNet-5 模型是Yann LeCun 教授在1998 年論文Gradient-Based Learning Applied to Document Recognition 中 提 出,是一種應用與手寫體數字識別的高效卷積神經網絡。標準的LeNet-5模型共有七層,其每一層依次按順序為:卷積層、池化層、卷積層、池化層、全連接層、全連接層、全連接層(同時也為Output 層)。LeNet-5 模型結構圖如圖3.3 所示,其中第一個卷積層濾波器大小為5×5,深度為6;第二層池化層池化采樣過濾器大小為2×2,步幅為2;第三層卷積層濾波器大小為5×5,深度為16;第四層池化采樣過濾器大小為2×2,步幅為2。

圖2.2 LeNet-5 模型結構圖
當采用MNIST 數據集作為輸入數據時作分析,對比可知LeNet-5 網絡參數個數遠小于BP 神經網絡,結構更為合理,而通過之后的編程結果可以知道,BP 神經網絡準確率約為98.4%,LeNet-5的準確率約為99.2%,優于BP 神經網絡。因此從這兩方面得出結論:選擇LeNet-5 網絡作為本實驗設計的神經網絡結構。
利用Tensorflow 框架為LeNet-5 網絡在訓練完成后導出對應模型,在測試和識別時直接導入模型可以保證后者所用參數為前者訓練后所產生的參數。流程如下圖2.3:

圖2.3 訓練和驗證流程圖

圖2.4 識別程序流程圖
此程序主要包括在樹莓派上進行圖像拍攝,圖像處理,識別輸出等功能,其中也包括在圖2.3 中搭建的神經網絡結構用于識別。是設計最終展示的程序,其流程圖如圖2.4 :
樹莓派是一個基于定制化Linux 操作系統的微型電腦。樹莓派體積小、攜帶方便、功能齊全。支持python 編程,本設計使用的樹莓派版本為3 代B+,這個平臺包括ARM 核心的64 位微處理器,運算頻率1.2GHz,還有專用攝像頭接口、多個USB 接口、一個hdmi接口、千兆以太網接口、1GB 內存等,能夠很方便的實現我們的設計,是一個在嵌入式人工智能學習上非常理想的實驗平臺。如下圖:

圖2.5 樹莓派實驗板
軟件開發分為兩個部分,首先需要對攝像頭輸入的圖像進行處理,這里用到了Open CV 開源計算機視覺庫,Open CV 主要由C 函數和C++類構成,同時也提供Python 的接口,Open CV 同時也支持樹莓派,使用pip 組件在樹莓派上能直接安裝。
2.5.1 圖像二值化
在調用Open CV 完成攝像頭調用獲取被拍攝的圖片后,需要對圖像進行二值化處理。圖像經由灰度化以后進行二值化操作,圖像灰度化處理在OPENCV 中使用cv.cvtColor(image, cv.COLOR_RGB2GRAY)函數直接操作,返回的便是灰度化以后的圖像數據,然后使用平均閾值劃分法求灰度平均值。
2.5.2 圖像分割
圖像的切割實際就是找到單個字符在圖片中所在的像素區域,然后記錄坐標以后進行分別儲存。本部分程序主要實現的切割原理依次為:1.頂底部切割,去除頂底部白色部分,標記并記錄對應行數。2.字符分割,分割相鄰字符。圖片切割過程如下圖4 所示:
最后需要將切割以后的數字圖片周圍填充白色成為正方形,這樣圖像才不會變形,才不會影響識別結果。

圖2.6 圖像切割示意圖
2.5.3 圖像轉換為MINST 格式
轉換為MINST 格式應該經由以下步驟:1.圖片大小調整2.灰度值翻轉3.灰度值歸一化4.按次序將多個數字錄入到同一個數組中。這樣就得到了可以送入神經網絡模型中進行識別的圖片。
2.5.4 神經網絡搭建和訓練
因為LeNet-5 網絡在訓練以及測試還有最終程序中都有用到,因此將其編寫為一個單獨的庫函數在訓練完成后導出對應模型,在測試和識別時直接導入模型可以保證后者所用參數使前者訓練后所產生的參數。整個程序主要采用Tensorflow 框架中的tf.get_varible()函數創建變量用于存儲權重以及偏置項,填充適當的隨機數值然后訓練。通過Tensorflow 框架依次完成卷積層、池化層和全連接層的創建。并使用滑動平均模型更新參數并使用交叉熵作為損失函數。最后通過驗證程序完成準確率的計算。
在神經網絡訓練進行時,每經過1000 次訓練便會輸出一次損失函數值,這個值越小越好,最后得出選擇模型的判斷的輸入結果以及準確率,如下圖所示,其中第一行為訓練網絡結果,第二行為依次判斷是否準確結果,第三行為準確率,單位為%,由結果可見準確率為99.3%,符合設計要求。

圖3.1 訓練結果測試
通過實際拍攝圖像進行測試,經過二值化,圖像分割,格式轉換后得到的數字圖片。最后將圖片送入樹莓派最后進行圖像的識別,拍攝圖片和最后的測試結果如圖3.2 和3.3 所示。

圖3.3 最后的識別結果

圖3 .2 攝像頭拍攝圖片
本文以嵌入式人工智能為出發點,設計了一個基于樹莓派的手寫數字識別實驗。該實驗綜合了卷積神經網絡的搭建與訓練,結合了Open CV 的圖像處理。內容涵蓋了嵌入式系統設計、人工智能和數字圖像處理等內容。該實驗有助于通信學院的通信、電子和信息工程等相關專業學生深入了解人工智能,計算機視覺等關鍵技術,有助于提高學生跨學科專業的創新能力與工程實踐能力,使非計算機專業的學生能在自己的專業領域更好的接觸人工智能的相關應用。