1. 程式人生 > 實用技巧 >200支高校無人車賽隊,華科為什麼能贏?

200支高校無人車賽隊,華科為什麼能贏?

作者 | 華中科技大學人工智慧與自動化學院 黎瑞

在2020年第二屆華為雲人工智慧大賽•無人車挑戰杯中,“華中科技大學無人車一隊”藉助華為雲一站式AI開發與管理平臺ModelArts及HiLens端雲協同AI開發應用平臺,進行無人車模型開發與部署,最終奪冠,獲得20萬獎勵(10萬現金+10萬代金券)。戰隊撰文分享其參賽體驗,包括無人車比賽的整體方案,多維資料處理及行駛控制的能力等。

比賽背景

第二屆華為雲無人車挑戰杯大賽,相比第一屆大賽,難度更大,賽道環境更加接近真實的道路。在比賽中,無人車需要從發車區出發,通過車道線循跡沿“8”字形賽道在不能壓線和觸碰擋板的條件下行走一週半後,準確地停入到停車區。

在無人車行駛期間,需要完成交通訊號燈識別、斑馬線識別、機器人動態避障、擋板區循跡、限速/解限速標誌識別、精準停車等任務。無人車不僅需要完美無誤地完成所有的任務,在速度上也有要求,在總決賽中,無人車需要在70s內完成所有任務,時間加分項才能為滿分。

在比賽中,華為雲ModelArts一站式AI開發與管理平臺,給參賽選手提供全流程的AI模型開發環境,助力參賽選手高效地完成檢測任務中模型的訓練,HiLens端雲協同AI開發應用平臺幫助參賽選手快速地完成模型在端側裝置上的部署和加速。華為雲無人車挑戰杯在由上海交大學生創新中心智慧製造實驗室自主研發的無人車的基礎上,結合華為雲人工智慧平臺,全面鍛鍊和提高賽隊的AI解決方案能力及無人駕駛程式設計技巧。

圖1‑1 華中科技大學無人車一隊的後浪

圖1‑2 華為雲無人車挑戰賽總決賽現場

整體方案

無人車比賽整體解決方案如圖2‑1所示,比賽主要分為三個部分,ModelArts做模型的線上訓練,HiLens Kit做模型的部署,無人車上工控機通過ROS將各個節點整合到一起,做無人車底盤的決策和控制。通過華為雲ModelArts一站式AI開發與管理平臺完成資料標註、模型訓練、模型轉換等工作,得到可供HiLens Kit前向推理的卷積神經網路的模型。HiLens Kit通過自帶的相機採集影象,通過技能部署進行模型的前向推理和加速,HiLens Kit搭載著高效能的華為人工智慧晶片昇騰310,針對卷積神經網路進行了優化,在模型的前向推理過程中可發揮出強大的算力。HiLens Kit完成交通燈、限速/解限速標誌識別、斑馬線的目標檢測識別,通過Socket通訊,將檢測結果傳給無人車上的工控機。無人車上工控機處理鐳射雷達的點雲資料,做Slam建圖和執行中的實時定位,工控機處理USB攝像頭的採集的車道線資料,做車道線的識別,再通過ROS將所有節點資訊做整合,做底盤電機和舵機的決策控制。

圖2‑1 無人車比賽整體解決方案示意圖

ModelArts模型訓練

ModelArts是面向AI開發者的一站式開發平臺,包含資料處理、模型訓練、模型管理、模型部署等操作,並且提供AI市場功能,能夠在市場內與其他開發者分享模型,其功能總覽如圖3‑1所示。在比賽中,我們通過ModelArts平臺完成了資料標註、模型訓練和模型線上轉換等工作,並且通過ModelArts做模型的線上部署,檢驗模型的精度效果。

圖3‑1 ModelArts一站式AI開發平臺功能總覽

3.1.任務分析

本次大賽涉及6類目標的檢測識別:紅燈、綠燈、黃燈、限速標識牌、解限速標識牌、斑馬線,如圖3‑2所示。無人車在執行過程中,對目標採集的影象涉及不同的視角和距離,而且比賽場地光強未知,所以對於目標檢測任務,要充分考慮到目標不同視角的剛體形變、不同距離的尺度變化、不同環境光強的變化以及無人車執行中的運動模糊。無人車根據檢測的結果做出相應決策和控制,對目標檢測的精度要求很高,一旦誤檢或漏檢,小車的控制就會出錯,而且小車在賽道上快速執行,所以對目標檢測的速度也要求較高,一旦小車看見目標,需要快速輸出檢測結果。

圖3‑2檢測識別的6類目標

3.2.資料標註

