360度無死角、近距離看「CNN」訓練,是種什麼體驗?網友:美得不真實

點擊上方AI算法與圖像處理”,選擇加"星標"或“置頂

重磅乾貨,第一時間送達

來源:量子位

做計算機視覺,離不開CNN。

可是,卷積、池化、Softmax……究竟長啥樣,是怎樣相互連接在一起的?

對着代碼憑空想象,多少讓人有點頭皮微涼。於是,有人乾脆用Unity給它完整3D可視化了出來。

還不光是有個架子,訓練過程也都呈現得明明白白。

比如隨着epoch(迭代次數)的變化,訓練過程中各層出現的實時變化。

爲了能更清楚地展示網絡細節,用戶還可以在其中自由地摺疊、擴展每個層。

比如將特徵圖在線性佈局和網格佈局之間轉換。

摺疊卷積層的特徵圖輸出。

對全連接層進行邊綁定(edge bunding)等等。

這樣的可視化圖像,可以通過加載TensorFlow的檢查點來構建。

也可以在Unity編輯器中設計。

是不是有點鵝妹子嚶那感覺了?

最近,這個項目又在社交媒體上火了起來。

網友們紛紛表示:

“要是能在訓練的時候看到這個過程,再長時間我也能忍啊。”

“求開源。”

該項目的作者,是一位來自維也納的3D特效師。

據他介紹,之所以創建這樣一個CNN可視化工具,是因爲他自己初學神經網絡時,經常覺得很難理解卷積層之間是如何相互連接,又如何與不同類型的層連接的。

而該工具的主要功能包括,卷積、最大池化和完全連接層的可視化表示,以及各種能實現更清晰可視化的簡化機制等等。

總而言之,就是想讓初學者通過最直觀的方式,來get到CNN的重點。

如何用Unity搞出一個3D網絡

在正式上手Unity前,作者先在Houdini軟件中,搭建了一個可視化的3D網絡原型。

也就是說,先給Unity版3D網絡提供一個搭建思路,提前準備好實現展示卷積計算的方法、特徵圖的形狀、邊綁定的效果等問題。

它的節點編輯器長這樣:

然後,就可以在Unity上搭建3D神經網絡了。

首先,需要預設好神經網絡的“形狀”。

由於之前並沒有用過Unity,作者先學習了着色器和過程式幾何相關的知識。

這裏面,作者發現了一些侷限性,他採用的是Unity爲着色器開發的語言Shaderlab,這個語言無法使用着色變化,只有對語義進行預定義的變量,才能讓它在頂點、幾何和像素着色器之間傳遞。

而且,它無法任意分配頂點屬性,只有位置、顏色、UV等預定義屬性。(可能這也是3D網絡無法實時改變顏色的原因之一)

在研究了一些實例化(instancing)相關的概念後,作者計劃採用幾何着色器的方法生成神經網絡的連線。其中起點和終點被傳遞到頂點着色器,並直接轉發到幾何着色器。

這些線,最多可以由120個頂點組成,因爲Unity允許的幾何着色器能創建的變量的標量浮點數爲1024。

設計後的網絡形狀,大致長這樣:

然後,就是從模型的TensorFlow代碼中,生成對應的3D神經網絡圖像。

其中,Tensorflow-native.ckpt格式的文件,需要存儲重構模型圖所需的數據、二進制的權重讀取和激活值,以及特定層的名字。

以Cifar10-greyscale數據集爲例,需要編寫一個檢查點(checkpoint)文件,以及設置隨即初始化的權重。

在那之後,需要加載這些檢查點文件、啓動TensorFlow會話,輸入訓練示例,以便查詢每一層的激活函數。

然後編寫一個json文件,存儲每一層的形狀、名稱、權重和激活函數,便於讀取。然後使用權重值,將顏色數據分配給各層的Unity Mesh。

最終搞出來的效果,還是不錯的:

作者還錄了個開發視頻,在文末可以找到地址。

相關研究還不少

事實上,此前已經有不少學者,進行過神經網絡可視化的研究。

例如,去年5月,一位中國博士就可視化了卷積神經網絡,將每一層的變化都展示得非常清楚,只需要點擊對應的神經元,就能看見它的“操作”。

這是用TensorFlow.js加載的一個10層預訓練模型,相當於在瀏覽器上就能跑CNN模型,也可以實時交互,顯示神經元的變化。

不過,這還是個2D的項目。

目前,也已經有人像上面那個神經網絡模型一樣,做出了3D的可視化神經網絡:

這個項目,同樣用到了邊綁定、光線追蹤等技術,與特徵提取、微調和歸一化相結合,將神經網絡可視化。

這項項目希望能借由這些技術,來估計神經網絡中不同部分的重要性。

爲此,作者將神經網絡的每一部分都用不同的顏色來表示,根據節點和節點在網絡中的重要性,來預測它們之間的關聯性。

大致的處理過程是這樣的:

如果對於這類3D神經網絡可視化感興趣,可以在文末找到對應的開源項目地址。

作者介紹

Stefan Sietzen,現居維也納,此前曾是個3D視覺方向的自由職業者。

目前,他在維也納工業大學讀碩,對視覺計算(visual computing)非常感興趣,這個3D神經網絡,就是他在碩士期間做的項目之一。

開發過程:
https://vimeo.com/stefsietz

已開源的3D神經網絡項目:
https://github.com/julrog/nn_vis

參考鏈接:
https://www.reddit.com/r/MachineLearning/comments/leq2kf/d_convolution_neural_network_visualization_made/
https://mp.weixin.qq.com/s/tmx59J75wuRii4RuOT8TTg
https://vimeo.com/stefsietz
http://portfolio.stefansietzen.at/
http://visuality.at/vis2/detail.html


   
         
         
         
個人微信(如果沒有備註不拉羣!
請註明: 地區+學校/企業+研究方向+暱稱



下載1:何愷明頂會分享


AI算法與圖像處理」公衆號後臺回覆:何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經典工作的總結分析


下載2:終身受益的編程指南:Google編程風格指南


AI算法與圖像處理」公衆號後臺回覆:c++,即可下載。歷經十年考驗,最權威的編程規範!



 
       
       
       
下載3 CVPR2020

AI算法與圖像處公衆號後臺回覆: CVPR2020 即可下載1467篇CVPR 2020論文


覺得不錯就點亮在看吧


本文分享自微信公衆號 - AI算法與圖像處理(AI_study)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章