引用
Tian, Yuchi, Kexin Pei, Suman Jana, and Baishakhi Ray. "Deeptest: Automated testing of deep-neural-network-driven autonomous cars." In Proceedings of the 40th international conference on software engineering, pp. 303-314. ACM, 2018.
研究背景:近些年來對於深度神經網路的研究處於突飛猛進之勢,由DNN驅動的自動駕駛汽車系統也隨之高速發展。特斯拉,BMW等大型製造商正如火如荼的製造並測試各種型別的自動駕駛汽車。自動駕駛汽車主要依靠攝像機,鐳射雷達等感測器接收訊號從而控制汽車元件的各種決策行為,比如方向盤,剎車和油門等,無需人類干預即可完成安全駕駛的目標。近段時間自動駕駛汽車的安全事故接連不斷地出現,與一般的軟體系統不同,自動駕駛系統的決策一旦出現錯誤,付出的可能是生命的代價。由此可見,對自動駕駛汽車系統進行有效的測試是至關重要的。
解決的問題:1)大多數現有的測試技術很依賴於不同駕駛條件下手動收集的資料,駕駛過程中的系統狀態空間極大,收集資料十分困難。
2)測試過程中,如何人工地建立系統的需求規格,通過它來對系統的行為是否正確來做檢查,這也是個難題。
3)如何綜合實際的系統輸入,使得測試過程自動化。
實驗方法:1. 基於神經元覆蓋的系統性測試。
本文設計了一共將空間劃分為不同等價類的系統方法,利用神經元覆蓋率作為一種劃分輸入空間的機制。神經元覆蓋率被定義為在給定輸入下被啟用的神經元與DNN中神經元總數的比率,本文使用0.2作為神經元啟用閾值。Deeptest試圖生成最大化神經元覆蓋率的輸入,來增加自動駕駛系統輸出的多樣性。
2. 利用影象合成最大化神經元覆蓋率
為了保證測試具有實際意義,本文對於生成的影象測試用例進行合成,模擬真實世界的現象。其中包括九種真實影象變換:改變亮度,改變對比度,平移,縮放,水平剪下,旋轉,模糊,霧效果和雨效果。這些變換分為三類:線性變換,仿射變換和卷積變換。線性變換可以通過在畫素的當前值加減或乘上常數引數來實現。文中列出了四種變換矩陣:平移,縮放,剪下和旋轉。仿射變換是計算變換矩陣與原有矩陣的點積來模擬反例,來檢查自動駕駛系統對於這些變換的魯棒性。模糊和新增霧/雨效果都是卷積變換,即對具有不同變換特定核的輸入畫素執行卷積運算。卷積運算將輸入影象的每個畫素相加到其區域性鄰域。本文使用四種不同型別的模糊濾波器:平均、高斯、中值和雙邊。文中將adobe photoshop提供的多個過濾器組合在輸入影象上,以模擬真實的霧和雨效果。
3. 利用變換組合提高神經元覆蓋率
不同的影象變換可以啟用不同的神經元,如果這些變換堆疊起來的話,可以啟用更多的神經元。可是,所有變換組合的狀態空間非常巨大,本文提供了一種神經元覆蓋率引導的貪婪搜尋技術,可以有效地找到導致更高覆蓋率的影象變換組合。該演算法以一組初始影象i、一組變換t及其相應引數作為輸入。該演算法的核心思想是跟蹤那些成功地增加給定影象神經元覆蓋率的變換,並在從給定影象生成更多合成影象的同時對它們進行優先順序排序。該過程以深度優先的方式對所有影象重複。
4. 利用蛻變關係創造Test Oracle
自動駕駛系統是一個基於DNN的複雜系統,手動建立系統規範是極其困難的,因為這涉及到重新建立人工驅動程式的邏輯。本文巧妙地避免了這個問題,轉而考慮不同合成影象間對應汽車不同決策行為之間的蛻變關係。例如,在任何燈光/天氣條件、模糊或任何具有小引數值的仿射變換下,對於同一影象,自動駕駛汽車的轉向角不應發生顯著變化。然而對於給定影象,通常沒有一個正確的轉向角,汽車也許可以安全地承受微小的變化。本文在嚴格與寬鬆的蛻變關係尋求一種權衡,於是藉助均方誤差重新定義了一個蛻變關係,即假設模型對於輸入的轉換影象產生的誤差應該在原始影象集產生的均方誤差的lamda倍範圍內,這裡的lamda是一個可配置引數.
實驗結果:本文將deeptest工具用於對三款在Udacity自動駕駛挑戰賽中獲得優異名次的DNN車型上進行評估,分別為 Rambo(第二名), Chauffeur (第三名), 和Epoch(第六名).
首先研究了神經元覆蓋率與測試輸出的關係,通過計算神經元覆蓋率和轉向角之間的斯皮爾曼秩相關性,得到了兩個變數之間單調關聯的非引數測度。正相關分析表明,隨著神經元覆蓋率的增加,轉向角增大,反之亦然。所有模型的斯皮爾曼秩相關性在統計學上都是顯著的,而Chauffeur模型和Rambo模型顯示出整體的負相關性,Epoch模型顯示出很強的正相關性。結果表明,神經元的覆蓋率隨輸出轉向角的變化而變化。
其次測量了神經元覆蓋率與轉向方向的相關性,本文使用wilcoxon非引數檢驗,因為轉向只能有兩個值(左和右)所有三個整體模型。結果顯示,對於rambo,只有rambo-s1子模型顯示了統計上的顯著相關性,而rambo-s2和rambo-s3沒有。這些結果表明,與前序研究的轉向角不同,一些子模型比其他模型更負責改變轉向。
總的來說,這些結果表明,對於不同的輸入輸出對,神經元的覆蓋率完全不同。因此,神經元覆蓋率導向測試策略有助於發現邊緣的例子。
本文從測試集中隨機抽取1000個輸入影象,並使用七種不同的變換對它們進行變換:模糊、亮度、對比度、旋轉、縮放、剪下和平移。還改變了每個變換的引數,生成了總共70000個新的合成影象。用這些合成影象作為輸入執行所有模型,並記錄每個輸入啟用的神經元。對於所研究的所有模型,轉換後的影象顯著增加了神經元的覆蓋率,wilcoxon非引數檢驗證實了統計顯著性。這些結果還表明,不同的影象變換以不同的速率增加了神經元的覆蓋率。
接著,我們使用神經元覆蓋率引導的貪婪搜尋演算法來檢查是否可以進一步增加累積神經元覆蓋。我們從100張原始圖片中為chauffeur生成254221和864張圖片,引導轉變。epoch和rambo分別建立模型並測量它們的集體神經元覆蓋率。chauffeur、Epoch、Rambo-S1、Rambo-S2和Rambo-S3的引導轉換總共達到總神經元的88%、51%、64%、70%和98%,從而使非引導方法的覆蓋率增加到17%22%、12%、21%和0.5%。該方法還顯著提高了神經元覆蓋率w.r.t.基線累積覆蓋率。
對於雨、霧和引導搜尋,我們分別報告了所有三個模型中λ=5的4448、741和821個錯誤行為。對於某些轉換,某些模型比其他模型更容易出現錯誤行為。例如,Rambo生成了23個剪下錯誤情況,而其他兩個模型沒有顯示任何此類情況。同樣,deeptest也發現了650起司機在下雨時的錯誤行為,但epoch和rambo分別只有64起和27起。總的來說,deeptest在所有三個模型中檢測到6339個錯誤行為。在神經元覆蓋率引導的合成影象中,deeptest成功地檢測出3種低誤報模型預測的1000多個錯誤行為。利用deeptest生成的綜合資料對dnn進行再訓練,dnn的準確率可提高46%。
總結:本文實現了一個系統化的測試工具deeptest,可以自動檢測出DNN自動駕駛系統可能導致事故發生的錯誤決策,主要是分析攝像頭捕獲到的影象致使自動駕駛汽車轉向的行為。首先,deeptest系統化自動生成測試用例,能使模型的神經元覆蓋率最大化,比如模擬下雨,起霧,光照條件等實際場景。其次,本文證明了神經元覆蓋率的變化可以影響到自動駕駛汽車轉向行為的變化,並且對於攝像機捕獲到影象進行各種轉換,可以啟用DNN中不同組的神經元,從而最大化神經元覆蓋率。最後,本文對於不同測試用例進行真實影象變換,進行合成測試,利用蛻變關係自動檢測錯誤行為,合成的影象還可以用於再訓練,使DNN自動駕駛汽車系統具有更強的魯棒性。
思考與未來展望:deeptest通過對原始影象應用不同的影象變換生成真實的合成影象。然而,這些轉換並不是設計成詳盡無遺的,因此可能並不涵蓋所有實際情況。雖然目前的影象變換(如雨和霧效果)被設計為真實的,但由於許多不可預測的因素,例如太陽的位置、雨滴的角度和大小,生成的圖片在現實中可能無法完全再現。然而,隨著影象處理技術的日益成熟,生成的影象將越來越接近現實。一個完整的DNN模型,除了轉向角以外,駕駛一輛自動駕駛汽車還必須處理制動和加速度。本文僅限於測試轉向角的準確性,因為此測試模型尚不支援制動和加速。後面的研究或許可以加入對於制動和加速的測試。
感謝國家自然科學基金專案(重點專案)智慧軟體系統的資料驅動測試方法與技術(61932012)資助