查看原文
其他

【杂谈】一招,同时可视化18个开源框架的网络模型结构和权重

言有三 有三AI 2020-09-07

深度学习开源框架众多,对于开发者来说其中有一个很硬的需求,就是模型结构和权重的可视化。使用过Caffe的同学都因为强大的Netscope可以离线修改实时可视化网络结构而暗爽,那其他的框架怎么样呢?


今天给大家介绍一个可以离线可视化各大深度学习开源框架模型结构和权重的项目,netron


作者&编辑 | 言有三

1 项目介绍

项目开发者Lutz Roeder,一位来自于微软Visual Studio团队的小哥,按照他自己的介绍,就是在家搞点AI tools玩玩。

这是过去一年的contributions,基本就没有停过,这是真正硬核的开源贡献者呀,个人主页https://www.lutzroeder.com/ai,有兴趣可以去瞧瞧。

Netron是他开源的深度学习模型可视化工具,项目地址为:

https://github.com/lutzroeder/netron

目前支持哪些框架呢?


  • ONNX (.onnx, .pb, .pbtxt)

  • Keras (.h5, .keras)

  • Core ML (.mlmodel)

  • Caffe (.caffemodel, .prototxt)

  • Caffe2 (predict_net.pb, predict_net.pbtxt)

  • MXNet (.model, -symbol.json)

  • TorchScript (.pt, .pth)

  • NCNN (.param)

  • TensorFlow Lite (.tflite)

  • PyTorch (.pt, .pth)

  • Torch (.t7)

  • CNTK (.model, .cntk)

  • Deeplearning4j(.zip)

  • PaddlePaddle (.zip, __model__)

  • Darknet (.cfg)

  • scikit-learn (.pkl)

  • TensorFlow.js (model.json, .pb)

  • TensorFlow (.pb, .meta, .pbtxt).


共18个框架,除了chainer,matconvnet等框架基本上把数得上名字的框架一网打尽,下面是ONNX的可视化界面,很visual studio的感觉。

另一方面,小哥哥也是非常的贴心,提供了各大平台的安装包!macOS的.dmg,Linux的.deb,Windows的.exe,还有浏览器版本,Python服务器版本,真是good man,小白们再也不用担心环境配置问题。


2 可视化实验

下面我们就来尝试几个框架的可视化结果,首先要祭出有三AI开源的12大深度学习开源框架的项目,从模型和数据接口定义,到训练测试可视化,提供了全套代码,地址如下:

https://github.com/longpeng2008/yousan.ai

具体的教程大家可以跳转阅读原文。

这12个框架我们都使用一个3层的卷积模型来完成一个图像分类问题,下面挑选其中几个常用的来体验可视化效果。


2.1 Caffe


Caffe模型可视化的输入可以是prototxt文件和caffemodel文件。下面首先分别可视化训练网络和测试网络train.prototxt和deploy.prototxt,结果如下:

比起Netscope,是不是效果也不遑多让。如果想要查看某一个网络层的细节,就可以点击该网络层,结果如下,所有网络配置参数细节皆可见,完美!

这就是全部了吗?当然不,你还可以直接载入.caffemodel权重文件,直接查看每一个网络层的权重!


老司机们可以从中简单统计权重的分布,还可以一键导出参数为npy文件,看到那个保存小按钮没有,这就是细节,不得不再次给小哥哥点赞👍👍👍

2.2 keras


keras的可视化输入是json格式的模型文件,可以通过model.to_json()将模型存储下来,然后载入.json文件。

如果想查看权重,就载入.h5文件,结果如下,虽然没有caffe的那么漂亮,也是很直观的,不过权重参数矩阵顺序不太一样。

2.3 tensorflow


要想可视化tensorflow的模型结构,就必须将模型存储为pb格式,这样就能同时保存网络结构和参数了,结果如下。

2.4 pytorch


pytorch的网络结构可视化不支持,不过可以像keras一样查看pt权重文件。如果想可视化网络结构,可以使用yousan.ai项目中pytorch目录下的visualize.py脚本。


2.5 Mxnet


Mxnet通过symbol接口定义网络,网络结构一般存在后缀为symbol.json的文件中,因此载入该文件即可进行可视化。权重的可视化原理类似,就不做赘述。


2.6 Darknet


DarkNet的网络结构定义在cfg文件中,载入该cfg文件即可进行可视化。

其他开源框架的案例,大家可以去下载我们的开源框架项目进行尝试,感谢小哥作出的贡献!

另外再安利一下我们之前的讲述如何绘制更好看的网络结构的文章,一起享用,保证更香。

总结


平时多留意一些好的工具,可以大大提升我们的学习效率,养成好的学习习惯,欢迎大家给我们推荐好的工具,在有三AI知识星球社区也可以一起分享。

有三AI夏季划

有三AI夏季划进行中,欢迎了解并加入,系统性成长为中级CV算法工程师。


转载文章请后台联系

侵权必究

往期精选


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存