在本文中,作者設(shè)計和實現(xiàn)了一種系統(tǒng)的測試工具——DeepTest,并對其進行了評估。DeepTest是用于自動檢測可能導致致命事故的、由DNN驅(qū)動的系統(tǒng)的錯誤行為。它利用使現(xiàn)實駕駛條件發(fā)生變化的因素,例如雨、霧、光照等來自動生成測試用例。DeepTest通過生成能最大化激活神經(jīng)元數(shù)量的測試輸入,系統(tǒng)地探索DNN邏輯的不同部分。DeepTest在各種現(xiàn)實駕駛條件中(例如模糊、雨、霧等)找到了數(shù)千種錯誤行為,其中許多駕駛條件能使在Udacity自動駕駛汽車挑戰(zhàn)賽中表現(xiàn)良好的三個DNN模型產(chǎn)生潛在的致命事故。
在概念層面上,在基于DNN的軟件中產(chǎn)生的錯誤行為(corner-case behaviors)就類似于傳統(tǒng)軟件中的邏輯錯誤。與傳統(tǒng)軟件開發(fā)中的bug檢測和周期修復類似,一旦檢測到DNN的錯誤行為,可以通過將引起錯誤的輸入添加到訓練數(shù)據(jù)集,進一步改變模型結(jié)構(gòu)/參數(shù),從而使錯誤失效。然而,這是一個極具挑戰(zhàn)性的問題。
我們使用傳統(tǒng)軟件的經(jīng)驗表明,很難只通過使用手動測試用例構(gòu)建出魯棒的“安全至上“的系統(tǒng)。傳統(tǒng)軟件和基于DNN的軟件的內(nèi)部結(jié)構(gòu)存在著根本性的差異。例如,傳統(tǒng)的軟件程序邏輯是由軟件開發(fā)人員手工編寫的,而基于DNN的軟件是自動從大量的數(shù)據(jù)中學習并形成自己的邏輯。此外,傳統(tǒng)軟件程序的邏輯是用控制流語句來表示的,而DNN則以神經(jīng)元之間的連接的權(quán)重以及非線性的激活函數(shù)來形成邏輯。這些差異使得針對基于DNN的軟件的自動化測試充滿挑戰(zhàn)。
在本文中,作者討論了這些問題并設(shè)計了一套系統(tǒng)的測試方法,用于自動檢測自動駕駛汽車的DNN算法的錯誤行為。主要內(nèi)容包括:
1. 作者利用了神經(jīng)元覆蓋率這一概念,系統(tǒng)地探索了DNN邏輯的不同部分。作者用實驗證明,神經(jīng)元覆蓋率的變化與自動駕駛汽車執(zhí)行操作(如轉(zhuǎn)向)的變化有統(tǒng)計學相關(guān)性。因此,神經(jīng)元覆蓋率可以作為一種指導機制,系統(tǒng)地探索不同類型的汽車行為,并發(fā)現(xiàn)其中的錯誤行為。
2.通過模擬不同現(xiàn)實駕駛條件的圖像變換,比如改變對比度/亮度,攝像頭的旋轉(zhuǎn)等,可以激活自動駕駛汽車DNN中不同神經(jīng)元。通過這些圖像變換方法的組合,神經(jīng)元覆蓋率相比手動測試方法所能達到的覆蓋率提高了一倍。
3. 測試DNN時,當輸入圖像是某些特定類型的變換時,其輸出之間具有一定的相對關(guān)系,故而作者通過定義變形關(guān)系設(shè)計了一種輸出評價準則(例如,汽車在不同的照明條件下應(yīng)該表現(xiàn)相似),以此自動檢測錯誤行為。
圖1 幾組DeepTest發(fā)現(xiàn)的錯誤示例
背景
本文中,自動駕駛車輛的關(guān)鍵系統(tǒng)是基于DNN的感知模塊。如圖2所示,DNN算法的輸入來自于不同的環(huán)境感知傳感器,如攝像頭、LiDAR和紅外傳感器等;DNN算法的輸出則是車輛的控制信號,如轉(zhuǎn)向、制動等。本文所探討的端到端的自動駕駛系統(tǒng)中的DNN算法是以攝像頭為輸入,轉(zhuǎn)向角為輸出的。
圖2 一個典型的基于DNN的自動駕駛汽車架構(gòu)
方法
為了開發(fā)基于DNN的自動駕駛汽車的自動測試技術(shù),作者提出下列問題:
如何系統(tǒng)地探索自動駕駛汽車DNN的輸入輸出空間?
如何結(jié)合實際輸入實現(xiàn)自動化的探索?
如何優(yōu)化這個探索過程?
如何創(chuàng)建一個測試準則,使其不需要詳細的手動設(shè)置,便可自動檢測錯誤行為?
3.1 使用神經(jīng)元覆蓋率的系統(tǒng)測試
自動駕駛汽車的輸入輸出空間(即一個系統(tǒng)的輸入和輸出的所有可能的組合)非常復雜,想要窮舉這些組合是不可能的。因此,作者設(shè)計了一種系統(tǒng)的方法將空間劃分為不同的等價類(equivalence classes),并通過從每個等價類中選取一個樣本來嘗試覆蓋所有等價類。在本文中,作者采用神經(jīng)元覆蓋率來劃分輸入空間,并假設(shè)所有具有相似神經(jīng)元覆蓋率的輸入都屬于相同的等價類。
神經(jīng)元覆蓋率是由Pei等人提出的,最初用于測試多個相似的DNN的差異。它被定義為在給定輸入下,被激活的特定神經(jīng)元數(shù)目與DNN中神經(jīng)元的總數(shù)的比值。
與傳統(tǒng)軟件的以代碼覆蓋率為導向的測試工具類似,DeepTest試圖生成能最大限度地增加被測DNN的神經(jīng)元覆蓋率的輸入。
3.2 增加合成圖像的覆蓋率
某些輸入不太可能出現(xiàn)在現(xiàn)實世界中,即使這些輸入可能引發(fā)出錯誤行為,但它們?nèi)允菦]有意義的。所以,生成任意的輸入來最大化神經(jīng)元覆蓋率并不是有效的手段。因此,DeepTest專注于通過在種子圖像(seed image)上進行圖像變換來生成現(xiàn)實的合成現(xiàn)象,從而模擬不同的現(xiàn)實世界現(xiàn)象,例如攝像頭鏡頭失真,物體移動,不同的天氣條件等。為此,本文研究了九種不同的現(xiàn)實的圖像變換,包括改變亮度,對比度,平移,縮放,水平剪切,旋轉(zhuǎn),模糊,霧氣效果和雨水效果。這些變換可以分為三組:線性變換,仿射變換,和卷積變換。實驗結(jié)果表明,對所有被測DNN來說,這些變換都會顯著增加神經(jīng)元覆蓋率。其中:
線性變換包括改變亮度和對比度
仿射變換包括平移,縮放,水平剪切和旋轉(zhuǎn)
卷積變換包括模糊和增加霧/雨效應(yīng)
3.3 通過組合變換增加神經(jīng)元覆蓋率
既然單個圖像變換能增加神經(jīng)元覆蓋率,那是否可以組合它們以進一步增加神經(jīng)元覆蓋率?作者的研究結(jié)果表明,不同的圖像變換會激活不同的神經(jīng)元,故而它們也可以堆疊在一起以進一步增加神經(jīng)元覆蓋率。然而,不同變換的所有可能組合形成的狀態(tài)空間太大,因無法徹底搜索。為此,作者提出了以神經(jīng)元覆蓋率為導向的貪婪搜索算法,它可以有效地找到圖像變換組合,從而獲得更高的覆蓋率(算法如圖3所示)。
圖3 DeepTest所使用的貪婪算法偽代碼
該算法將一組種子圖像I,變換列表T及其對應(yīng)參數(shù)作為輸入。該算法背后的關(guān)鍵思想是跟蹤成功增加給定圖像的神經(jīng)元覆蓋率的變換,并在根據(jù)該給定圖像生成更多合成圖像時優(yōu)先考慮這些變換。整個算法的搜索方式遵循深度優(yōu)先的原則。
3.4 用變形關(guān)系創(chuàng)造一種輸出評價準則
在測試基于DNN的復雜系統(tǒng)(如自動駕駛汽車)時面臨的主要挑戰(zhàn)之一是如何定義對測試輸出的評價準則,以便對系統(tǒng)的輸出做出評價。建立這樣的評價準則是具有挑戰(zhàn)性的,因為它在本質(zhì)上涉及了對人類駕駛員的邏輯重建。
為了規(guī)避這個問題,作者利用了不同系統(tǒng)輸出之間的變形關(guān)系(metamorphic relations)。這里的關(guān)鍵是,雖然無法孤立地為每個變換后的圖像定義其所對應(yīng)的自動駕駛汽車的正確執(zhí)行操作,但可以確定該汽車的輸入是某些特定類型的變換時,其輸出之間具有一定的相對關(guān)系。例如,相比以原始圖像作為輸入圖像,當自動駕駛汽車的輸入是經(jīng)過光照天氣條件改變、模糊等變換后的合成圖像時,輸出的轉(zhuǎn)向角度不應(yīng)該發(fā)生明顯的變化。
即如果DNN模型基于原始輸入圖像的輸出轉(zhuǎn)向角為,而通過將上述變換T應(yīng)用于而生成的新合成圖像的對應(yīng)輸出是轉(zhuǎn)向角,則和應(yīng)該是相同的。
但由于汽車可以安全地容許小的執(zhí)行操作變化(譯者注:轉(zhuǎn)向15.0度和轉(zhuǎn)向14.8度對汽車來說差別并不大),因此對于給定的圖像通常沒有特定的正確轉(zhuǎn)向角度。在嚴格地確定變形關(guān)系(可能導致許多假陽性事件即誤報事件)和松弛地確定變形關(guān)系(可能導致許多假陰性事件即漏報事件)之間需要適當折衷。 在本文中,作者使用了下面定義的變形關(guān)系:
觀察DNN模型對原始圖像預測的輸出集合,該集合和對這些圖像的手動標簽集合之間存在誤差。通常使用均方差(MSE)來度量這樣的誤差,
利用這個值,作者重新定義了一種新的變形關(guān)系:
上述公式中,作為輸入的合成圖像產(chǎn)生的誤差應(yīng)該在由原始圖像產(chǎn)生的均方差的λ倍的范圍內(nèi)。在這里,λ是一個參數(shù),可以在假陽性和假陰性之間取得平衡。
應(yīng)用
作者將DeepTest應(yīng)用于三個基于DNN的端到端自動駕駛算法的測試中,這些DNN模型(如圖4所示)在Udacity自動駕駛挑戰(zhàn)賽中都獲得了很好的成績:Rambo(第二名),Chauffeur(第三名)和Epoch(第六名)。
圖4 實驗模型相關(guān)信息
如圖4所示,在本文實驗中,轉(zhuǎn)向角度被定義為車輛的前進方向和轉(zhuǎn)向車輪(通常為前輪)的前進方向之間的夾角。本文中使用的Udacity自動駕駛車挑戰(zhàn)賽數(shù)據(jù)集最大轉(zhuǎn)向角度為+/- 25度。
在實驗中,作者利用了七種不同類型的簡單圖像變換:平移,縮放,水平剪切,旋轉(zhuǎn),對比度調(diào)整,亮度調(diào)整和模糊。作者使用OpenCV來實現(xiàn)這些變換。每個變換使用了10個參數(shù)。
結(jié)果
5.1 不同的輸入輸出會產(chǎn)生不同的神經(jīng)元覆蓋率嗎?
對于每個輸入圖像,作者測量在實驗模型上的相應(yīng)輸出和神經(jīng)元覆蓋率。
轉(zhuǎn)向角度:轉(zhuǎn)向角度是一個連續(xù)變量,作者檢查神經(jīng)元覆蓋率和轉(zhuǎn)向角度之間的Spearman等級相關(guān)性。這是計算兩個變量之間單調(diào)關(guān)聯(lián)性的非參數(shù)度量值。結(jié)果表明,轉(zhuǎn)向角度與神經(jīng)元覆蓋率之間存在著正相關(guān)性。
轉(zhuǎn)向方向:為了測量神經(jīng)元覆蓋率與轉(zhuǎn)向方向之間的關(guān)聯(lián),作者檢查在右轉(zhuǎn)向和左轉(zhuǎn)向之間神經(jīng)元覆蓋率是否發(fā)生變化。 作者使用Wilcoxon非參數(shù)測試,因為轉(zhuǎn)向方向只能有兩個值(左和右)。作者的研究結(jié)果表明,對于實驗中三種DNN模型神經(jīng)元覆蓋率都隨著轉(zhuǎn)向方向的不同而變化,且都有統(tǒng)計顯著性。
5.2 不同類型的圖像變換是否會激活不同神經(jīng)元?
作者從測試集中隨機挑選1000個輸入圖像,并使用了七種不同的變換(模糊,亮度,對比度,旋轉(zhuǎn),縮放,剪切和平移),最終一共生成70,000個新合成圖像。通過使用這些合成圖像作為輸入來運行所有模型,并記錄每個輸入所激活的神經(jīng)元,然后比較由同一原始圖像生成的不同合成圖像激活的神經(jīng)元。
結(jié)果表明,除了Chauffeur LSTM以外,對于其他模型,不同的變換都會激活不同的神經(jīng)元。LSTM是一種特殊類型的RNN架構(gòu),它能保持狀態(tài)不受之前的輸入影響,因此增加LSTM模型的神經(jīng)元覆蓋率要比其他模型難得多。
5.3 通過組合不同的圖像變換,神經(jīng)元覆蓋率能否進一步增加?
作者通過測量在兩種不同設(shè)置中的神經(jīng)元覆蓋率來研究這個問題:
應(yīng)用一組變換
通過使用貪婪算法組合變換
實驗結(jié)果表明,通過系統(tǒng)地結(jié)合不同的圖像變換,可以使神經(jīng)元覆蓋率提高一倍。
5.4用合成圖像重新訓練DNN能提高準確度嗎?
作者用DeepTest生成的一些合成圖像重新訓練DNN,觀察它們是否有助于使DNN更加健壯。實驗使用了經(jīng)典數(shù)據(jù)集中的圖像,并通過添加雨霧效果創(chuàng)建了它們的合成版本。 作者對Epoch模型進行了再訓練,重新訓練模型的準確度相比原始模型有著顯著提高。
局限性與結(jié)論
完整性:DeepTest通過在種子圖像上應(yīng)用不同的圖像變換來生成合成圖像,但是文中所運用的這些變換方式尚不能覆蓋所有現(xiàn)實駕駛條件中,對攝像頭所產(chǎn)生的影響因素。
真實性:盡管作者專門設(shè)計了圖像變換使得合成圖像盡量接近現(xiàn)實,但由于存在大量不可預知的因素,例如太陽的位置,雨滴的角度和大小,在現(xiàn)實中重現(xiàn)合成圖像是不可能的。但是,隨著圖像處理技術(shù)的發(fā)展,生成的圖像將能更接近現(xiàn)實情況。
執(zhí)行操作局限性:除了轉(zhuǎn)向之外,自動駕駛車輛的完整DNN算法還必須能控制制動和加速。因為作者的測試模型有局限性,因而僅對轉(zhuǎn)向進行了測試。但對支持輸出其他控制信號的模型,作者的技術(shù)仍具有一定適用性。
-
自動駕駛汽車
+關(guān)注
關(guān)注
4文章
377瀏覽量
40888 -
dnn
+關(guān)注
關(guān)注
0文章
60瀏覽量
9089
原文標題:DeepTest | 一種用于測試自動駕駛深度學習的工具
文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論