李曉琳,龐保孟,曹銀杰,田存偉,馮文文,劉 明,耿相珍
(1.聊城大學 物理科學與信息工程學院,山東 聊城 252059;2.山東省光通信科學與技術重點實驗室,山東 聊城 252059;3.山東高速物流供應鏈有限公司,山東 青島 266000)
交通標志作為智慧交通重要的組成部分,交通標志識別在車輛駕駛和交通安全起著重要的作用[1]。近年來,交通標志識別也是國內外學者研究的熱點[2-3],機器學習的相關理論與應用發展迅速,尤其是卷積神經網絡(convolutional neural network,CNN)取得了相對較高的成就,在圖像識別[4]、語音識別[5]、物體檢測[6]等機器學習領域受到廣泛應用,基于神經網絡的交通標志識別方法具有檢測速度快、識別精度高以及成本低廉等特點是現在機器學習領域的重點研究方向。
基于CNN的圖像識別研究[3,7-8]及消費類的電子芯片產品,大部分基于操作系統之上[9],無法做到自主可控性、數據穩定可靠,并且基于微控制器芯片上做的相對較少;2019年3月國防科大與曠視的研究團隊(孫劍老師在列)提出在移動端ARM芯片實時運行的兩階段通用目標檢測算法ThunderNet,為圖像的識別可以實現在芯片[10]上提供了重要的參考價值。2018年ARM-NN針對Cortex-M系列芯片研究了CMSIS-NN庫;CMSIS-NN庫搭建網絡模型結構不受光照等過多自然環境影響,避免手工制作特征的設計難度,能夠在訓練中能夠自動完成特征的提取、抽象和分類,此方法基于微控制器采用CMSIS-NN庫搭建網絡識別程序框架實現對各類圖像的識別,數據安全可靠。2016年F.N.Iandola,S.Han等人提出SqueezeNet網絡模型,此結構不僅可以保證精度不損失,相比原來的AlexNet網絡,其網絡結構可以將訓練的權值壓縮50倍左右;為提高標志識別的準確度,提出采用改進SqueezeNet網絡模型為在Cortex-M開發板上實現圖像識別奠定了基礎[11-12]。
本文提出一種基于微控制器改進SqueezeNet交通標志識別的方法,采用改進SqueezeNet網絡模型結構,降低權值大小,成功移植到前端,前端應用CMSIS-NN卷積神經網絡庫搭建與訓練機相同的網絡模型結構進行對交通標志的識別,提高了圖像識別的速度,并且只將識別結果發送給后端服務器,可降低后端計算數據量。此研究能為智能交通提供了一種可選擇的方案同時,也可以為交通管理部門提供了便利。
CMSIS(Cortex Microcontroller Software Interface Standard)是Cortex微控制器軟件接口標準,CMSIS-NN作為2018年CMSIS加入的重要的成員,大大緩解了微控制器神經網絡相關軟件優化壓力。CMSIS-NN通過對神經網絡中所需要的重要的關鍵函數進行優化而達到加速的目的,由NNFunction(各種實用函數)和NNSupportFunctions(實現神經網絡層類型相關函數)兩部分組成,內核API簡單,對在開發板上搭建與PC訓練機相同的改進的SqueezeNe網絡模型結構重定位起到關鍵作用。
系統PC訓練機的網絡是采用基于TensorFlow架構,python語言編程,利用改進SqueezeNet網絡模型結構對交通標志圖像數據庫進行訓練,使得權值文件大小縮小了50倍,并將訓練好的權重矩陣以.h文件方式保存;前端利用Cortex-M系列芯片內嵌的CMSIS-NN庫,搭建與訓練機相同網絡模型結構;并將訓練好的權值矩陣.h文件成功移植到前端STM32F767開發板程序中,同時攝像頭采集到的圖像利用自定義的圖像處理庫函數進行預處理,提高了在微控制器Cortex-M開發板上的識別速度,數據安全可靠,如圖1所示為系統整體功能結構圖。

圖1 整體功能結構圖
從AlexNet模型到Deep Residual Learning模型,其網絡模型經過參數化的,訓練的權值矩陣參數存在大量的冗余,由于后期要將其權值矩陣參數移植到嵌入式開發板上,考慮到開發板的運算速度與??臻g,降低冗余的參數以及提高識別準確率的問題,在SqueezeNet網絡模型結構的基礎上提出采用改進SqueezeNet網絡結構[12],其參數設置如表1所示。