資料標註採用ModelArts中的資料管理功能,進入ModelArts平臺的資料標註模組,建立資料集,選擇物體檢測,新增標籤集。既可以選擇手動標註,也可以在手動標註一部分後選擇智慧標註,最終再修改確認智慧標註。當資料集較大的時候,智慧標註可以有效降低資料集標註的工作量。通過建立標註團隊,將資料集分配給團隊隊員,團隊合作加快資料集標註速度。

圖3‑3 ModelArts資料標註介面

3.3.資料增強

我們模型訓練的資料集大部分來自HiLens Kit拍攝的不同環境下的視訊序列,資料集中影象的重複比例較大,有必要將重複的影象做一些刪除,對資料集做資料增強實現資料擴增,解決由於影象資料量較少帶來的模型過擬合的問題。在比賽中,我們參考2018年的論文《Albumentations: fast and flexible image augmentations》開源的程式碼做資料集的擴充,開原始碼網址:https://github.com/albumentations-team/albumentations

該專案對於資料的擴充採用顏色空間變換、模糊、亮度調整、黑白、壓縮、隨機噪聲等30餘種資料擴充辦法。由於我們比賽中要識別的物件,顏色是很重要的一個特徵,例如:紅燈、黃燈、綠燈三種燈的顏色,限速標識的紅色和解限速標識的黑色,顏色變化相關的資料擴充,會造成資料顏色特徵的丟失。紅燈、黃燈、綠燈三種燈分別在左、中、右三個位置,交通燈亮的位置,也是區分三種燈的很重要的特徵。所以對資料集的擴充,去掉了色彩變換和水平翻轉的資料擴充辦法。資料擴充採用擴充方法級聯的方式,如圖3‑4所示,更大程度上,減小資料之間的相似性,增加影象資料的多樣性,資料增強的效果如圖3‑5所示。

圖3‑4 資料擴充方法級聯方式

圖3‑5 影象資料增強效果展示

3.4.模型訓練

通過資料增強,減小了資料之間的相似性,增加了資料多樣性,最終選用了6031張影象資料做模型訓練。模型訓練我們選用的是華為雲AI市場裡面基於TensorFlow框架的YOLOv3_Darknet53的網路。在訓練時,採用COCO資料集上的預訓練模型,訓練完後,通過模型轉換功能將TensorFlow的PB模型轉換成Ascend型別,以支援在HiLens Kit的Ascend 310 AI晶片上做模型推理。

YOLOv3是典型的一階段的目標檢測網路,影象輸入為416*416條件下,COCO資料集上測試的mAP的分數為31.0,模型轉換後在Ascend-310推理速度:17.8ms/pic,是目前速度和精度最為均衡的目標檢測網路之一,其網路結構如圖3‑6所示。

圖3‑6 YOLOv3_Darknet53網路結構圖(摘自網路)

YOLOv3採用Darknet53作為backbone,Darknet53大量使用類似於ResNet的殘差跳層連線,從而可以加深網路的深度,特徵提取可以提取出更高層的語義特徵,並且為了降低池化帶來的梯度負面效果,作者直接摒棄了pooling,用conv的stride來實現降取樣,在這個網路結構中,使用的是步長為2的卷積來進行降取樣。YOLO v3中採用類似FPN的上取樣和特徵融合的做法,在多尺度的特徵圖上做檢測,大大加強了對小目標檢測的精確度。YOLOv3採用固定anchor對目標的位置做預測,圖3‑6中輸出的y1、y2、y3分別對應著32倍、16倍和8倍影象取樣結果,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 ,如圖3‑7所示,那麼網路的預測值為:

圖3‑7 Bounding boxes迴歸方式

在ModelArts中做模型訓練和調優引數相關設定如圖3‑8所示,使用ModelArts中視覺化工具做訓練過程視覺化結果如圖3‑9所示。模型訓練完成後,通過線上的模型轉換工具,轉換為.om的模型,以供在HiLens Kit上做推理。

圖3‑8 ModelArts模型訓練調優引數設定

圖3‑9 訓練過程視覺化結果

HiLens技能開發和模型部署

華為HiLens為端雲協同多模態AI開發應用平臺,提供簡單易用的開發框架、開箱即用的開發環境、豐富的AI技能市場和雲上管理平臺。HiLens Framework封裝了豐富的視訊分析演算法基礎元件,如影象預處理、模型推理等,開發者只需少量程式碼即可開發自己的技能。HiLens Studio提供線上的開發環境,可以方便的線上編寫和除錯技能程式碼。管理控制檯提供模型管理、技能開發等功能,供使用者在雲側管理模型和技能,一鍵安裝技能到端側裝置。在比賽中,我們使用HiLens Kit端側裝置做模型推理,線上開發好的技能可以一鍵部署到HiLens Kit上。

圖4‑1 華為HiLens端雲協同AI開發應用平臺

4.1.檢測任務的Skill開發

