羅小強,朱海榮(通信作者)
(廣西科技師范學院數學與計算機科學學院 廣西 來賓 546199)
夏季是溺水事件高發期,而溺水往往發生在偏僻區域。當發生溺水后,急需救援而常常錯過最佳救援時機。此外,在偏僻區域也頻發交通事故,也因無法得到及時救援,導致嚴重后果[1]?;谝陨锨樾?,本文提出了一種基于Yolo V2目標檢測網絡與K210單片機的安全預警系統,該系統采用Python編程語言開發,旨在有人、車輛等目標進入預警區域,進行檢測并告知救援人員,有效地預防事故的發生。
系統以pyAI-K210單片機為核心,通過自帶的攝像頭pyAI-K210 CAM拍攝檢測區域(偏僻區域)。攝像頭采集到圖像數據并輸入到單片機,由單片機燒錄的輕量級目標檢測網絡YOLO V2對采集的視頻圖像進行目標識別。當識別結果包含所列出的檢測目標時,說明需要進行預警,目標已進入該區域。于是,通過運營商的網絡向預設的救援人員發送彩信,告知該負責人當前有目標進入某偏僻區域,須持續關注目標動態。系統框架,如圖1所示。

圖1 系統框架
YOLO在2016年被提出,發表在計算機視覺頂會CVPR(Computer Vision and Pattern Recognition)上[2],其含義為僅僅需瀏覽一次便可以識別出圖片中的物體的類別和位置。因僅需要看一次,YOLO被稱為Region-free方法,相比于Region-based方法,YOLO不需要提前找到可能存在目標的Region。
典型的Region-base方法的流程大致分成2個階段:首先,通過計算機圖形學(computer graphics,CG)或深度學習(deep learning,DL)方法對待檢測圖片進行分析,找出若干個可能存在物體的區域。然后,將找出的區域裁剪下來,放入一個圖片分類器中進行分類。由此,Regionbased方法也被稱作兩階段(two-stage)方法。與上述方法相比較,Region-free方法僅需要進行一次掃描,也因此被稱作單階段(one-stage)模型。
由此可知,YOLO是一種能進行實時目標檢測的單階段、輕量級模型(可部署到嵌入式單片機上)。
YOLO V2是在YOLO V1基礎上進行改進的版本,不僅提高了定位的準確度與召回率,而且也提升了檢測速度。YOLO V2網絡結構如圖2所示[3],其中,k=5,C為識別目標種類,用coco數據集訓練后,可識別80個種類;使用不同數據集進行訓練,可識別種類不同,最多能夠識別9 000個種類。采用Darknet-19網絡(表1)作為骨干網絡。

表1 Darknet-19 網絡結構

