一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!

極驗發表於2019-12-20


一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!

神經網路繪圖篇!本次為大家介紹的是神經網路的視覺化工具和繪圖軟體。在搭建神經網路以及後期論文寫作時,視覺化的神經網路模型將在很大程度上幫助我們直觀地理解模型結構和資料的流動。除了大家常用的 PPT+AI+PS 之外,小助手也為大家整理了Github 上各路大神開發的繪圖軟體資訊。

神經網路繪圖軟體最新彙總

來自知乎的李佳駿根據軟體的便捷及易用性,美觀度,是否支援匯出,網路結構支援度,平臺和工具支援度,按照滿分五顆星的標準進行了評價。

示意圖

NN SVG ★★★★
  • 提供 三種典型 的神經網路繪圖風格,個性化引數多
  • 互動式繪圖
jettan/tikz_cnn ★☆
  • 基於tikz的tex的巨集指令繪製
  • 繪製指令碼繁雜
PlotNeuralNet ★★★☆
  • 底層基於tikz的tex的巨集指令繪製
  • 上層提供基於python的描述框架,繪製指令碼簡單
  • 可繪製複雜的網路結構
ConvNetDraw ★★
  • 基於javascript和css繪製
  • 僅支援基本Layer型別
gwding/draw_convnet ★★☆
  • 簡單易用
  • 底層基於matplotlib繪製
ajtulloch/dnngraph (便捷性不好評價,暫不打分)
  • 基於Haskell語言

計算圖

lutzroeder/netron ★★★★★ 
  • 支援工具: ONNX, Keras, CoreML, Caffe2, MXNet, TensorFlow Lite, Caffe, PyTorch, Torch, CNTK, PaddlePaddle, Darknet, scikit-learn, TensorFlow.js, TensorFlow.
  • 提供執行方式: 瀏覽器, Python Server; macOS, Linux, Windows
draw_net.py ★★☆
  • caffe自帶的畫圖工具
Netscope ★★★
  • 非常易用
  • 僅支援網頁版
Netscope-dgschwend ★★★☆
  • 基於Netscope二次開發
  • 給出網路的各種計算操作次數(非常方便!)
TFLearn ★★★☆
  • 其子工具提供了模型視覺化的功能
Tensorboard ★★★
  • 其子工具提供了模型視覺化的功能

NN-SVG
Github 地址:
  • https://github.com/alexlenail/NN-SVG
畫圖工具體驗地址:
  • http://alexlenail.me/NN-SVG/

NN-SVG是由來麻省理工學院弗蘭克爾生物工程實驗室開發的。可以繪製的圖包括以節點形式展示的FCNN style,這個特別適合傳統的全連線神經網路的繪製。
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!
以平鋪網路結構展示的LeNet style,用二維的方式,適合檢視每一層featuremap的大小和通道數目。
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!
以三維block形式展現的AlexNet style,可以更加真實地展示卷積過程中高維資料的尺度的變化,目前只支援卷積層和全連線層。
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!
這個工具的優勢是操作方便,通過互動式介面直接控制各層增減及變化,支援三種風格,選擇空間大,支援SVG格式下載。缺陷是定製化程度低,各連線層不是很好看。

PlotNeuralNet

Github 地址:

  • https://lutzroeder.github.io/netron/

PlotNeuralNet是由薩爾大學電腦科學專業的一個學生開發的。目前主要支援的是卷積神經網路,其中卷積層、池化層、bottleneck、skip-connection、up-conv、Softmax等常規的層在程式碼中都有定義,但是缺少RNN相關的視覺化層展示。

程式碼用Python編寫,需要呼叫LaTex輸出PDF格式文件。需要說明的是,該軟體在Windows下執行會有很多報錯,在Ubuntu系統下則執行正常。接下來我們先看看示例效果。

FCN-8
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!
VCG-16
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!
Holistically-Nested Edge Detection

