0
在車載感知技術(shù)和產(chǎn)品矩陣中,相較于激光雷達,攝像頭傳感器和視覺技術(shù)因其低成本和較好的適用性成為所有公司重視的領(lǐng)域。馬斯克也希望特斯拉能夠創(chuàng)造出比人類眼睛更敏銳的“攝像頭眼睛”,以保證安全性和智能性。
雷鋒網(wǎng)旗下會員組織「AI投研邦」「大咖Live」第50講,紐勱科技計算機視覺研發(fā)總監(jiān)成二康帶來關(guān)于《自動駕駛系統(tǒng)研發(fā):詳解視覺感知模塊》的主題分享,圍繞自動駕駛的視覺感知、基于深度學習的目標檢測和圖像分割任務、紐勱科技如何以數(shù)據(jù)助力自動駕駛感知模塊研發(fā)三方面進行了介紹。
據(jù)雷鋒網(wǎng)了解,紐勱科技計算機視覺研發(fā)總監(jiān)成二康,早前于美國Temple University獲得計算機博士學位,師從凌海濱教授;期間曾在美國西門子任職,主要做計算機視覺和醫(yī)學圖像分析方面的工作;之后加入硅谷Broncus medical 公司,開發(fā)了超大規(guī)模通用機器學習庫,用于圖像分割、目標檢測等;2017年10月加入紐勱科技,負責視覺相關(guān)的研發(fā)工作。
以下是成二康的分享內(nèi)容,雷鋒網(wǎng)新智駕在不改變原意的基礎(chǔ)上進行了整理和精編:
首先簡單介紹一下紐勱科技。紐勱科技于2016年底在美國硅谷成立,2017年初在上海設(shè)立總部公司,是一家專注于自動駕駛領(lǐng)域的科技公司。創(chuàng)始人CEO徐雷是前特斯拉 Autopolit vision 團隊早期成員,COO Justin是前特斯拉高級供應鏈經(jīng)理。
2016年9月,紐勱科技獲得1000萬美元的天使輪融資;2019年4月獲得德賽西威的Pre-A輪戰(zhàn)略投資。6月份,紐勱科技發(fā)布了自動駕駛解決方案MAX1.0,向市場公開了基于公司自研的MaxOS的高速代駕、擁堵跟車、自主泊車三大功能。
今天的分享包括四個部分:首先簡單介紹紐勱科技視覺感知;第二部分是基于深度學習的目標檢測;重點是后面兩部分基于深度學習的車道線檢測和數(shù)據(jù)驅(qū)動的模塊迭代。
傳感器配置層面,目前紐勱科技傳感器配置以攝像頭為主,并結(jié)合毫米波雷達和超聲波雷達,包括覆蓋車身360度的8個攝像頭、4個主要為泊車服務的魚眼攝像頭。
現(xiàn)階段,紐勱科技進行的視覺模塊大概包含以下幾個方面:一是目標檢測;二是圖像分割,圖像分割目前主要用于車道線的分割或可行駛區(qū)域的分割;上述兩方面均以深度學習為主;目標跟蹤目前是基于多攝像頭的多目標跟蹤管理;世界模型是如何將目標檢測或者圖像分割出來的結(jié)果,比如車道線的結(jié)果映射到三維世界,為planning提供信息;另外一個是多傳感器融合,紐勱科技現(xiàn)階段采用的是視覺、毫米波和超聲波雷達之間的融合;在線標定,因為攝像頭每時每刻都可能發(fā)生變化,所以在線標定實時計算camera pose也是一個比較關(guān)鍵的模塊;另外一個是視覺slam,該模塊主要應用在地下停車場的建圖、在線定位等;還有一些比較基礎(chǔ)的模塊,比如ISP,因現(xiàn)在的視覺攝像頭要進圖首先要經(jīng)過ISP,以解決不同光照下的情況,提供更高質(zhì)量的圖片。
紐勱科技自研的深度學習平臺包括數(shù)據(jù)標注、海量數(shù)據(jù)的收集、針對自動駕駛感知環(huán)境的模型設(shè)計、模型訓練,和最后的模型嵌入式平臺部署。
此為紐勱科技多目標跟蹤管理的結(jié)果。這里要解決的問題是,對每一輛障礙物車輛賦一個連續(xù)的ID,以便于后面與毫米波傳感器的融合。因為有了視覺和毫米波融合的信息,融合之后和真值更加接近?;谡嬷?,可以通過其它傳感器拿到更精確的障礙物車距信息。
首先分享一些在目標檢測方面比較好的綜述。第一篇是2018年的一篇綜述,上面大概介紹了目標檢測在計算機視覺上的一些發(fā)展,比如2001年比較經(jīng)典的Viola & Jones 的adaboost的目標檢測;一直發(fā)展到2008年的DPM,deformable part model的目標檢測;在2012年,Hilton的學生 Alex 在ImageNet上把圖像分類提升了很大,從而推動了基于深度學習的目標檢測方法的發(fā)展;比如2013年的OverFeat方法;后續(xù)比較有影響的是基于RCNN系列的Fast和Faster RCNN,乃至后面各種以深度學習為基礎(chǔ)的各種網(wǎng)絡。
另外,今年最新的一篇綜述由滴滴完成。上一篇綜述大概覆蓋300多篇文章,這篇綜述則包含的更多,大概有410多篇文章。從1996/1998年到2018年,大概20年間目標檢測相關(guān)的文章都包含在其中。這篇綜述在后面進行了細分,將目標檢測細分出one-stage和two-stage。其實后面還可以再細分,比如基于anchor-based和anchor-free的方法。從2001年Viola & Jones的目標檢測,到2008年的DPM,到后面一些基于深度學習的經(jīng)典的綜述方法基本都涵蓋其中。
從這里面看出,一些進行視覺工作的人會覺得三年前的文章就算老的文章,其實并不是的??梢詮闹锌闯觯谏疃葘W習的目標檢測bbox的計算都是基于回歸的方法。Bounding box regression在2008年的DPM里面提出,后面延申到Deep learning里面,有很多概念都含在這篇文章中。比如multi-scale的概念,或者multiple reference都可以從以前的paper里找到一些相關(guān)的想法。這里的一個例子是bounding box regression的一些進展,最經(jīng)典的是2008年DPM這篇文件,他提出了從bounding box到bounding box的回歸,后面形成了從feature到bounding box的回歸,目前主流的目標檢測都是沿用這個方法。
如果想訓練好一個模型,大家需要很多手工的、或者從樣本層面做一些工作。比如最常用的是一些困難樣本生成策略(hard sample mining),具體用到的有hard negative mining技術(shù),這在最經(jīng)典的機器學習時代已經(jīng)大量運用。微軟訓練一個億量級的人臉檢測,也用到經(jīng)典的bootstrap方法,都采用了困難樣本挖掘工作。最近經(jīng)典的一篇 focal loss 通過新的損失函數(shù)(loss function)的設(shè)計,能夠完成困難樣本生成策略的工作。從這兩個例子中,我們可以看到,一些新的檢測方法都是回溯到一些經(jīng)典的方法。
有了一個模型/算法之后,如何在芯片上進行部署?這其實是一個難點。這里面我們總結(jié)了幾種常用的方法:比如由于計算資源的限制,通常會選用一些小的模型,像light-weighted model,。其中又有幾種選擇:比如卷積在整個網(wǎng)絡中占的計算量比較大,Group conv技術(shù)可以使卷積計算量下降;另外是在mobilenetV1、V2系列中使用的技術(shù),比如Depth-wise的可分離卷積;除此之外,還有后面衍生而來的基于shuffle 的V1、V2,這些都可以對已有的模型進行加速。
另外我們可以選擇一些Bottle-neck設(shè)計,比如可以從resnet系列選擇18、34、50或者101。上述是人工設(shè)計的一些主干網(wǎng)絡,現(xiàn)在一些新的研究熱點則轉(zhuǎn)向如何通過網(wǎng)絡自動搜索一些小的網(wǎng)絡。比如今年谷歌有一篇比較好的文章,研究如何搜索一個比較小的網(wǎng)絡能夠上線。
除了選擇一些比較輕量級的網(wǎng)絡,另外一個選擇是進行模型的剪枝,比如模型壓縮。2017年英偉達在LCLR上有一篇文章,講述了關(guān)于模型剪枝方面的工作。比如可以拋棄某些層,剪掉參數(shù)比較小的一些層。另外可以做知識蒸餾,Hilton在2015年提出的一種概念,即如果我們從一個大的網(wǎng)絡里面能夠?qū)W習一些知識,如何把知識傳到一些小的網(wǎng)絡中。知識蒸餾最初在分類問題里面得到應用,后面也推廣到分割任務上面。NIPS2017 NEC也有嘗試把知識蒸餾的方式推廣到目標檢測中。如果在大的網(wǎng)絡上面學習比較好,可以把這些知識蒸餾到比較小的網(wǎng)絡里面,方便上線。
另外一個層面與計算平臺相關(guān),如果一個計算平臺支持半浮點型或者INT8再或者binary的網(wǎng)絡,其本身就可以降低復雜度。這方面目前主流的一些框架,比如tensorflow,MxNet,或者基于英偉達平臺上面的tensorRT加速都支持半浮點,或者整形模型。當然上線可能有多方面的考慮,也有其他更好的方法,比如結(jié)合其中幾個方法能夠使一個模型上線。
上述文章主要討論關(guān)于目標檢測的內(nèi)容。最新基于anchor-free的目標檢測方法在最近幾年比較流行。比如從最開始的Densebox,到最近一篇今年百度關(guān)于Dubox的文章,即為了解決Densebox在小尺度目標漏檢的問題。
比如在一個feature map上面,一些小目標可能會被漏掉,那么可以在第二個feature map上面進行refine,這是一個很好的思路。
另外一篇是我們在視覺組在每周paper reading活動中分享的一篇結(jié)合anchor-based和anchor-free的CVPR19年的文章。該文章講述通過結(jié)合anchor-based和anchor-free兩種方法從而整體提升目標檢測精度。
如果想做一個比較實用的基于車道線的檢測算法,對魯棒性或者復雜場景的支持要求很高。這里介紹主流的方法和一些比較新穎的方法。
深度學習方法逐漸在分割任務里面占主流,目前大多車道線算法,大都把車道線當作一個分割問題,然后加一個post-processing算法。后面有一些新的方法,或通過end-to-end的方式,將車道線步驟變得更簡潔。類似于目標檢測?,F(xiàn)在經(jīng)典的目標檢測方法都不需要復雜的post-processing的方法。
左邊是一個FCN。FCN是給一個輸入圖像,輸出一個dense的map;可以和原圖一樣大,也可以和原圖比縮小1/4或1/8,代表一個dense的prediction。比如這里可以預測一個像素點是車道線的概率。
右邊簡單介紹車道線分割和后處理結(jié)果,上面是實際輸入到網(wǎng)絡里面的圖,下面是一張實際輸入圖經(jīng)過網(wǎng)絡之后的一個probability map。每個點代表了這個點屬于車道線的概率。右面經(jīng)過一些post processing,把車道線提取出來,這里面只是展示了把它當做一個binary的分割問題,我們可以對車道線做更復雜的一些分割。那么最重要的事如何做post-processing。這展示的是視野比較清晰的一張圖,在實際過程中有可能遇到各種復雜的場景。比如說網(wǎng)絡輸出的概率圖有可能質(zhì)量不是太高,如何加上復雜的后處理,能夠把車道線提取出來也是一個比較難的挑戰(zhàn)。
這是商湯在AAAI 2018上面的一篇文章,個人覺得有兩大創(chuàng)新。第一個是,因為車道線是有很強的局部先驗知識,或者說它有很強的context信息,如何把這些context的信息結(jié)合起來有助于車道線的提升。比如說我們在遇到這些虛線的時候,虛線在視覺上是沒有appearance,但是通過它前面和后面的實線,可以把這些context信息結(jié)合起來,即可把車道線的一些context信息囊括得更好。這篇文章里面用到得一個關(guān)鍵點是,可以通過分層,把每一行上面的信息傳遞到下一行,或者每一列的信息傳遞到左邊或者右邊,同時提升網(wǎng)絡對context信息的抽象,提升預測結(jié)果。但是有個缺點就是計算量會增大。
另外一個創(chuàng)新點是開源了一個比較大的數(shù)據(jù)集。對一個車道線數(shù)據(jù)集進行了很好的分類,比如說有白天/晚上,有擁堵跟車或者沒有車道線的情況,這些場景都做了細分。在實際過程中,數(shù)據(jù)集本身對算法的提升也有很大的作用。
障礙物檢測的目標測距或者車道線如何從二維世界到三維世界,一個比較關(guān)鍵的部分是要對camera pose進行實時估計。實時估計有很多種方法,但是實際情況中對camera pose的估計要求比較高,比如魯棒性要求比較高。使用一些視覺的特征,例如在高速場景下,可以用到一些車道線相關(guān)信息;在城市場景下,可以用到一些建筑的信息,或者交通信號燈的信息?;蛘哌\行一個視覺slam,slam就是要解連續(xù)兩幀之間camera pose是怎么變化的。
另外的一些信息來源可以從其他傳感器得到,比如從IMU或者車子的里程獲得;如果有激光雷達,可以通過激光雷達拿到激光雷達的姿勢,再從激光雷達轉(zhuǎn)到camera pose,就可以知道攝像頭每時每刻是如何運動的,這些大概都是非深度學習的一些方法。
隨著深度學習在計算機視覺作用越來越大,大家也在嘗試camera pose估計能不能用深度學習的方法來實現(xiàn)。第一個是supervised,如果我們有camera pose的groundtruth之后,就可以通過supervised的方式去解。另外一種方式是unsupervised,主要原理就是,一個camera發(fā)生變換之后,一個圖像在T時刻經(jīng)過wrap之后,可以和T+1時刻的圖像做pixel wise的差,從而使camera pose算得更準。
對車道線來說,能不能從一張圖片直接得到車道線,而不去做camera pose估計或者很重的post-processing?這里面推薦的一個方法,比如3D LaneNet上面提出的anchor-based的方法。這里的一個假設(shè)是,車道線如果從原圖上面看的話,因為它是經(jīng)過projection得來的,車道線在近端比較寬,在遠端比較窄,每條車道線appearance是不像的。我們?nèi)绻D(zhuǎn)成俯視圖,大多數(shù)車道線都是平行的,appearance比較像。這里一個比較創(chuàng)新的地方是,我們可以把目標檢測里面的anchor-based方法推到車道線提取中來。這里是supervised計算camera pose的方法,因其需要從原圖轉(zhuǎn)到俯視圖,所以需要相機的外參,但這篇文章是通過supervised的方式去做這件事情的,因為它有g(shù)roundtruth。
上一個網(wǎng)絡是從image view正常的成像圖方面來做,第二個網(wǎng)絡是可以從俯視圖里面最終輸出三維的車道線信息,這個是anchor的方法,anchor方法是在俯視圖里面進行的。俯視圖可以假想為一個地面,每一個列都是一個anchor,每個anchor都可能會映射一個車道線;比如這個列對應一個車道線,那么就可以預測每一行的橫坐標相對于這一列的橫坐標,如果有這個信息的話,即可以把車道線通過anchor的方式預測出來。比如說這里面黃色的橫向偏移是指每一條車道線相對于anchor所代表的列的橫向偏移,所以有了每一列,其實我們只需要算每一個sample的點與這個sample點的橫坐標的偏移就可以把車道線算出來,所以不需要經(jīng)過一些很重的后處理,這是一種思路。
這是其在模擬數(shù)據(jù)上面取得的結(jié)果,但是這篇文章因為我們從實際中去獲得每一幀的camera pose是很難的,所以這篇文章主要是給大家提供一些想法。通過anchor-based的方法就可以直接得到車道線。還有一個end-to-end里面更直接的一個方法,不需要anchor。
剛才介紹的這幾種方式都是拋棄了post-processing的過程,從而使深度學習能夠直接獲得車道線,類似于目標檢測中我們直接獲得最終結(jié)果的一些方式。
首先介紹一些自動駕駛公開數(shù)據(jù)集,比如說最經(jīng)典的從KITTI的數(shù)據(jù)到后面用于分割的CityScapes或者NuTonomy公司提出的NuScenes數(shù)據(jù)集,或者百度開源出來的阿波羅Scape,還有伯克利開源的BDD。今年CVPR 19上 waymo,、Argo和Lyft分別開放了一些自動駕駛相關(guān)的數(shù)據(jù)集。
截止2017年,Kitti是被引用最多的數(shù)據(jù)集。KITTI的一個傳感器的配置、數(shù)據(jù)集的分類,比如說障礙物的分類,或者一張照片中有多少個種類的一些分布的統(tǒng)計,也有助于我們自己構(gòu)建數(shù)據(jù)集的時候去統(tǒng)計我們自己的數(shù)據(jù)。
百度也開放了包括激光、數(shù)據(jù)和圖像數(shù)據(jù)的自動駕駛公開數(shù)據(jù)集。NuScenes開源的一個比較大的公開數(shù)據(jù)集,同樣包括了攝像頭、激光雷達和毫米波雷達等信息。這些細分數(shù)據(jù)對自動駕駛公司自己收集數(shù)據(jù)提供很大的參考信息。
伯克利也推出100K數(shù)據(jù),其中包含了目標檢測和圖像分割,主要覆蓋紐約、伯克利、三藩和灣區(qū)四個城市的數(shù)據(jù)采集。
有了這么多數(shù)據(jù)之后,我們要了解的是大規(guī)模數(shù)據(jù)之后,一個模型它基本上是Garbage in Garbage out,如果扔進去的一些無用的信息,那么模型很難學到一些有用的信息。
這是交流的一個重點,就是視覺模型上線是一個閉環(huán)迭代過程,涵蓋數(shù)據(jù)采集、數(shù)據(jù)清洗、數(shù)據(jù)標注、模型訓練、模型測試,最終才可上線。
數(shù)據(jù)集中難免出現(xiàn)一些錯誤或丟失。李飛飛的學生 andrej Karpathy 在一個演講上指出,一個phd學生可能95%的時間在學校設(shè)計算法,因為它可以使用一些公開的數(shù)據(jù)集;可能這5%的時間就是下載數(shù)據(jù),做一些評測。那么他到了特斯拉領(lǐng)導自動駕駛小組,75%時間專注在數(shù)據(jù)。這說明數(shù)據(jù)是非常重要的一環(huán)。這一點我也非常認同。
我們知道在圖像數(shù)據(jù)中通過視角、光照等變化都可以對自動駕駛算法造成影響。
在自動駕駛數(shù)據(jù)中,兩個比較簡單的場景,比如說視野開闊、車少、車道線有比較清楚的樣例。但在實際場景中有很多更復雜場景,比如夜間虛線的車道線場景,夜間光線比較弱,那么識別這些車道線其實是很難的,即使去做標注也很難去準確地把車道線給標出來。另外是擁堵跟車時候拍到的物體、比較近距離的障礙物,這對車道線、障礙物標注或者算法設(shè)計都會有一些挑戰(zhàn)。
另一個極端例子是“加塞”,如果一輛車從旁邊車道“加塞”,那么它會擋住視野中的車道線,這對車道線標注、訓練或者上線都會帶來挑戰(zhàn)。有時候一輛大車會完全擋住所有的視線,這對車道線的算法會帶來很大的挑戰(zhàn)。
從中可以看到,自動駕駛?cè)绾胃咝У厥占@些有效數(shù)據(jù)其實是很難的。而且這些數(shù)據(jù)大量都是不均衡的。如果搜集這些數(shù)據(jù)場景,比如道路分叉,甚至是在高速上面或者環(huán)線上面道路分叉占整個數(shù)據(jù)量是其實很少的,覆蓋更復雜的場景是數(shù)據(jù)方面的一個挑戰(zhàn)。
當場景定義結(jié)束后, 有效數(shù)據(jù)的獲得也很重要,最后是模型的迭代。英特爾CEO曾表示,自動駕駛數(shù)據(jù)量很大,如果要收集所有信息的話,大概4000 GB/天,但是我們并不需要每時每刻都把所有信息收集起來。
數(shù)據(jù)方面要考慮的四大因素:第一個是數(shù)據(jù)獲取,即如何獲取一些最有效、最關(guān)鍵信息;第二個數(shù)據(jù)存儲;第三個是數(shù)據(jù)管理,即如何從中間拿到最有效信息、如何管理這些信息,使各個組都能夠快速或者便捷的獲取這些信息進行算法開發(fā);還有一個最關(guān)鍵是數(shù)據(jù)標注。
那么如何從數(shù)據(jù)獲取到數(shù)據(jù)標注?數(shù)據(jù)獲取要平衡三個因素,第一個是包含場景,比如要包含各種天氣、各種城市或者高速場景、各種車道線的細分類型直線/虛線等各種場景。第二個因素,要考慮推向市場的功能的緊急程度,比如模塊迭代,因從算法開發(fā)第一天就支持所有各種復雜場景并不現(xiàn)實,所以需要根據(jù)推向市場功能的緊急程度來定義要獲取什么數(shù)據(jù)。第三個是根據(jù)現(xiàn)有資源,比如現(xiàn)有的資源從算法設(shè)計或者人員都有可能影響數(shù)據(jù)的獲取。
數(shù)據(jù)存儲有幾個方面需要考慮:第一個是需要本地存儲還是云端存儲,我們能如何更高效的利用云端或者本地這些架構(gòu)。另一個是如何存儲采集車上的數(shù)據(jù),因為采集車運行一天或者連續(xù)跑很長時間,數(shù)據(jù)量是非常大的,很多時間花費在如何從產(chǎn)業(yè)車上面把數(shù)據(jù)拷走。另外一個是數(shù)據(jù)安全如何保證。再是數(shù)據(jù)管理,多與存儲相關(guān)。比如原來數(shù)據(jù)存在什么地方,或者需要存儲哪些數(shù)據(jù),如何使每個人都能便捷地讀取這些數(shù)據(jù)也有利于整個開發(fā)效率的提升。
關(guān)于數(shù)據(jù)標注,上面介紹了幾大公開數(shù)據(jù)集,每一個都有自己標注的一些定義,所以我們需要根據(jù)自己算法設(shè)計或者功能實現(xiàn)定義合理的標準。第二是要考慮量產(chǎn)經(jīng)濟因素,比如說我們要和外面第三方合作,也要考慮如何使這些標定義的標準能夠使第三方能夠快速接受。最后是確保達到最佳標準,因為標注即使是通過人工篩選、人工驗證,還是有很多噪聲涵蓋其中,所以如何提升標注的準確性,也是很重要的一個因素。
總結(jié)一下,視覺方案是一個閉環(huán),從數(shù)據(jù)的采集到數(shù)據(jù)清洗,到拿到清洗有效數(shù)據(jù)之后的數(shù)據(jù)標注。從標注團隊拿到標準數(shù)據(jù)之后,進行了模型訓練或者內(nèi)部評測,經(jīng)過模型測試之后,如果達到要求模型即可上線。
有整個閉環(huán)的流程之后,即可支持模型的迭代。通過模型迭代不斷解決上一個版本遇到問題,一個模塊或者視覺模塊迭代的快慢往往取決于這幾個步驟,比如數(shù)據(jù)采集或者根據(jù)某個版本發(fā)現(xiàn)這些問題進行的數(shù)據(jù)清洗、更準確的數(shù)據(jù)標注、模型內(nèi)部的測試和上線,如果能形成一個快速的閉環(huán),那么開發(fā)節(jié)奏會高效很多。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。