李卓寰 劉煜 彭程
湖南人文科技學院能源與機電工程學院 湖南 婁底 417000
在城市道路中,交叉路口是道路交通系統(tǒng)的咽喉,作為相交道路車輛和行人匯集、轉向的所在地,交叉路口處的交通組成、交通特征非常復雜,因此常成為交通事故的多發(fā)點[1]。據統(tǒng)計數據表明,我國城市交通事故抽樣統(tǒng)計表明,發(fā)生在交叉路口的交通事故數約為50%,而其中車輛和行人之間的交通事故又占到一半以上。交叉路口區(qū)域高密度的車流以及行人相互之間嚴重的相互干擾,極易引發(fā)交通事故[2],引起交通阻塞,車輛延誤增加等連鎖性反應,進而影響整個路網運營效率。特別的對行人的傷害事故尤其多,這不僅對行人的生命健康造成傷害,也會帶來極大的經濟損失[3]。目前這些路段常采用的安全措施是采用凸面反光鏡等方式,擴大司機視野及早發(fā)現彎道對面車輛,以減少交通事故的發(fā)生[4]。但是凸面反光鏡由于凸面反光鏡變形嚴重、安裝位置過高和擴大視野有限等原因,實際應用時效果不是太明顯。目前國內開始引入行人過街按鈕,目前國內開始引入行人過街按鈕,目前已經在成都、武漢、哈爾濱、長沙等許多城市的不同路口進行安裝并投入使用。
目前的交叉路口的交通燈智能化制度不高,對路口的交通通行提高有限。本論文通過在人流量較大的學校、小區(qū)等交叉路段,特別是在一些交叉路口和丁字路口等交叉路口設置高清攝像頭,系統(tǒng)利用攝像頭的圖像信息對路面行人進行識別,通過識別出駕駛員不易觀察到的交叉路段區(qū)域行人的數量、位置等信息,并利用識別的人體信息來點亮相關的交通信號燈等裝置。
亞博K210開發(fā)板是一款以K210芯片為控制中心,K210是嘉楠公司推出的一款MCU,其特色在于芯片架構中包含了一個自研的神經網絡硬件加速器KPU,可以高性能地進行卷積神經網絡運算[5]。該開發(fā)板可以在低功耗情況下進行卷積神經網絡計算,是低門檻機器視覺嵌入式解決方案。
開發(fā)板使用的硬件連接示意圖如圖1所示。其中K210芯片為開發(fā)板主芯片,整個板子的核心處理器,128M-bit串行閃存作為內存擴展,觸摸屏分辨率320*240,提供顯示和觸摸輸入;攝像頭采用圖像傳感器OV2640,該攝像頭支持自動曝光控制、自動增益控制、自動白平衡、自動消除燈光條紋等自動控制功能。板載CH340虛擬串口,提供供電、下載、固件和串口調試等。
圖1 硬件連接示意圖
K210的開發(fā)環(huán)境主要包括最基本的cmake命令行開發(fā)環(huán)境、IDE開發(fā)環(huán)境和Python腳本式開發(fā)環(huán)境。本文為了方便選擇了Kendryte IDE集成開發(fā)環(huán)境,Kendryte IDE集成開發(fā)環(huán)境是基于VS Code完成的,所以開發(fā)界面與VS Code類似,程序編譯成功后可以通過串口刷寫程序。
為了方便訓練樣本采用了Mx-yolov3進行模型訓練。Mxyolov3模型訓練主要包括如下幾個步驟[6-8]:
軟件環(huán)境配置包括python環(huán)境、相關依賴包、GPU訓練配置。
如果有滿足要求的顯卡,則需要安裝CUDA_10.0和Cudnn_7.6.4,如果滿足要求安裝成功后將自動啟用GPU進行訓練。
準備大量樣本并通過軟件轉換為分辨率為224×224大小的圖片。利用labelImg等軟件對圖片依次進行標注。為了標定方便主要標定為4類,行人、單車(包括電動車、摩托車)、汽車和傘(避免打傘遮擋人頭)。
img文件夾包含著所有的訓練圖片,而xml文件夾包含所有已標注好的標簽文件。計算訓練模型的錨點,然后進行樣本本地訓練,如果能進行顯卡加速能加快訓練速度,迭代運算完畢生成yolov2.h5和yolov2.tflite兩個文件。
將yolov2.tflite模型文件轉換成.kmodel模型文件。
如圖2所示為程序流程,內部初始化包括系統(tǒng)時鐘、串口、I/O、系統(tǒng)中斷 和Flash等,外部硬件初始化包括觸摸屏和Ov2640攝像頭初始化等。物體分類初始化包括模型加載和物體分類層配置初始化;而這一部分設計到物體分類模型的建立[9-10]。
圖2 程序流程圖
Main.c和region_layer.c等文件需要修改的代碼如下:
anchor分類的數目、模型的文件名稱、分類顯示數組(根據自己實際訓練的修改)
畫框不大于224*224。
使用卷積層降采樣(factor為32),使得輸入卷積網絡的224 * 224圖片最終得到7 * 7的卷積特征圖(224/32=7)。初始化檢測模型時,添加以下代碼:
obj_detect_rl.threshold=0.3;
obj_detect_rl.nms_value=0.3;
int flag=region_layer_init(&obj_detect_rl,7,7,4,224,224);
printf( “flag: %d”,flag);
int region_layer_init(region_layer_t *rl,int width,int height,int channels,int origin_width,int origin height)
{......
rl->coords=4;//坐標個數
rl->image_width=224;
rl->image_height=224;
rl->classes=channels;
......}
程序編譯通過后生成.BIN文件,通過kflash下載到K210開發(fā)板。
如圖3所示:將設備安裝在交叉路口,開機上電后顯示屏顯示攝像頭采集的畫面,并且實時檢測車、行人、單車和傘等4種物體并標記位置和顯示識別的結果,并通過串口輸出檢測結果給交通燈進行顯示。
圖3 檢測圖片
由于每一類的訓練樣本大約是300張左右,實際測試時的識別率基本上能滿足基本的使用需求。通過增加訓練樣本還能有效提高物體識別率,這樣能滿足實際使用需求。采用K210作為圖像識別終端基本能滿足物體實時檢測識別的需求,而且整體價格低廉能實現大范圍的推廣。