如圖4‑2所示在本次無人車比賽中,我們團隊開發了3個Skill,get_pic是用HiLens Kit採集影象資料並通過socket通訊傳給主機,做資料集採集使用;yolo-v3-v1-test是用來在測試模型的精度效果,不加與工控機通訊程式碼;uac-yolov3-v1是在無人車實際行駛時的技能,在比賽中採集影象進行模型推理並與工控機通訊。

圖4‑2 華為雲HiLens技能列表

在做檢測任務的技能開發,我們首先利用HiLens Studio的開發環境和HiLens Framework,線上做模型前向推理的測試,HiLens Studio開發環境如圖4‑4所示,程式碼流程如圖4‑3所示,先初始化HiLens、攝像頭和載入模型,接著進入迴圈,讀取攝像頭採集的影象,做資料預處理,HiLens讀取攝像頭的影象為YUV格式,需要轉為RGB格式,以及將影象resize為(416,416),以便做模型推理。模型推理通過呼叫HiLens Framework封裝好的API,做模型前向推理的計算。由於Ascend310不支援模型後處理的計算,所以這一部分需要通過軟體來做,後處理主要包括,從模型輸出的特徵矩陣中解碼出檢測框的位置、類別、置信度等資訊、NMS篩選檢測框等,最後輸出結果。在結果後處理階段,我們也加入了一些小技巧,以提高檢測任務的準確率:

  • 對於6類目標我們分別採用不同的置信度閾值做篩選,交通燈和斑馬線需要在較遠的距離就識別到,置信度閾值我們設定為0.5,而限速/解限速,為確保檢測正確性,置信度設定為0.9。

  • 對於紅綠燈和限速/解限速,通過計算目標框中影象的紅色分量值,來糾正檢測的錯誤,例如,當檢測到紅燈,必須紅色分量值大於0.15,才認為正確,否則視為錯誤。對於檢測到綠燈或黃燈,必須紅色分量小於0.1,才認為正確。

  • 同理,對於斑馬線的檢測,將目標框影象二值化,白色畫素佔比大於0.3,才認為檢測正確。

最終,我們在HiLens Studio對決賽現場的影象做測試,測試了700張影象,只有23張影象檢測錯誤,目標漏檢的也很少,而且都是在角度很偏的時候,漏檢率在5%以內。

在HiLens Studio技能程式碼做完了測試之後,在“技能管理”裡面,建立一個新的技能,匯入在HiLens Studio裡面的程式碼,加入與工控機通訊的部分,就完成了檢測任務加上通訊的技能開發,然後將技能線上安裝到端側裝置HiLens Kit上。下一次HiLens Kit啟動後,就會自動啟動技能。

圖4‑3 檢測任務技能執行流程

圖4‑4 HiLens studio介面展示

4.2.HiLens的通訊

在無人車比賽中,HiLens Kit通過網口採用Socket通訊與工控機或PC機進行通訊,Socket網路通訊框架如圖4‑5所示,Socket是應用層與TCP/IP協議族通訊的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對使用者來說,一組簡單的介面就是全部,讓Socket去組織資料,以符合指定的協議。Socket通訊分為基於TCP和基於UDP兩種。TCP協議是基於連線的協議,需要先建立可靠的連線,而UDP不需要事先建立可靠的連線,而是直接把資料包傳送出去,是不穩定的連線。在影象資料集採集時,通過Socket通訊傳輸視訊資料,資料量大且不必要求每一個數據包都準確接收,我們採用Socket UDP通訊,傳輸視訊資料。在HiLens Kit做目標檢測任務時,客戶端資料少又需要穩定可靠的傳輸,所以我們採用基於TCP協議的Socket通訊,基於TCP協議的Socket通訊如圖4‑6所示。

圖4‑5 Socket網路通訊框架

圖4‑6 Socket通訊TCP通訊過程

ROS無人車決策控制

無人車上由車上的工控機完成各項資料的處理和融合,進行無人車的決策控制。通過處理鐳射雷達的點雲資料,做Slam建圖和執行中的實時定位以及擋板區的循跡,處理USB攝像頭的採集的車道線資料,做車道線的識別,通過Socket通訊接收來自HiLens kit的目標檢測的結果。如圖5‑1所示,無人車的控制方案主要包括:車道線循跡、擋板區循跡、斑馬線停車及避障、限速和解限速、發車和停車、建圖和定位,通過ROS整合各個節點的訊息,將多種資料進行多模態融合,進行無人車控制狀態機的切換,給驅動控制傳送不同的速度和方向指令,驅動控制將速度和方向資訊轉為無人車底盤的電機速度和舵機打角指令,通過串列埠傳送給無人車驅動,最終實現無人車完美高效地完成整個比賽任務。

圖5‑1 無人車控制方案

5.1.車道線識別

