0
本文為 AI 研習社編譯的技術博客,原標題 :
Visualization of Deep Learning Feature Maps in Mini Autonomous Vehicles
作者 | Nelson Fernandez
翻譯 | 劉劉1126
校對、審核 | 醬番梨 整理 | Pita
原文鏈接:
https://towardsdatascience.com/displaying-convnets-feature-maps-on-real-time-video-with-keras-and-opencv-418b986adda7
幾個月前,我們開始制造Axionaut,一種小型自動無線電控制(RC)汽車,并且在巴黎參加了一些比賽。到目前為止一切順利,我們已經(jīng)取得了不錯的成績。盡管如此,大家總是對控制汽車的卷積神經(jīng)網(wǎng)絡內(nèi)部發(fā)生了什么感到好奇。
我們看到一些關于如何顯示特征映射和過濾器方面很好的文章,它們在理解和編寫神經(jīng)網(wǎng)絡特征映射時非常有用。我們還看到了一些很酷的Nvidia視頻,視頻展示了自動駕駛汽車上神經(jīng)網(wǎng)絡實時激活的樣子(但是,它們是怎么做到的呢?)。
所以我們決定從頭開始,嘗試在原型中復制這種體驗。為此,我們使用了預先訓練過的Keras Convnet自動駕駛模型,還有一些在訓練和比賽時拍攝的視頻。
有了這個良好的開端,我們花了幾天時間來尋找一些經(jīng)典問題的答案,比如“網(wǎng)絡是如何看待世界的”和“網(wǎng)絡實際上到底關注什么”。
我們把體驗的結果顯示在這里,請用科學的方法訪問:
https://youtu.be/YC13O-U5MnY
實現(xiàn)
如果你對我們是如何做到這一點感到好奇的話,首先你需要了解卷積層的特征映射在檢測視野內(nèi)相關特征時是如何激活的。這方面Harsh Pokharna的某篇文章做了很好的解釋。
在這種情況下,我們的汽車變成了一個檢測車道的“專家
就像人一樣,在不考慮其他因素(其他車輛、路標、行人或目的地)的情況下,車道會給我們提供如何做出正確決策的相關信息。我們應該向左轉(zhuǎn)?向右轉(zhuǎn)?繼續(xù)直行?
好吧,讓我們回到正題。我們需要做的第一件事是找到感興趣的卷積層,并且繪制需要激活的熱圖。為此,我們使用了這個龐大的存儲庫的一個稍微修改過的版本。
完全重建一次激活意味著要考慮到這里提到的“深”卷積層的作用。
為了簡化,我們要估算出單個卷積層的激活量,這里使用三次樣條插值法,而不是逆卷積。在對網(wǎng)絡上所有特征映射進行可視化檢測后,我們選擇了第二個卷積層。
我們將結果顯示在這里:
第二層卷積的特征映射
在這一點上,很明顯網(wǎng)絡主要是在響應車道。下一步是將原始輸入圖像與激活重疊,以一種不損壞原始圖像形狀和顏色的方式將響應高的區(qū)域清晰地疊加在一起。
這里要用到OpenCV!首先創(chuàng)建一個二進制掩碼,用來分割出激活最高的部分,同時棑除掉其他的。由于激活映射的區(qū)域較小,我們還需要向上采樣。然后,使用按位運算獲得最終合并的圖像。
最先要做的按位運算是將二進制掩碼和激活映射進行“與”運算。該操作可以用OpenCV輕松實現(xiàn),并且分割出映射里激活最高的部分。
二進制掩碼
按位運算中掩碼和特征向量的“與”運算
就像預期的那樣,我們最終得到了一條完全由卷積神經(jīng)網(wǎng)絡切割出來的、清晰的車道。
現(xiàn)在我猜你已經(jīng)想到了,為了要完成最終的圖像,我們需要做的第二步按位運算:與運算。圖像中的冷藍色是由于Matplotlib (RGB)和OpenCV (BGR)顏色格式不同導致的。你可以搗騰這個會變色的色圖來得到不同的顏色。
就這樣,我們在對網(wǎng)絡激活做合理估算的基礎上,將輸入圖像與特征映射做最后整合。
最終整合后的圖像
現(xiàn)在,讓我們用一段視頻來呈現(xiàn)這個結果吧。
問題
如果您有任何疑問,我將很樂意在評論中回答。 此處提供了指向公共存儲庫的鏈接,包括所有代碼和數(shù)據(jù)庫。 不要忘記在Twitter上關注我們。
想要繼續(xù)查看該篇文章相關鏈接和參考文獻?
長按鏈接點擊打開或點擊【迷你自動駕駛汽車深度學習特征映射的可視化】:
https://ai.yanxishe.com/page/TextTranslation/1206
AI研習社每日更新精彩內(nèi)容,觀看更多精彩內(nèi)容:雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
等你來譯:
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。