梁允泉,董苗苗,齊振嶺,2,劉羿漩,2,葛廣英,孫群
(1.聊城大學物理科學與信息工程學院,聊城 252059;2.山東省光通信科學與技術重點實驗室,聊城 252059;3.聊城大學計算機學院,聊城 252059;4.聊城大學機械與汽車工程學院,聊城 252059)
發展智慧城市是中國促進城市高度信息化、網絡化的重大舉措。智慧交通作為智慧城市的關鍵項目之一,以物聯網、云計算、移動互聯網等新一代信息技術作為技術支撐,建立與完善道路監控體系和信息網絡系統。其中,通過監控對行駛中的車輛進行實時的車牌信息檢測是智慧交通中的一個重要分支。
對于車牌號碼的檢測,常用的圖像處理和字符分割等方式屬于傳統的檢測方式,例如劉艷華[1]設計了基于MATLAB的車牌檢測系統,通過對車牌圖像進行灰度圖轉換、灰度變換、中值濾波去噪、邊緣檢測等對車牌信息進行定位和字符分割的方式,實現對車牌號碼的檢測。聶文都等[2]設計了一種基于OpenCV與SVM的車牌識別方法,用Canny算子獲取圖像邊緣輪廓信息,基于SURF算法對車牌進行特征提取,并結合HSV顏色空間來定位車牌位置;基于垂直投影方法來提取車牌字符特征,再利用SVM算法實現對車牌字符的識別,該方法主要利用計算機視覺庫OpenCV實現,利用OpenCV封裝的SURF算法和SVM算法實現車牌識別。以上兩種方式比較簡單,可以識別大多數車牌信息,但誤差較大,識別精度易受圖像質量好壞的影響。
在移動設備計算和物聯網快速發展的帶動下,將深度學習模型部署到邊緣設備中成為發展的新趨勢。以微型化的設備推理實時數據,對獲取的數據做簡化處理后上傳至云端計算,不僅減少了數據量的傳輸,而且緩解了云服務器的計算壓力。李向榮等[3]提出一種基于YOLOv3車牌識別的優化算法,構建了新的車牌數據集并對數據集中的車牌和字符進行標注,優化的YOLOv3算法在構建的車牌數據集上取得了較好的識別精度。李世偉[4]利用遷移學習的方式,將YOLOv5算法應用在車牌識別檢測中。以上兩種方式對車牌號碼識別的效果雖然相對于傳統方式有了很大提升,但面對復雜的路況和密集的車輛,對硬件設備算力也提出了較高的要求,同時,以云計算為核心的集中式處理模式也無法高效地處理邊緣設備產生的大量數據。
因此,本文基于YOLOv5算法,設計改進了一種輕量化的網絡結構,與Intel Movidius NCS2[5]和樹莓派4B邊緣設備相結合,用邊緣設備加速推理YOLOv5算法模型,在保持對車牌檢測有較高準確率的同時還可以提高推理速度。
根據網絡深度的不同,YOLOv5目標檢測算法可分為5n,5s,5x,5m,5l五種,本文以YOLOv5n為基礎實現對車牌號碼的識別,其網絡模型結構如圖1所示。YOLOv5發布的6.1版本中,輸入端不僅使用了Mosic數據增強方式而且還添加了可選項Albumentations[6]的數據增強方式,Albumentations主要通過在YOLOv5中定義圖像隨機內核的大小對輸入圖像進行模糊、灰度轉換、隨機亮度和圖像壓縮,從而實現在已有的數據中創建新的訓練樣本,來提高模型的訓練質量。在YOLOv5的主干網絡中,為提高YOLOv5的兼容性,用于切片操作的Focus結構被的卷積層Conv模塊替換掉,兩者在理論上是等價的,但對GPU設備而言,6×6大小的卷積層比Focus更加高效。在v6.1版本中,空間金字塔池化SPP結構被改為SPPF結構,此結構與SPP基本相同,唯一不同的是將并行池化方式改為串行三個5×5大小的池化層,這種池化方式使得提取的特征效果更好。
為了能更好地在邊緣設備中使用YOLOv5算法,需要降低該算法的計算量,提高對車牌的檢測效果,同時實現加速推理。因此對YOLOv5算法做了如下改進:
首先,行駛車輛中的車牌號碼屬于小目標信息,真實的場景環境復雜,為了能夠提高YOLOv5算法對車牌號碼小目標的檢測能力,在YOLOv5的網絡中加入SE[7-8]注意力機制。SE注意力機制易于實現,可以很容易地加入到YOLOv5的網絡模型[9]中,雖然會增加一點計算量,但是加入之后的檢測效果比原來的算法好。
其次,將原有的卷積層[10]更換為深度可分離卷積。在計算資源受到限制的硬件設備端,原有的卷積層計算量大,影響實際的運行速度[11]。深度可分離卷積和原有的卷積層結構類似,可以用來提取圖像的特征,但其網絡的參數量和運算成本都要遠遠低于原有的卷積層。
最后,將YOLOv5中設定好的先驗框[12]用K-means算法重新獲取[13]。
綜上所述,改進后的網絡結構如圖2所示。
如圖3所示,本文所采用的硬件設備為樹莓派4B[14],它是一款基于RAM架構的微型電腦主板[15],其擁有基本時鐘頻率1.5 GHz的BroadcomBCM2711(Cortex-A72)四核處理器。相比樹莓派3B+而言,BroadcomBCM2837(Cortex-A53)處理器的性能提升約1.8倍,且單個周期指令吞吐能力提升30%以上,這使得樹莓派4B比樹莓派3B+整體性能提升近一倍,達到參與邊緣計算的能力。樹莓派4B的內存升級為DDR4,以此來支持更高的帶寬和頻率。樹莓派4B以SD卡作為硬盤,可以寫入Raspberry Pi OS、Ubuntu、Windows 10 IoT操作系統,其對外有4個USB接口、1個以太網接口和兩個Mini HDMI接口,最高可以60 fps的刷新速度支持雙顯示屏。相比樹莓派3B+的擴展模塊,樹莓派4B擁有2.4/5.0雙頻無線與藍牙5.0/BLE,各種模塊之間的相互結合使得樹莓派成為一種體積小、功能全且應用廣泛的電腦。
邊緣設備采用英特爾第二代神經計算棒(Neural Compute Stick 2)NCS2,如圖3所示,其造型和U盤相似,它可以兼容Ubuntu、CentOS和Windows 10操作系統[16],通過USB 3.0 Type-A接口接入樹莓派4B設備,旨在為低功耗設備提供加速推理的功能。第一代神經計算棒基于Intel Myriad 2 VPU視覺處理器[17],與第一代神經計算棒相比,第二代神經計算棒采用了最新的Intel Movidius Myriad X VPU視覺處理器[18],該視覺處理器有專用的神經網絡硬件加速器,可以在極低的功耗下執行推理運算。
第二代神經計算棒采用OpenVINO工具套件,OpenVINO是Intel推出開放視覺推理和神經網絡優化的開發套件,它可以為不同的網絡模型提供轉換功能。本文通過修改模型轉換代碼,舍棄模型中影響推理性能的卷積網絡,設置模型優化器轉換參數[19],指定輸出層,使其能在Intel各類AI設備之間實現加速推理。依靠Open-VINO開發工具可在樹莓派4B中搭建邊緣設備深度學習環境,使用Intel Movidius NCS2對模型進行加速推理。
在圖像采集方面,如圖4所示,樹莓派支持USB接口和CSI(CMOS圖像傳感器)兩種類型接口攝像頭,在選用接口前,首先對兩種類型的攝像頭進行性能測試。使用OpenCV啟動攝像頭,查看兩種類型攝像頭的CPU占用率,以及使用OpenVINO深度學習環境自帶樣例實時推理,來測試攝像頭的幀率、速度,最終對比結果見表1。