一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!PlotNeuralNet的使用方法非常簡單,將專案克隆下來之後,想用什麼結構,就從PlotNeural裡找對應的模組,然後將它們拼接起來就好了,好比UNet:
import sys sys.path.append('../') from core.tikzeng import *from core.blocks import * arch = [ to_head('..'), to_cor(), to_begin(), #input to_input( '../examples/fcn8s/cats.jpg' ), #block-001 to_ConvConvRelu( name='ccr_b1', s_filer=500, n_filer=(64,64), offset="(0,0,0)", to="(0,0,0)", width=(2,2), height=40, depth=40 ), to_Pool(name="pool_b1", offset="(0,0,0)", to="(ccr_b1-east)", width=1, height=32, depth=32, opacity=0.5), *block_2ConvPool( name='b2', botton='pool_b1', top='pool_b2', s_filer=256, n_filer=128, offset="(1,0,0)", size=(32,32,3.5), opacity=0.5 ), *block_2ConvPool( name='b3', botton='pool_b2', top='pool_b3', s_filer=128, n_filer=256, offset="(1,0,0)", size=(25,25,4.5), opacity=0.5 ), *block_2ConvPool( name='b4', botton='pool_b3', top='pool_b4', s_filer=64, n_filer=512, offset="(1,0,0)", size=(16,16,5.5), opacity=0.5 ), #Bottleneck #block-005 to_ConvConvRelu( name='ccr_b5', s_filer=32, n_filer=(1024,1024), offset="(2,0,0)", to="(pool_b4-east)", width=(8,8), height=8, depth=8, caption="Bottleneck" ), to_connection( "pool_b4", "ccr_b5"), #Decoder *block_Unconv( name="b6", botton="ccr_b5", top='end_b6', s_filer=64, n_filer=512, offset="(2.1,0,0)", size=(16,16,5.0), opacity=0.5 ), to_skip( of='ccr_b4', to='ccr_res_b6', pos=1.25), *block_Unconv( name="b7", botton="end_b6", top='end_b7', s_filer=128, n_filer=256, offset="(2.1,0,0)", size=(25,25,4.5), opacity=0.5 ), to_skip( of='ccr_b3', to='ccr_res_b7', pos=1.25), *block_Unconv( name="b8", botton="end_b7", top='end_b8', s_filer=256, n_filer=128, offset="(2.1,0,0)", size=(32,32,3.5), opacity=0.5 ), to_skip( of='ccr_b2', to='ccr_res_b8', pos=1.25), *block_Unconv( name="b9", botton="end_b8", top='end_b9', s_filer=512, n_filer=64, offset="(2.1,0,0)", size=(40,40,2.5), opacity=0.5 ), to_skip( of='ccr_b1', to='ccr_res_b9', pos=1.25), to_ConvSoftMax( name="soft1", s_filer=512, offset="(0.75,0,0)", to="(end_b9-east)", width=1, height=40, depth=40, caption="SOFT" ), to_connection( "end_b9", "soft1"), to_end() ] def main(): namefile = str(sys.argv[0]).split('.')[0] to_generate(arch, namefile + '.tex' ) if __name__ == '__main__':     main()
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!

Netron
Github 地址:
  • https://lutzroeder.github.io/netron/
畫圖工具體驗地址:
  • https://www.lutzroeder.com/ai/netron/

Netron是一個神經網路視覺化包,支援絕大多數神經網路操作。該功能包可以為不同節點顯示不同的顏色,卷積層用藍色顯示,池化層和歸一化層用綠色顯示,數學操作用黑色顯示。
      
一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!


在使用方面,你可以直接訪問網頁端,上傳模型檔案,就可以看到網路結構圖,並可以進一步利用pip安裝並引入到程式中通過瀏覽器檢視模型的變化。

如果你想追求個性化設定,可以在Github上下載原始碼修改相應的設定。如埠後的修改可以在src/__init__.py中修改,字型顏色可以在src/view-grapher.css中修改。效果如下圖所示:


一圖抵千言 | 神經網路繪圖篇!涵蓋NN-SVG、PlotNeuralNet、Netron等軟體!
篇幅原因,小助手就不一一為大家羅列了,快去親自動手試一試吧

當然,還有之前極驗為大家整理的大規模圖視覺化工具 研究圖的小夥伴們也操練起來!

相關文章