圖1-1 華中科技大學無人車一隊的后浪
圖1-2 華為云無人車挑戰(zhàn)賽總決賽現(xiàn)場
2.整體方案
無人車比賽整體解決方案如圖21所示,比賽主要分為三個部分,ModelArts做模型的在線訓練,HiLens Kit做模型的部署,無人車上工控機通過ROS將各個節(jié)點整合到一起,做無人車底盤的決策和控制。通過華為云ModelArts一站式AI開發(fā)與管理平臺完成數(shù)據(jù)標注、模型訓練、模型轉(zhuǎn)換等工作,得到可供HiLens Kit前向推理的卷積神經(jīng)網(wǎng)絡的模型。HiLens Kit通過自帶的相機采集圖像,通過技能部署進行模型的前向推理和加速,HiLens Kit搭載著高性能的華為人工智能芯片昇騰310,針對卷積神經(jīng)網(wǎng)絡進行了優(yōu)化,在模型的前向推理過程中可發(fā)揮出強大的算力。HiLens Kit完成交通燈、限速/解限速標志識別、斑馬線的目標檢測識別,通過Socket通信,將檢測結(jié)果傳給無人車上的工控機。無人車上工控機處理激光雷達的點云數(shù)據(jù),做Slam建圖和運行中的實時定位,工控機處理USB攝像頭的采集的車道線數(shù)據(jù),做車道線的識別,再通過ROS將所有節(jié)點信息做整合,做底盤電機和舵機的決策控制。
圖2-1 無人車比賽整體解決方案示意圖
3.ModelArts模型訓練
ModelArts是面向AI開發(fā)者的一站式開發(fā)平臺,包含數(shù)據(jù)處理、模型訓練、模型管理、模型部署等操作,并且提供AI市場功能,能夠在市場內(nèi)與其他開發(fā)者分享模型,其功能總覽如圖31所示。在比賽中,我們通過ModelArts平臺完成了數(shù)據(jù)標注、模型訓練和模型在線轉(zhuǎn)換等工作,并且通過ModelArts做模型的線上部署,檢驗模型的精度效果。
圖3-1 ModelArts一站式AI開發(fā)平臺功能總覽
3.1.任務分析
本次大賽涉及6類目標的檢測識別:紅燈、綠燈、黃燈、限速標識牌、解限速標識牌、斑馬線,如圖32所示。無人車在運行過程中,對目標采集的圖像涉及不同的視角和距離,而且比賽場地光強未知,所以對于目標檢測任務,要充分考慮到目標不同視角的剛體形變、不同距離的尺度變化、不同環(huán)境光強的變化以及無人車運行中的運動模糊。無人車根據(jù)檢測的結(jié)果做出相應決策和控制,對目標檢測的精度要求很高,一但誤檢或漏檢,小車的控制就會出錯,而且小車在賽道上快速運行,所以對目標檢測的速度也要求較高,一旦小車看見目標,需要快速輸出檢測結(jié)果。
圖3-2檢測識別的6類目標
3.2.數(shù)據(jù)標注
數(shù)據(jù)標注采用ModelArts中的數(shù)據(jù)管理功能,進入ModelArts平臺的數(shù)據(jù)標注模塊,創(chuàng)建數(shù)據(jù)集,選擇物體檢測,添加標簽集。既可以選擇手動標注,也可以在手動標注一部分后選擇智能標注,最終再修改確認智能標注。當數(shù)據(jù)集較大的時候,智能標注可以有效降低數(shù)據(jù)集標注的工作量。通過創(chuàng)建標注團隊,將數(shù)據(jù)集分配給團隊隊員,團隊合作加快數(shù)據(jù)集標注速度。
圖3-3 ModelArts數(shù)據(jù)標注界面
3.3.數(shù)據(jù)增強
我們模型訓練的數(shù)據(jù)集大部分來自HiLens Kit拍攝的不同環(huán)境下的視頻序列,數(shù)據(jù)集中圖像的重復比例較大,有必要將重復的圖像做一些刪除,對數(shù)據(jù)集做數(shù)據(jù)增強實現(xiàn)數(shù)據(jù)擴增,解決由于圖像數(shù)據(jù)量較少帶來的模型過擬合的問題。在比賽中,我們參考2018年的論文《Albumentations: fast and flexible image augmentations》開源的代碼做數(shù)據(jù)集的擴充,開源代碼網(wǎng)址:https://github.com/albumentations-team/albumentations。該項目對于數(shù)據(jù)的擴充采用顏色空間變換、模糊、亮度調(diào)整、黑白、壓縮、隨機噪聲等30余種數(shù)據(jù)擴充辦法。由于我們比賽中要識別的對象,顏色是很重要的一個特征,例如:紅燈、黃燈、綠燈三種燈的顏色,限速標識的紅色和解限速標識的黑色,顏色變化相關的數(shù)據(jù)擴充,會造成數(shù)據(jù)顏色特征的丟失。紅燈、黃燈、綠燈三種燈分別在左、中、右三個位置,交通燈亮的位置,也是區(qū)分三種燈的很重要的特征。所以對數(shù)據(jù)集的擴充,去掉了色彩變換和水平翻轉(zhuǎn)的數(shù)據(jù)擴充辦法。數(shù)據(jù)擴充采用擴充方法級聯(lián)的方式,如圖34所示,更大程度上,減小數(shù)據(jù)之間的相似性,增加圖像數(shù)據(jù)的多樣性,數(shù)據(jù)增強的效果如圖35所示。
圖3-4 數(shù)據(jù)擴充方法級聯(lián)方式
圖3-5 圖像數(shù)據(jù)增強效果展示
3.4.模型訓練
通過數(shù)據(jù)增強,減小了數(shù)據(jù)之間的相似性,增加了數(shù)據(jù)多樣性,最終選用了6031張圖像數(shù)據(jù)做模型訓練。模型訓練我們選用的是華為云AI市場里面基于TensorFlow框架的YOLOv3_Darknet53的網(wǎng)絡。在訓練時,采用COCO數(shù)據(jù)集上的預訓練模型,訓練完后,通過模型轉(zhuǎn)換功能將TensorFlow的PB模型轉(zhuǎn)換成Ascend類型,以支持在HiLens Kit的Ascend 310 AI芯片上做模型推理。
YOLOv3是典型的一階段的目標檢測網(wǎng)絡,圖像輸入為416*416條件下,COCO數(shù)據(jù)集上測試的mAP的分數(shù)為31.0,模型轉(zhuǎn)換后在Ascend-310推理速度:17.8ms/pic,是目前速度和精度最為均衡的目標檢測網(wǎng)絡之一,其網(wǎng)絡結(jié)構(gòu)如圖36所示。
圖3-6 YOLOv3_Darknet53網(wǎng)絡結(jié)構(gòu)圖(摘自網(wǎng)絡)
YOLOv3采用Darknet53作為backbone,Darknet53大量使用類似于ResNet的殘差跳層連接,從而可以加深網(wǎng)絡的深度,特征提取可以提取出更高層的語義特征,并且為了降低池化帶來的梯度負面效果,作者直接摒棄了pooling,用conv的stride來實現(xiàn)降采樣,在這個網(wǎng)絡結(jié)構(gòu)中,使用的是步長為2的卷積來進行降采樣。YOLO v3中采用類似FPN的上采樣和特征融合的做法,在多尺度的特征圖上做檢測,大大加強了對小目標檢測的精確度。YOLOv3采用固定anchor對目標的位置做預測,圖36中輸出的y1、y2、y3分別對應著32倍、16倍和8倍圖像采樣結(jié)果,32倍降采樣的感受野最大,適合檢測大的目標,所以在輸入為416×416時,每個cell的三個anchor box為(116 , 90)、 (156 , 198)、 (373 , 326)。16倍適合一般大小的物體,anchor box為(30 , 61)、(62 , 45)、 (59 , 119)。8倍的感受野最小,適合檢測小目標,因此anchor box為(10 , 13)、(16 , 30)、(33 , 23)。
y1、y2、y3中每個cell回歸邊界框預測4個坐標,tx , ty , tw ,th。如果目標cell距離圖像左上角的距離是(cx ,cy),且它對應邊界框的寬和高為pw , ph ,如圖37所示,那么網(wǎng)絡的預測值為:
圖3-7 Bounding boxes回歸方式
在ModelArts中做模型訓練和調(diào)優(yōu)參數(shù)相關設置如圖38所示,使用ModelArts中可視化工具做訓練過程可視化結(jié)果如圖39所示。模型訓練完成后,通過在線的模型轉(zhuǎn)換工具,轉(zhuǎn)換為.om的模型,以供在HiLens Kit上做推理。
圖3-8 ModelArts模型訓練調(diào)優(yōu)參數(shù)設置
圖3-9 訓練過程可視化結(jié)果
4.HiLens技能開發(fā)和模型部署
華為HiLens為端云協(xié)同多模態(tài)AI開發(fā)應用平臺,提供簡單易用的開發(fā)框架、開箱即用的開發(fā)環(huán)境、豐富的AI技能市場和云上管理平臺。HiLens Framework封裝了豐富的視頻分析算法基礎組件,如圖像預處理、模型推理等,開發(fā)者只需少量代碼即可開發(fā)自己的技能。HiLens Studio提供在線的開發(fā)環(huán)境,可以方便的在線編寫和調(diào)試技能代碼。管理控制臺提供模型管理、技能開發(fā)等功能,供用戶在云側(cè)管理模型和技能,一鍵安裝技能到端側(cè)設備。在比賽中,我們使用HiLens Kit端側(cè)設備做模型推理,線上開發(fā)好的技能可以一鍵部署到HiLens Kit上。
圖4-1 華為HiLens端云協(xié)同AI開發(fā)應用平臺
4.1.檢測任務的Skill開發(fā)
如圖42所示在本次無人車比賽中,我們團隊開發(fā)了3個Skill,get_pic是用HiLens Kit采集圖像數(shù)據(jù)并通過socket通信傳給主機,做數(shù)據(jù)集采集使用;yolo-v3-v1-test是用來在測試模型的精度效果,不加與工控機通信代碼;uac-yolov3-v1是在無人車實際行駛時的技能,在比賽中采集圖像進行模型推理并與工控機通信。
圖4-2 華為云HiLens技能列表
在做檢測任務的技能開發(fā),我們首先利用HiLens Studio的開發(fā)環(huán)境和HiLens Framework,在線做模型前向推理的測試,HiLens Studio開發(fā)環(huán)境如圖44所示,代碼流程如圖43所示,先初始化HiLens、攝像頭和加載模型,接著進入循環(huán),讀取攝像頭采集的圖像,做數(shù)據(jù)預處理,HiLens讀取攝像頭的圖像為YUV格式,需要轉(zhuǎn)為RGB格式,以及將圖像resize為(416,416),以便做模型推理。模型推理通過調(diào)用HiLens Framework封裝好的API,做模型前向推理的計算。由于Ascend310不支持模型后處理的計算,所以這一部分需要通過軟件來做,后處理主要包括,從模型輸出的特征矩陣中解碼出檢測框的位置、類別、置信度等信息、NMS篩選檢測框等,最后輸出結(jié)果。在結(jié)果后處理階段,我們也加入了一些小技巧,以提高檢測任務的準確率:
·對于6類目標我們分別采用不同的置信度閾值做篩選,交通燈和斑馬線需要在較遠的距離就識別到,置信度閾值我們設置為0.5,而限速/解限速,為確保檢測正確性,置信度設置為0.9。
·對于紅綠燈和限速/解限速,通過計算目標框中圖像的紅色分量值,來糾正檢測的錯誤,例如,當檢測到紅燈,必須紅色分量值大于0.15,才認為正確,否則視為錯誤。對于檢測到綠燈或黃燈,必須紅色分量小于0.1,才認為正確。
·同理,對于斑馬線的檢測,將目標框圖像二值化,白色像素占比大于0.3,才認為檢測正確。
最終,我們在HiLens Studio對決賽現(xiàn)場的圖像做測試,測試了700張圖像,只有23張圖像檢測錯誤,目標漏檢的也很少,而且都是在角度很偏的時候,漏檢率在5%以內(nèi)。
在HiLens Studio技能代碼做完了測試之后,在“技能管理”里面,創(chuàng)建一個新的技能,導入在HiLens Studio里面的代碼,加入與工控機通信的部分,就完成了檢測任務加上通信的技能開發(fā),然后將技能在線安裝到端側(cè)設備HiLens Kit上。下一次HiLens Kit啟動后,就會自動啟動技能。
圖4-3 檢測任務技能運行流程
圖4-4 HiLens studio界面展示
4.2.HiLens的通信
在無人車比賽中,HiLens Kit通過網(wǎng)口采用Socket通信與工控機或PC機進行通信,Socket網(wǎng)絡通信框架如圖45所示,Socket是應用層與TCP/IP協(xié)議族通信的中間軟件抽象層,它是一組接口。在設計模式中,Socket其實就是一個門面模式,它把復雜的TCP/IP協(xié)議族隱藏在Socket接口后面,對用戶來說,一組簡單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。Socket通信分為基于TCP和基于UDP兩種。TCP協(xié)議是基于連接的協(xié)議,需要先建立可靠的連接,而UDP不需要事先建立可靠的連接,而是直接把數(shù)據(jù)包發(fā)送出去,是不穩(wěn)定的連接。在圖像數(shù)據(jù)集采集時,通過Socket通信傳輸視頻數(shù)據(jù),數(shù)據(jù)量大且不必要求每一個數(shù)據(jù)包都準確接收,我們采用Socket UDP通信,傳輸視頻數(shù)據(jù)。在HiLens Kit做目標檢測任務時,客戶端數(shù)據(jù)少又需要穩(wěn)定可靠的傳輸,所以我們采用基于TCP協(xié)議的Socket通信,基于TCP協(xié)議的Socket通信如圖46所示。
圖4-5 Socket網(wǎng)絡通信框架
圖4-6 Socket通信TCP通信過程
5.ROS無人車決策控制
無人車上由車上的工控機完成各項數(shù)據(jù)的處理和融合,進行無人車的決策控制。通過處理激光雷達的點云數(shù)據(jù),做Slam建圖和運行中的實時定位以及擋板區(qū)的循跡,處理USB攝像頭的采集的車道線數(shù)據(jù),做車道線的識別,通過Socket通信接收來自HiLens kit的目標檢測的結(jié)果。如圖51所示,無人車的控制方案主要包括:車道線循跡、擋板區(qū)循跡、斑馬線停車及避障、限速和解限速、發(fā)車和停車、建圖和定位,通過ROS整合各個節(jié)點的消息,將多種數(shù)據(jù)進行多模態(tài)融合,進行無人車控制狀態(tài)機的切換,給驅(qū)動控制發(fā)送不同的速度和方向指令,驅(qū)動控制將速度和方向信息轉(zhuǎn)為無人車底盤的電機速度和舵機打角指令,通過串口發(fā)送給無人車驅(qū)動,最終實現(xiàn)無人車完美高效地完成整個比賽任務。
圖5-1 無人車控制方案
5.1.車道線識別
在本次比賽中,車道線的識別也是本次比賽的一個難點,無人車上USB camera的位置低、視角窄導致大部分時間只能看到單線,再加上工控機的性能較弱,對圖像相關處理速度較慢。對于車道線識別,我們沒有采用比賽方提供的例程,而是從實際駕車思路出發(fā),想辦法得到道路的中線,通過中線推算偏差。
車道線識別的流程如圖52所示,首先將圖像二值化,通過膨脹與腐蝕,將車道線線條的斷裂給補上,小車在運行中,車道線總是會交于圖像的左、右、下三條邊,所以在這三條邊上搜索車道線基本點,根據(jù)搜索到的基本點搜索線。由于攝像頭固定,采用提前標定好的透視變換矩陣將圖像變換到俯視圖。由于在搜索車道線基本點可能會搜索到多個,例如圖53搜索到3個基本點,從而會搜到多條邊線,所以需要對邊線進行篩選,提取車道線。將車道線做一次擬合,由于道路寬度固定,可以通過擬合的車道線計算出中線。根據(jù)中線的計算結(jié)果,即可求解偏差。在圖像計算中,通過采用python的numpy矩陣操作代替大量python低速循環(huán)進行計算加速,精簡計算流程,(640,480)的圖像在工控機計算幀率平均可達到46fps。
圖5-2 車道線識別基本流程
圖5-3 車道線識別結(jié)果展示
5.2.激光雷達擋板區(qū)循跡與無人車定位
無人車上的激光雷達傳感器可掃描到無人車周圍360度的障礙物的信息,可以用來做擋板區(qū)的循跡和無人車的實時定位。雷達數(shù)據(jù)的可視化展示如圖54(a)所示,雷達的點云數(shù)據(jù)組成了無人車行駛的車道,可采用和車道線相似的處理辦法,搜索雷達右半部分0-75度的范圍,擬合右邊線,從而計算中線,求取偏差。具體處理過程可參考車道線處理方案,此處不再贅述。
圖5-4 雷達數(shù)據(jù)可視化和搜線掃描方式
無人車Slam建圖和定位的方案,現(xiàn)已經(jīng)很成熟, GitHub、GitLab等開源平臺也有很多非常棒的基于ROS的激光雷達Slam項目和定位方案,我們采用開源的rf2o將激光雷達數(shù)據(jù)轉(zhuǎn)為里程計信息,通過AMCL做定位,采用Gmapping建圖,ROS開源社區(qū)(http://wiki.ros.org)都有詳細的介紹,此處不再贅述。
圖5-5 無人車Slam建圖和定位方案
5.3.多模態(tài)融合的無人車決策控制
在HiLen Kit部署的技能,盡管采用一些技巧提升了圖像的識別準確率,但也并非百分百準確。無人車在行駛過程中,存在運動模糊、未知光源干擾、反光等問題,盡管制作數(shù)據(jù)集考慮了此類情況,但是還是會有影響。我們采用了數(shù)字濾波中常用的的窗口濾波來做圖像信息的后端處理。
·采用長度為k的定長隊列做為觀察窗口
·選取k個元素中出現(xiàn)最多類別作為當前階段預測類別
在小車行駛過程中,將ROS節(jié)點的各個信息,做多模態(tài)融合,實現(xiàn)無人車不同狀態(tài)下切換,如圖56所示,無人車完成起步、斑馬線停車避障、擋板區(qū)循跡、限速/解限速、精準停車等任務。
圖5-6 無人車不同狀態(tài)下狀態(tài)機的切換
6.聯(lián)合使用ModelArts和HiLens體驗
在此次華為云無人車大賽中,聯(lián)合使用ModelArts和 HiLens,這全流程的解決方案對項目的完成提供了高質(zhì)量的服務。ModelArts提供全流程的AI開發(fā)平臺,數(shù)據(jù)管理、模型訓練、在線部署,都方便高效;HiLens提供了端云協(xié)同的AI開發(fā)平臺,大大降低了嵌入式平臺開發(fā)門檻,實現(xiàn)模型高效快捷地端側(cè)部署。我們在使用華為云的全棧式解決方案之前,也接觸過一些其他的AI解決方案,但是無論是云還是端都沒有華為云ModelArts和HiLens的聯(lián)合使用便捷高效。其便捷高效主要體現(xiàn)在以下幾個方面:
(1)數(shù)據(jù)管理平臺支持數(shù)據(jù)上傳、存儲、標注、處理一體化服務;
(2)ModelArts提供了各種配置好的開發(fā)環(huán)境,支持各種深度學習框架的開發(fā);
(3)ModelArts的AI市場提供了豐富的網(wǎng)絡模型,提高開發(fā)者開發(fā)效率;
(4)ModelArts支持模型在線部署和測試,可提供網(wǎng)絡接口供物聯(lián)網(wǎng)設備實現(xiàn)云端協(xié)同;
(5)HiLens的HiLens Framework,豐富的API解決了驅(qū)動和圖像接入問題,自帶媒體數(shù)據(jù)處理庫,支持各種自定義操作;
(6)HiLens Studio開發(fā)環(huán)境可在不需要硬件的條件下,做模型的測試和代碼的調(diào)試;
(7)HiLens技能管理平臺可對技能直接做在線的部署和切換,方便、快捷。
(8)HiLens的技能市場,提供了豐富的開發(fā)好的技能,開發(fā)者可以站在巨人的肩膀上做開發(fā),提高開發(fā)效率。