在本次比賽中,車道線的識別也是本次比賽的一個難點,無人車上USB camera的位置低、視角窄導致大部分時間只能看到單線,再加上工控機的效能較弱,對影象相關處理速度較慢。對於車道線識別,我們沒有采用比賽方提供的例程,而是從實際駕車思路出發,想辦法得到道路的中線,通過中線推算偏差。

車道線識別的流程如圖5‑2所示,首先將影象二值化,通過膨脹與腐蝕,將車道線線條的斷裂給補上,小車在執行中,車道線總是會交於影象的左、右、下三條邊,所以在這三條邊上搜索車道線基本點,根據搜尋到的基本點搜尋線。由於攝像頭固定,採用提前標定好的透視變換矩陣將影象變換到俯檢視。由於在搜尋車道線基本點可能會搜尋到多個,例如圖5‑3搜尋到3個基本點,從而會搜到多條邊線,所以需要對邊線進行篩選,提取車道線。將車道線做一次擬合,由於道路寬度固定,可以通過擬合的車道線計算出中線。根據中線的計算結果,即可求解偏差。在影象計算中,通過採用python的numpy矩陣操作代替大量python低速迴圈進行計算加速,精簡計算流程,(640,480)的影象在工控機計算幀率平均可達到46fps。

圖5‑2 車道線識別基本流程

圖5‑3 車道線識別結果展示

5.2.鐳射雷達擋板區循跡與無人車定位

無人車上的鐳射雷達感測器可掃描到無人車周圍360度的障礙物的資訊,可以用來做擋板區的循跡和無人車的實時定位。雷達資料的視覺化展示如圖5‑4(a)所示,雷達的點雲資料組成了無人車行駛的車道,可採用和車道線相似的處理辦法,搜尋雷達右半部分0-75度的範圍,擬合右邊線,從而計算中線,求取偏差。具體處理過程可參考車道線處理方案,此處不再贅述。

圖5‑4 雷達資料視覺化和搜線掃描方式

無人車Slam建圖和定位的方案,現已經很成熟, GitHub、GitLab等開源平臺也有很多非常棒的基於ROS的鐳射雷達Slam專案和定位方案,我們採用開源的rf2o將鐳射雷達資料轉為里程計資訊,通過AMCL做定位,採用Gmapping建圖,ROS開源社群(http://wiki.ros.org)都有詳細的介紹,此處不再贅述。

圖5‑5 無人車Slam建圖和定位方案

5.3.多模態融合的無人車決策控制

在HiLen Kit部署的技能,儘管採用一些技巧提升了影象的識別準確率,但也並非百分百準確。無人車在行駛過程中,存在運動模糊、未知光源干擾、反光等問題,儘管製作資料集考慮了此類情況,但是還是會有影響。我們採用了數字濾波中常用的的視窗濾波來做影象資訊的後端處理。

  • 採用長度為k的定長佇列做為觀察視窗

  • 選取k個元素中出現最多類別作為當前階段預測類別

在小車行駛過程中,將ROS節點的各個資訊,做多模態融合,實現無人車不同狀態下切換,如圖5‑6所示,無人車完成起步、斑馬線停車避障、擋板區循跡、限速/解限速、精準停車等任務。

圖5‑6 無人車不同狀態下狀態機的切換

聯合使用ModelArts和HiLens體驗

在此次華為雲無人車大賽中,聯合使用ModelArts和 HiLens,這全流程的解決方案對專案的完成提供了高質量的服務。ModelArts提供全流程的AI開發平臺,資料管理、模型訓練、線上部署,都方便高效;HiLens提供了端雲協同的AI開發平臺,大大降低了嵌入式平臺開發門檻,實現模型高效快捷地端側部署。我們在使用華為雲的全棧式解決方案之前,也接觸過一些其他的AI解決方案,但是無論是雲還是端都沒有華為雲ModelArts和HiLens的聯合使用便捷高效。其便捷高效主要體現在以下幾個方面:

(1)資料管理平臺支援資料上傳、儲存、標註、處理一體化服務;

(2)ModelArts提供了各種配置好的開發環境,支援各種深度學習框架的開發;

(3)ModelArts的AI市場提供了豐富的網路模型,提高開發者開發效率;

(4)ModelArts支援模型線上部署和測試,可提供網路介面供物聯網裝置實現雲端協同;

(5)HiLens的HiLens Framework,豐富的API解決了驅動和影象接入問題,自帶媒體資料處理庫,支援各種自定義操作;

(6)HiLens Studio開發環境可在不需要硬體的條件下,做模型的測試和程式碼的除錯;

(7)HiLens技能管理平臺可對技能直接做線上的部署和切換,方便、快捷。

(8)HiLens的技能市場,提供了豐富的開發好的技能,開發者可以站在巨人的肩膀上做開發,提高開發效率。