360度無死角、近距離看「CNN」訓練,是種什么體驗?網(wǎng)友:美得不真實
火到讓網(wǎng)友喊“快開源”
蕭簫 魚羊 發(fā)自 凹非寺
量子位 報道 | 公眾號 QbitAI
做計算機視覺,離不開CNN。
可是,卷積、池化、Softmax……究竟長啥樣,是怎樣相互連接在一起的?
對著代碼憑空想象,多少讓人有點頭皮微涼。于是,有人干脆用Unity給它完整3D可視化了出來。
還不光是有個架子,訓練過程也都呈現(xiàn)得明明白白。
比如隨著epoch(迭代次數(shù))的變化,訓練過程中各層出現(xiàn)的實時變化。
為了能更清楚地展示網(wǎng)絡(luò)細節(jié),用戶還可以在其中自由地折疊、擴展每個層。
比如將特征圖在線性布局和網(wǎng)格布局之間轉(zhuǎn)換。
折疊卷積層的特征圖輸出。
對全連接層進行邊綁定(edge bunding)等等。
這樣的可視化圖像,可以通過加載TensorFlow的檢查點來構(gòu)建。
也可以在Unity編輯器中設(shè)計。
是不是有點鵝妹子嚶那感覺了?
最近,這個項目又在社交媒體上火了起來。
網(wǎng)友們紛紛表示:
“要是能在訓練的時候看到這個過程,再長時間我也能忍啊?!?/p>
“求開源?!?/p>
該項目的作者,是一位來自維也納的3D特效師。
據(jù)他介紹,之所以創(chuàng)建這樣一個CNN可視化工具,是因為他自己初學神經(jīng)網(wǎng)絡(luò)時,經(jīng)常覺得很難理解卷積層之間是如何相互連接,又如何與不同類型的層連接的。
而該工具的主要功能包括,卷積、最大池化和完全連接層的可視化表示,以及各種能實現(xiàn)更清晰可視化的簡化機制等等。
總而言之,就是想讓初學者通過最直觀的方式,來get到CNN的重點。
如何用Unity搞出一個3D網(wǎng)絡(luò)
在正式上手Unity前,作者先在Houdini軟件中,搭建了一個可視化的3D網(wǎng)絡(luò)原型。
也就是說,先給Unity版3D網(wǎng)絡(luò)提供一個搭建思路,提前準備好實現(xiàn)展示卷積計算的方法、特征圖的形狀、邊綁定的效果等問題。
它的節(jié)點編輯器長這樣:
然后,就可以在Unity上搭建3D神經(jīng)網(wǎng)絡(luò)了。
首先,需要預(yù)設(shè)好神經(jīng)網(wǎng)絡(luò)的“形狀”。
由于之前并沒有用過Unity,作者先學習了著色器和過程式幾何相關(guān)的知識。
這里面,作者發(fā)現(xiàn)了一些局限性,他采用的是Unity為著色器開發(fā)的語言Shaderlab,這個語言無法使用著色變化,只有對語義進行預(yù)定義的變量,才能讓它在頂點、幾何和像素著色器之間傳遞。
而且,它無法任意分配頂點屬性,只有位置、顏色、UV等預(yù)定義屬性。(可能這也是3D網(wǎng)絡(luò)無法實時改變顏色的原因之一)
在研究了一些實例化(instancing)相關(guān)的概念后,作者計劃采用幾何著色器的方法生成神經(jīng)網(wǎng)絡(luò)的連線。其中起點和終點被傳遞到頂點著色器,并直接轉(zhuǎn)發(fā)到幾何著色器。
這些線,最多可以由120個頂點組成,因為Unity允許的幾何著色器能創(chuàng)建的變量的標量浮點數(shù)為1024。
設(shè)計后的網(wǎng)絡(luò)形狀,大致長這樣:
然后,就是從模型的TensorFlow代碼中,生成對應(yīng)的3D神經(jīng)網(wǎng)絡(luò)圖像。
其中,Tensorflow-native.ckpt格式的文件,需要存儲重構(gòu)模型圖所需的數(shù)據(jù)、二進制的權(quán)重讀取和激活值,以及特定層的名字。
以Cifar10-greyscale數(shù)據(jù)集為例,需要編寫一個檢查點(checkpoint)文件,以及設(shè)置隨即初始化的權(quán)重。
在那之后,需要加載這些檢查點文件、啟動TensorFlow會話,輸入訓練示例,以便查詢每一層的激活函數(shù)。
然后編寫一個json文件,存儲每一層的形狀、名稱、權(quán)重和激活函數(shù),便于讀取。然后使用權(quán)重值,將顏色數(shù)據(jù)分配給各層的Unity Mesh。
最終搞出來的效果,還是不錯的:
作者還錄了個開發(fā)視頻,在文末可以找到地址。
相關(guān)研究還不少
事實上,此前已經(jīng)有不少學者,進行過神經(jīng)網(wǎng)絡(luò)可視化的研究。
例如,去年5月,一位中國博士就可視化了卷積神經(jīng)網(wǎng)絡(luò),將每一層的變化都展示得非常清楚,只需要點擊對應(yīng)的神經(jīng)元,就能看見它的“操作”。
這是用TensorFlow.js加載的一個10層預(yù)訓練模型,相當于在瀏覽器上就能跑CNN模型,也可以實時交互,顯示神經(jīng)元的變化。
不過,這還是個2D的項目。
目前,也已經(jīng)有人像上面那個神經(jīng)網(wǎng)絡(luò)模型一樣,做出了3D的可視化神經(jīng)網(wǎng)絡(luò):
這個項目,同樣用到了邊綁定、光線追蹤等技術(shù),與特征提取、微調(diào)和歸一化相結(jié)合,將神經(jīng)網(wǎng)絡(luò)可視化。
這項項目希望能借由這些技術(shù),來估計神經(jīng)網(wǎng)絡(luò)中不同部分的重要性。
為此,作者將神經(jīng)網(wǎng)絡(luò)的每一部分都用不同的顏色來表示,根據(jù)節(jié)點和節(jié)點在網(wǎng)絡(luò)中的重要性,來預(yù)測它們之間的關(guān)聯(lián)性。
大致的處理過程是這樣的:
如果對于這類3D神經(jīng)網(wǎng)絡(luò)可視化感興趣,可以在文末找到對應(yīng)的開源項目地址。
作者介紹
Stefan Sietzen,現(xiàn)居維也納,此前曾是個3D視覺方向的自由職業(yè)者。
目前,他在維也納工業(yè)大學讀碩,對視覺計算(visual computing)非常感興趣,這個3D神經(jīng)網(wǎng)絡(luò),就是他在碩士期間做的項目之一。
開發(fā)過程:
https://vimeo.com/stefsietz
已開源的3D神經(jīng)網(wǎng)絡(luò)項目:
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
- 首個GPT-4驅(qū)動的人形機器人!無需編程+零樣本學習,還可根據(jù)口頭反饋調(diào)整行為2023-12-13
- IDC霍錦潔:AI PC將顛覆性變革PC產(chǎn)業(yè)2023-12-08
- AI視覺字謎爆火!夢露轉(zhuǎn)180°秒變愛因斯坦,英偉達高級AI科學家:近期最酷的擴散模型2023-12-03
- 蘋果大模型最大動作:開源M芯專用ML框架,能跑70億大模型2023-12-07