表1 改進的 Squeezenet 模型參數
原有的 SqueezeNet提出fire module核心模塊[15],fire module模塊由squeeze層和expand層兩部分組成。squeeze層有1*1濾波器的壓縮卷積層;expand層包含1*1和3*3卷積濾波器,系統把1*1 和3*3得到的feature map 進行Concat,并滿足S 圖2 Fire module 功能結構圖 在原有SqueezeNet模型基礎上,為了提高識別的準確度,因此對SqueezeNet網絡模型結構[12-13]進行了改進,在保持池化層特征大小與將融合Fire model輸入輸出特征大小保持一致基礎上,進行兩個方面的改進。 將池化層融合引入到后續的卷積層:融合的算法是池化層提取上一級t個特征圖,下一層的卷積層t個特征圖輸出提取的a個特征圖,將a和t個特征圖進行融合得到s個特征圖,式(1)為融合算法。 xs=f「wtdown(x)t+bt?f(waxa)(t+a=s) (1) 采用L2正則化來實現約束Softmax:Softmax 函數是歸一化的基于概率進行多分類的指數函數,式(2)為分類概率的計算式,式(3)為訓練集損失函數的計算式;改進的SqueezeNet網絡模型結構中采用的L2約束Softmax分類函數,式(4)為其計算公式,此函數增加對f(xi)的L2范數約束,采用最佳g值來確定特征f(xi)的約束值,從而做到對交通標志的明確分類,加快標志分類的收斂速度。 (2) (3) ?i=1,2,…,M (4) 改進SqueezeNet網絡模型結構在CNN的基礎上,通過前向傳播獲取計算輸出結果,利用反向傳播計算誤差結果,采用反向計算出誤差對權值進行更新。 采用Cortex-M系列的STM32F767開發板作為系統前端,使用DCMI接口,OV5640攝像頭[14]選擇支持數字視頻接口(DVP)連接前端,采集圖像輸出格式為分辨率為 1280*800,RGB565(16位),為了獲得網絡可識別的圖片格式,通過ARM公司提供的CMSIS-DSP庫加快對拍攝到的交通標志圖像進行處理[1314],程序中CMSIS-DSP庫調用DSP指令對所要標志的圖像進行處理得到網絡可識別的圖像格式, DCMI接口支持DMA傳輸,系統采用對芯片用程序擴展32M的SDRAM得到一部分空間,用DMA直接上傳圖片數據,不經CPU直接到內存,加快圖片上傳的速度,對交通標志的快速識別起到了關鍵性作用。 在微控制器上進行圖像識別的過程中,主要在于卷積的圖像數據的矩陣運算,利用CMSIS-DSP庫中具有的向量運算、矩陣運算、濾波器、統計功能和高級數學等功能,程序中用結構體arm_matrix_instance_f32表示矩陣(軟件程序如下):結構體的元素Rows表示矩陣的行,Cols表示矩陣的列,rData指向矩陣數組,矩陣元素為32位無符號float類型,滿足數據精度要求。 typedef struct { uint16_t Rows; uint16_t Cols; float32_t *rData; } arm_matrix_instance_f32; 除了矩陣運算,對于攝像頭采集到圖像,要做到對獲取圖像的濾波、去噪及快速定位,提出了自定義的圖像處理庫,對于前端實現對交通標志快速識別,起到重要的作用。相比在PC端的圖像處理及識別,基于微處理器圖像識別功耗較低,穩定可靠及自主可控的優點。 在前端進行標志圖像識別前考慮到神經網絡運算調用棧區空間大小,微控制器芯片在初始化時擴展了棧區的空間大小,提高神經網絡的計算空間。采用改進后的SqueezeNet模型結構,在訓練機對現有的交通標志集進行訓練,并以.h權值矩陣文件形式進行保存,根據.h文件中是float32型數據,微控制器Cortex-M系列開發板需要int8型數據,需要進行數據轉換,并將處理好的權值矩陣.h文件移植到Cortex-M系列STM32F767IGTX開發板,在軟件程序中利用程序對攝像頭,對于一張圖相片上多個標志圖像的,利用相關的軟件程序對交通標志的標注定位,利用圖像處理庫會對識別的交通標志進行灰度、去噪[14]等預處理,利用搭建與訓練機相同模型結構進行識別,并將識別出的交通標志信息上傳。交通標志識別流程如圖3所示。 圖3 交通標志識別整體流程 系統采用德國交通標志檢測數據集(GTSDB),此數據集包含43類真實車輛駕駛環境下的高清交通標志場景圖像,數據集包含大量分辨率低、光照不良、遮擋及運動模糊等不利條件下的交通標志樣本圖像[14]。為了擴充以及增強數據集的質量,在交通部門允許的情況下,自行拍攝晴天、陰天、雨天、光照不足等不同條件的車輛真實駕駛圖像來補充數據集,最終自定義數據集包含102類主交通標志的圖像。實驗采用對102類自定的數據庫由不同亮度下的各個交通標志的標準樣本標志圖像進行訓練,通過數據擴增的方法將所有圖像按照正方向、反方向各旋轉20°,每隔 5°采集一次,根據四種天氣環境(晴朗,光照合適、陰,光照不足、雨天、部分被陰影遮擋),定義大約一幅圖像形成320幅樣本圖像,自定義數據庫標志圖像庫圖片已達到35840張,為了便于訓練,將所有的數據集每幅圖像分辨率都處理成尺寸為224*224像素[8],標志圖像部分樣本如圖 4 所示。 圖4 部分標交通標志樣本 在公路交通管理部門的許可監督下,實驗采用一輛正在行駛的車輛為例, 利用PC訓練機采用改進SqueezeNe網絡模型結構將對102類指示交通標志進行訓練,并將訓練好的權值矩陣文件成功移植到Cortex-M系列STM32F767IGTX開發板上,在開發板上搭建與訓練機相同的網絡結構,首先利用自定義的圖像處理庫進行對攝像頭采集到的圖像進行預處理,然后調用權值矩陣文件,實現對預處理圖像的識別。實驗采取在開發板上測試完后結果進行記錄,再對相同的標志圖像在計算機上面進行測試識別驗證,并將獲得的結果進行比對的方法。 表2是針對不同測試環境下,對指示標志、禁令標志、警告標志和旅游區標志等4類共102種主標志交通標志圖像識別,并將準確率進行比較;表3對不同標志(圓形指示標志、圓形禁令標志、三角形警告標志 、方形旅游區標志)類型進行識別;表4是利用訓練機所得到的權值矩陣成功移植到開發板上,隨意抓取六次六種車型在原始AlexNet、SqueezeNet、改進SqueezeNet及利用改進SqueezeNe網絡模型結構在Cortex-M 實現的準確率以及模型參數大小的比較。 表2 在不同環境下各個特征識別準確率(%) 表3 不同類型標志識別精確度(%) 表4 針對不同網絡模型在計算機與Cortex-M系列開發板交通標志識別結果比較(%) 根據表2結果分析,通過采取對102種的4類部分主交通標志在不同環境下識別結果統計,實驗結果表明標志識別精度比較穩定,標志平均識別率也達到了較高的精確度;表3根據識別數目不同,按相同的規則分配識別數目多少,針對不同類型標志識別,發現圓形標志與方形要比三角形標志識別準確度度要高;由表4分析在原有模型AlexNet,原SqueezeNet及修改的SqueezeNet網絡模型結構三者相比較,在計算機與開發板上結果對比發現識別準確率基本相同,并且改進模型結構權值矩陣大小相比AlexNet模型縮小了將近50倍,提高Cortex-M核對標志圖像識別的處理,明顯看出再識別率有了明顯的改善,在識別速率上,在前端將交通標志識別與在計算機上直接識別基本一致,說明此方法可行。 實驗結果驗證,利用Cortex-M系列芯片推出的CMSIS-NN庫搭建網絡可以進行交通標志圖像識別是可行的,并且通過改進的SqueezeNet網絡模型結構訓練好的權值參數的大小有了明顯的減少,對于將模型參數移植到Cortex-M嵌入式開發板上奠定了基礎,同時利用自定的圖像處理庫,提高圖像識別及預處理的速度。針對目前交通標志的識別都是基于操作系統之上,此研究方法提出不依賴操作系統,在微控制器芯片上實現神經網絡識別的方法,為車輛駕駛和交通安全管理提供極大便利。給未來機器學習能在芯片上學習提供可選擇的方案,同時提高了交通標志識別效率。 基于交通標志識別研究的基礎上,提出基于微控制器Cortex-M系列開發板對交通標志識別,考慮到Cortex-M開發板棧區空間大小的調整以及內存的分配問題,采用改進 SqueezeNet 卷積神經網絡模型結構,有效的縮小了權值文件的大小,便于成功移植到開發板上,提高了圖像訓練識別的速度;同時采用自定義的圖像處理庫,實現對攝像頭采集到的圖像快速定位與濾波、去噪等預處理,而且基于Cortex-M系列芯片圖像識別,不依賴于操作系統,穩定可靠,而且通過實驗證明,對于102類交通標志識別平均準確度達到了97.4% 以上,而且識別速度也有了明顯的提高。但是由于數據集有限,目前只能對交通部分的102類主標志進行識別,爭取實現對更多交通標志的識別,為車輛駕駛和交通安全管理提供可參考的價值。
3 基于微控制器Cortex-M交通標志圖像預處理
3.1 圖像的采集處理
3.2 圖像的預處理
3.3 前端標志的識別

4 實驗
4.1 GTSDB數據集

4.2 實驗驗證與結果分析



5 結語