表1 兩種類型接口攝像頭性能對比
從表1中可以看出,在CPU的占用率方面,USB類型的攝像頭比CSI攝像頭高一倍,但在速度、幀率、啟動速度上比CSI攝像頭表現更出色。因此,本文對車牌號碼的檢測采用USB類型的接口攝像頭作為前端圖像采集。
將改進后的YOLOv5算法部署到樹莓派4B硬件設備中,對道路中行駛車輛的車牌號碼進行實時檢測,加入邊緣設備Intel Movidius NCS2進行加速推理,采用遠程連接的方式將實時的檢測畫面傳輸至服務器端,同時將獲取的行駛車輛的車牌信息發送至云端,在云端做進一步推理。整體流程設計如圖5所示。
如圖6所示,邊緣設備由樹莓派4B、Intel Movidius NCS2和USB攝像頭組成。在樹莓派4B中搭建OpenVINO深度學習環境,將樹莓派4B與邊緣設備Intel Movidius NCS2進行互聯通信,可以在前端加速推理YOLOv5深度學習模型,實現對車牌號碼的檢測與識別。并利用百度云開放的API端口,將檢測到的車牌信息發送至百度網盤保存,云計算平臺根據百度網盤中的數據做進一步處理,分析邊緣設備遺漏的車輛信息。服務器主要用于訓練、優化、轉換YOLOv5模型,遠程連接到服務器端實時觀察車牌的識別效果。
前端使用OpenVINO Raspi 2020.3.321版本工具包在樹莓派4B上部署深度學習環境,設置樹莓派USB規則與神經計算棒連接,利用Python3.7編寫推理程序,搭建百度云開放API的Python環境,將推理所得數據上傳至百度網盤保存。服務器端使用的GPU型號為NVIDIA Quadro RTX 4000 8 G,訓練YOLOv5算法模型的深度學習環境為PyTorch1.81+CUDA10.2,并利用openvino_2020.3.194工具包將訓練好的模型轉換為IR格式文件。
為保證訓練模型的高準確性,如圖7所示,本文采集了質量較高的車牌圖片,同時使用OpenCV對數據集進行擴充,使車牌數據集中的圖片具有各類場景、不同角度和明暗變化的特點。與傳統的車牌號碼檢測不相同的是,此次訓練所用的數據集中添加了新能源車牌、電動車車牌、摩托車車牌以及載重汽車車牌的樣本。數據集的車牌圖片共計1693張,類別中包含全國(除香港特別行政區、澳門特別行政區以及臺灣省)31個省份車牌大類,以及除O、I外的24個英文字母和0至9阿拉伯數字,共記65個類別標簽。最后使用Labelimg工具對數據集中的圖片進行手工標注,并生成XML文件保存。
本文的實驗參數設定如下:輸入圖片大小為640×640,batch-size設 置 為16,epochs為1500。將訓練所得模型轉換成ONNX格式文件,再利用OpenVINO模型優化器將ONNX文件轉換至IR格式文件,編寫Python程序實現推理功能,在樹莓派上加入神經計算棒對模型進行加速推理,推理結果保存為文本格式,并上傳至百度云盤保存。
本文將改進的YOLOv5與未改進的算法做對比,對比結果如表2所示。
從表2的結果可以看出,YOLOv5n的平均推理速度和YOLO層的解析速度均快于YOLOv5s,推理速度提升了38.60%,這是因為YOLOv5n的網絡深度較淺,以神經計算棒的算力來推理模型的三個輸出層速度較快;在YOLOv5中加入CBAM注意力機制后,推理速度相較于YOLOv5n降低了6.29%,相較于YOLOv5s提升了34.74%;本文改進的算法相較于YOLOv5n推理速度提升了13.41%,YOLO層解析速度也快于YOLOv5n模型。選擇100組推理時間作對比,對比結果如圖8所示,改進的算法推理過程相比較另外三種YOLO模型更加穩定,上下浮動集中在5 ms與10 ms之間,側面驗證了改進后的算法在推理速度和穩定性方面表現較好。

表2 實驗結果
實驗發現輸入圖像的清晰度、亮度與周圍環境復雜程度會對推理結果產生影響,而且輸出層的推理速度也與每幀圖片上同時存在的車牌號數量有關。改進后算法在邊緣設備中的實時推理效果如圖9所示。
綜上所述,本文基于邊緣設備Movidius NCS2與低功耗、低算力的樹莓派4B相結合的方式,通過改進的YOLOv5算法實現車牌號碼的識別,同時比較了邊緣設備神經計算棒在樹莓派上使用不同網絡模型的效果和推理速度。從實驗的結果來看,在樹莓派上利用神經計算棒提高計算性能是可行的,并且改進的YOLOv5算法相比較YOLOv5n網絡模型,參數更少、算力要求更低,在邊緣設備中推理速度更快。本研究為智慧交通建設中遇到的微型化與實時性問題提供了一個解決方案。為了滿足更復雜的交通環境下的需要,下一步工作也將繼續在多條神經計算棒共同推理方面做出努力。