圖2 YOLO V2網絡結構
YOLO V2網絡取消了YOLO V1中的全連接層,使用全局平均池化的方法得到固定長度的特征向量,從而實現高分辨率圖像的訓練與檢測。YOLO V2在224×224的分辨率圖像上進行分類模型預訓練,經過5次降采樣后,得到13×13的特征圖,通過分類器進行目標檢測與分類。為適應更高分配率圖像的輸入,又在448×448的高分辨率圖像上進行微調,最終MAP提升約4%。
算法處理過程中,首先將圖片劃分成13×13的網格,當目標中心落在單元格中心時,由該單元格預測目標的邊界框與種類。每個單元格預測的位置信息為(tx,ty,tw),輸出的位置信息是相對該單元格中心坐標(cx,cy)、寬高(pw,ph)的偏移量,因此目標邊界框可表示為[4]:
pyAI-K210由深圳01Studio設計研發,是一種集成機器視覺與聽覺的系統級芯片的高性能開發套件,其接口兼容MicroPython的pyBoard。它擁有卷積神經網絡加速器KPU以及音頻處理器APU,不僅可進行卷積神經網絡運算,而且具備很好的低功耗視覺處理速率和準確率。
KUP內置豐富的神經網絡處理單元、支持主流框架模型。首先,內置卷積、池化、批歸一化、激活運算單元[5],支持YOLO V2訓練的模型文件進行檢測,實時獲取檢測目標的大小和類別;其次,支持主流框架訓練的定點化模型,對網絡層數無限制并且可單獨配置卷積參數,支持參數數量高達5.5~5.9 MiB[6]。
pyBase是開發板底板,有很強的擴展性,設計外設接口主要有:IO口、I2C/UART接口、OLED接口、傳感器接口、四路舵機接口等。
嵌入式芯片由于具有較少的RAM和ROM資源,如STM32 F407IG的RAM大小為196 KB、FLASH內存容量為1 024 KB,因此只能使用C語言及C++語言進行編程,而這2門編程語言入門門檻較高,這樣會使產品的二次開發變得復雜,難度也隨之增大。隨著“互聯網+”不斷推進升級,需要網絡連接功能的應用越來越多,如果使用傳統的C語言或C++語言進行網絡連接的開發,對于初級開發者將會非常困難,因而不利于整個行業的發展。
而作為主流的動態解釋語言,Python因其具備簡單易學、移植性好等特點受到了開發者的廣泛關注。MicroPython是Python語言的變體,專門作為為嵌入式芯片設計和優化的開發語言,因其易用性的特點,在物聯網領域和其他嵌入式領域占有一席之地[7]。簡而言之,MicroPython是編程語言Python的精簡高效實現,僅包括Python小部分的標準庫,經過優化,可在微控制器和有限的環境中運行。
通用異步收發傳輸器(universal asynchronous receiver/transmitter,UART)是一種異步收發傳輸器,屬于硬件設備的一部分。它的功能是將要傳輸的信息在并行通信與串行通信之間進行轉換,通常被集成到其他通信接口之上。
串口稱為串行接口(串行通信接口),按電氣標準及協議分類有:RS-232-C、RS-422、RS485、USB等。前3種標準僅對接口的電氣特性做出規定,并不涉及接插件、電纜或協議。在嵌入式系統中,通常作為MCU的外設;一般情況下,由芯片引腳直接引出的是 TTL電平,中間接轉換芯片的可能是RS232電平[8]。pyAI-K210的uart模塊主要用于驅動開發板上的異步串口,可以自由對uart進行配置。pyAI-K210共有3個uart,每個uart可以進行自由的引腳映射,UART串口接TTL電平。
SIM900A是一款尺寸緊湊型、高可靠性的無線模塊。該無線傳輸芯片屬于雙頻GSM/GPRS模塊,工作頻率支持4種頻率850、900、1 800、1 900 MHz,可低功耗實現語音、SMS、數據和傳真信息的傳輸。支持RS232串口和LVTTL串口,并帶硬件流控制,支持5~24 V的超寬工作范圍。該模塊提供2組TTL接口,一組為2.85 V的TTL接口,可與3.3 V的單片機直接連接;另一組為兼容各種電壓的TTL電平,可與5 V和3.3 V等單片機直接連接。電路連接時,pyAI-K210單片機開發板P11的TX引腳、RX引腳、GND引腳分別連接SIM900A的5VR引腳、5VT引腳、GND引腳。單片機與SIM900A引腳連接,如圖3所示。

圖3 單片機與SIM900A引腳連接
系統進行目標檢測時使用的是現成的YOLO V2網絡模型,是K210單片機系統自帶的20分類模型(在進行使用時,修改為5分類模型)。由于系統自帶的目標檢測模型,能識別自行車、公共汽車、小汽車、摩托車、人等5種目標,基本符合應用需求,因此不再重新訓練新模型,而是直接通過KPU加載現成模型來實現目標物體的識別。
系統具體工作流程如下:
步驟1 攝像頭監測偏僻區域;
步驟2 K210單片機接收攝像頭視頻;
步驟3 單片機使用自帶KPU及YOLO V2網絡檢測視頻中目標;
步驟4 若發現設定類型目標則運行步驟5,否則返回步驟3;
步驟5 繪出目標邊框與標出識別置信度;
步驟6 判斷是否到設定信息發送時間(避免頻繁發送彩信),如果到達則運行步驟7,否則返回步驟3;
步驟7 發送現場畫面彩信給指定人員,完成后返回步驟3。
系統工作流程,如圖4所示。

圖4 系統工作流程
系統實現后,分別對進入偏僻區域中的5類目標(自行車、公共汽車、小汽車、摩托車、人)進行檢測,通過對各類目標均進行樣本數為30個的檢測。系統目標檢測平均識別率見表2。對目標識別時,場景的系統彩信功能效果如圖5所示。

表2 系統目標檢測平均識別率

圖5 系統彩信功能效果
本文提出了使用K210單片機運行YOLO模型實現目標檢測的系統,通過使用GPRS方式傳輸畫面信息,從而減少不必要的視頻監控,達到控制系統成本開銷的目的。系統對突然進入偏僻區域的指定目標進行檢測與預警,以確定是否需要救援。系統搭建完成后,能實現預定對自行車、公共汽車、小汽車、摩托車、人5種目標的檢測任務,適合布設在偏僻區域。結果表明,該系統能避免使用傳統監控模式所需的供電線路、視頻監控有線傳輸管道。由于傳統監控模式在偏僻區域進行供電和網絡管道布線成本極高,而本文系統采用太陽能供電、GPRS傳輸模式傳輸監控圖片,不僅解決了監控供電問題,同時也克服了偏僻區域若采用視頻傳輸模式而運營商網絡帶寬不夠的問題。這樣既降低供電成本、克服傳輸網絡帶寬問題又可降低后期運維成本,因而具有很好的應用價值。