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