ADAS系統包括車輛檢測、行人檢測、交通標志識別、車道線檢測等多種任務,同時,由于無人駕駛等應用場景的要求,車載視覺系統還應具備相應速度快、精度高、任務多等要求。對于傳統的圖像檢測與識別框架而言,短時間內同時完成多類的圖像分析任務是難以實現的。
袁雪副教授的項目組提出使用一個深度神經網絡模型實現交通場景中多任務處理的方法。其中交通場景的分析主要包括以下三個方面:大目標檢測(車輛、行人和非機動車),小目標分類(交通標志和紅綠燈)以及可行駛區域(道路和車道線)的分割。
這三類任務可以通過一個深度神經網絡的前向傳播完成,這不僅可以提高系統的檢測速度,減少計算參數,而且可以通過增加主干網絡的層數的方式提高檢測和分割精度。
以下為當天分享的內容總結。
總結
一、任務分析
WHO在2009年統計的一個數據顯示,在全世界范圍內每年由交通事故死亡的人數有123萬人。但是我們知道,在朝鮮戰爭中,整個戰爭死亡的人數也差不多一百多萬。也就是說,每年死于交通事故的人數差不多等于一次非常慘烈的戰爭的死亡人數了。根據WHO統計,在全世界范圍內每年由交通事故造成的死亡人數有123萬之多;而發生交通事故90%是由司機人為原因造成的,比如注意力不集中、超速、安全意識弱等等。所以目前減少交通事故的最主要途徑通過采用高級輔助駕駛系統(ADAS)就是減少認為錯誤。
對于ADAS系統,基本上包括這些功能:夜視輔助、車道保持、司機提醒、防撞提醒、車道變換輔助、停車輔助、碰撞疏解、死角障礙物檢測、交通標志識別、車道線偏移提醒、司機狀態監測、遠光燈輔助等。這些功能是ADAS所必備的。
為了實現這些功能,一般其傳感器需要包括視覺傳感器、超聲波傳感器、GPS&Map傳感器、Lidar傳感器、Radar傳感器,還有一些別的通信設備。但是我們在市面上看到的大多數傳感器其功能其實是比較少的,例如mobile I,它只有車道保持、交通標志識別、前車監測和距離監測的功能,但并不全面。從廠家或者用戶的角度來說,自然我們希望能用最便宜的傳感器來完成更多ADAS的功能。最便宜的傳感器基本上就是視覺傳感器。所以我們設計方案時就想,能不能通過算法將視覺傳感器實現更多ADAS系統的功能呢?這就是我們整個研發的初衷。
此外,我們還需要考慮ADAS的一些特點。ADAS系統(包括無人駕駛)是在一個嵌入式平臺下進行的,也就是說它的計算資源很少。那么我們也必須考慮如何在這樣一個計算資源非常少的基礎上,保證ADAS系統能夠快速且高精度地響應,同時還能保證多任務的需求。這是我們第二個要考慮的問題。
為了解決以上兩個問題,我們首先把ADAS的任務分解一下。如圖所示,我們將ADAS的任務分解成目標檢測與識別、圖像分割、攝像機成像目標跟蹤、圖像分割。我們過去一年多的研發工作其實就是,用一個深度學習框架來同時實現上述這四個的功能。
對于一個前向傳播的網絡,其計算量和計算時間主要取決于它的參數數量,而80%的參數都來自全鏈接層,所以我們的第一個想法就是去掉全鏈接層。其次,網絡越深,它的參數就會越多所以如果我們把目標檢測與識別、圖像分割、攝像機成像目標跟蹤、圖像分割做成四個網絡的話,就會有X4倍的參數。
二、模型結構
這個是我們設計的網絡的一個基本結構。它分為幾個部分:主干網絡(我們稱為解碼器)、多個分支(我們稱為編碼器)和基于CRF的結果融合?,F在這個網絡我們只設計了兩個編碼器,一個是檢測任務編碼器,還有一個是分割任務編碼器,以后我們還可以增加其他的編碼器。結果融合,主要是想用它來影響主干網絡的一些權重選擇。主干網絡,我們選擇了一些比較有人氣的算法,例如VGG 16、GoogleNet、ResNet等。分割任務編碼器我們用了FCN編碼器,檢測任務編碼器我們用了YOLO9000編碼器。
1、主干網絡
下面我們來詳細看一下這個網絡各個部分。首先我們來看主干網絡。主干網絡我們使用了VGG、GoogleNet或者ResNet。這幾個是可選擇的。從右側的這張圖(縱軸是網絡深度,圈的大小表示模型的大?。┪覀兛梢钥吹絉esNet在深度和大小上都比較好,我們選擇使用ResNet可以有比較好的實時性。
2、FCN語義分割解碼器
然后我們看一下FCN語義分割解碼器。在神經網絡中,一張圖片經過主干網絡后,再對其提取高維特征圖。其實這個過程就是用pooling的方法給它降維。結果到了輸出高維特征圖時,它只有原圖像的1/32大小了。隨后我們采用上采樣把它升維成原圖像大小。上采樣的過程就如左側所示,這個示例中我們將2*2的圖像上采樣成4*4的圖像。
上采樣的結果就是解碼器預測出來的,我們將它與標注好的圖像進行比較運算,算出loss,然后對權重進行修改。在上采樣中一個問題就是,比較小的物體是計算不出來的。我們知道一些較淺的卷積層感知閾比較小,它會包含更多比較局部的信息;而較深的卷積層具有較大的感知閾,它能夠學習到更加抽象的信息。于是FCN就通過將pool3、pool4和pool5的信息疊加在一起進行上采樣,這樣就可以做到同時上采樣多個尺度的信息了。
3、目標檢測/識別解碼器 YOLO
其次我們再來介紹一下用于目標檢測/識別的解碼器YOLO。我們使用的是YOLO V2的解碼器,但這里我們先介紹一下YOLO V1。這是YOLO V1的主框架,它的主干網絡是Darknet19,我們不用管它。我們重點關注編碼器的過程。主干網絡輸出的特征圖,這種特征圖會用1*1 的卷積核給正規化成7*7*30的特征圖。那么這個30是什么呢?
在這樣一個7*7的矩形框中,每一個方形框用一個點來表示。然后我們分別用5維表示包含這個方形框的一個矩形框,其中4維表示x、y、z、w,另外一維為confidence。
在YOLO V1中30維的前10個為兩個這樣的矩形框。它們的(x,y,z,w)分別表示了坐標預測,而另外一維為confidence預測。另外的20維為類別預測(也就是說在模型中有20種可能出現的例如汽車、行人之類的模型 )。
所以針對這兩個考量,我們用一個主干的網絡來做前面的運算,然后在后面再根據具體的任務分成多個小的分支加到主干網絡上。這樣多個圖像處理的任務就可以通過一個主干網絡的前向傳播來完成了,其參數大大減少,計算速度也變的更快。同時我們也能實現多個任務同時進行的需求。另外,在最后我們還可以將多個結果進行融合,駕到訓練過程的調整中,這樣就可以提高我們結果的可信性。
但是在這個過程中我們也碰到一些難點。第一個難點就是我們在同一個網絡中需要將較大的目標(例如車輛)和較小的目標(例如交通標志)同時檢測出來。第二個難點是,測速測距時我們需要的目標的位置是非常精確的,目前這個問題我們還沒有解決。
YOLO V2與V1最大的不同就是采用了Anchor boxes。所謂Anchor boxes就是每個中心預測(例如9種)不同大小和比例的建議框,每一個建議框對應一個4維的坐標預測、1維confidence預測和20維的類別預測。它提出一個非常有意思的思想就是維度聚類,也即現在訓練集里通過聚類的方式算出Anchor boxes的大小。這樣,例如它從9個boxes選出5個boxes。于是對于VOC數據集,總共就5*(4+1+20)=125個輸出維度。
YOLO V2 Anchor boxes的選擇以及維度聚類的思想對于我們車載攝像的問題是更有效的,因為我們攝像機的位置是相對固定的,所以我們可以算出每一個目標的大小都是相對比較固定的。
我們在YOLO V2的基礎上也做了一些改動。首先是我們做了一些細粒度特征,來檢測小目標。其次我們還在淺層特征中進一步地做坐標預測,然后加到我們的整個預測當中,這樣可以提高小目標的預測。
4、一些思考
在這個研究的過程中,我們做了一些思考。
首先,在計算機視覺領域里,低中層視覺問題更關注原始視覺信號,與語義信息的聯系相對松散,同時也是許多高層視覺問題的預處理步驟。本屆CVPR有關低中層視覺問題的論文有很多,涵蓋去模糊、超分辨率、物體分割、色彩恒定性(color constancy)。
其次,在最后的層中抽象的特征對分類很有幫助,可以很好地判斷出一幅圖像中包含什么類別的物體,但是因為丟失了一些物體的細節,不能很好地給出物體的具體輪廓,指出每個像素具體屬于哪個物體。
我們該如何將淺層特征和深層特征結合起來呢?這其實還需要進一步的研究。
三、數據庫建立
在數據庫這方面,我們發現國內的路況與國外路況很不一樣,且中國的車的種類也多種多樣。所以我們開發了一種半自動標注軟件,也就是我們可以通過算法自動完成車輛標注,同時我們還可以手動修正誤差較大的標注。目前我們已經標注了5萬張矩形標注數據集。我們力爭在年底能夠開放數據集,另一方面我們也能協助企業建立數據庫。
另外在數據庫建立方面,我們還要拓展一下數據庫類型。例如通過原來白天的圖片,我們可以生成黑夜的圖片,增加到我們的訓練樣本中去。
四、結果顯示
評論
查看更多