Caffe实战(七):caffe可视化工具

 

1. 数据可视化

在使用caffe进行图像分类,所有数据在预处理时都经历了从图像数据(二进制图像文件如MNIST/CIFAR10,图像格式文件JPEG/PNG)到caffe数据库(LMDB/LEVELDB)的转换,这样做可以提高数据I/O速率,但代价是,开发者无法直接看到数据。
 
通过数据可视化,可以让设计者快速熟悉数据,并根据数据特点设计模型,有助于调试算法、提纯数据。数据是深度学习最重要的信息源,获取高质量的数据往往比设计复杂的模型更有效。

2. 网络结构可视化

在Caffe中,目前有两种可视化prototxt格式网络结构的方法:
  • 使用Netscope在线可视化
  • 使用Caffe提供的draw_net.py
 
使用Netscope绘制出的图直观简洁,易于快速了解网络模型,但是缺少层内的细节信息;
使用draw_net.py绘制出的结构图保存了参数信息,细节更丰富,但是结构不是很清晰明了,这一点在大型模型上的体现尤为明显。
 

1.1 在线可视化工具

深度学习网络结构画图工具(写文章,画图可参考)
类似这种
 
Netscope:caffe网络结构在线可视化工具
  
Netscope是一个支持prototxt格式描述的神经网络结构的在线可视工具,网址:http://ethereon.github.io/netscope/quickstart.html
它可以用来可视化Caffe结构里prototxt格式的网络结构,支持从GitHub Gist或者编辑器中可视化Caffe的网络结构。
 
使用起来也非常简单,打开这个地址,点击Launch Editor,把你的描述神经网络结构的prototxt文件内容复制到编辑框里(左侧),按shift+enter,就可以直接以图形方式显示网络的结构。
 
Netron网络结构在线可视化工具
 
支持多种模型的可视化,包括caffe,tensorflow, ONNX等等.
 
 
神经网络训练可视化
 
这个网站可以十分清晰的看到神经网络的训练与工作过程,而且该工具支持删除和添加神经元、隐藏层,能够调节训练集的比例。
 
卷积神经网络可视化
 
这个网站是CS231n的讲师karpathy做的一个网站,里面有好多有意思的东西。其中包括CIFAR-10数据集的训练过程,可以可是化的看到每一层卷积处理过的图
网站地址:http://cs.stanford.edu/people/karpathy/ (karpathy的个人网站)
 
LeNet网络结构可视化
 
这个网站做了一个手写数字识别的可视化,效果不错。
 
深度学习可视化工具Visual DL
 
Visual DL是百度开发的,基于echar和PaddlePaddle,支持PaddlePaddle,PyTorch和MXNet等主流框架。可惜不支持caffe和tensorflow。
 
结构可视化工具PlotNeuralNet
 
萨尔大学计算机科学专业的一个学生开发。
 
CNN Explainer(功能化很强大,能够看到每个卷积核处理过程)
 
CNN Explainer 使用 TensorFlow.js 加载预训练模型进行可视化效果,交互方面则使用 Svelte 作为框架并使用 D3.js 进行可视化。

1.2 使用caffe自带的python/draw_net.py绘制网络模型工具

python/draw_net.py用来绘制网络模型的。在绘制之前,生成caffe的python接口(pycaffe),并需要安装两个库:GraphViz和pydot。 
 
Graphviz是贝尔实验室开发的一个开源的可视化软件,能够以抽象的图和网络表示结构信息,支持多种格式输出,如各种常见的图片格式(bmp、png等),PDF,SVG等,广泛使用于网络,生物信息学,软件工程等领域。Graphviz使用dot作为脚本语言,只需要在dot脚本中定义图的顶点和边,以及形状、颜色、字体、填充等样式,Graphviz就可以使用合适的布局算法对图形布局,使各顶点均匀分布在画布上,并且尽可能的减少边的交叉。
下载地址:  http://www.graphviz.org/
 
pydot模块提供了python对graphviz dot语言的接口,使在python下可以调用graphviz工具绘图。

Linux平台操作说明

在Linux平台上编译pycaffe可以参考 Caffe实战(四):pycaffe和matcaffe接口编译

安装graphviz和pydot都比较简单,网上也有很多资料可以参考。下面以在ubuntu上的安装操作进行介绍(还未验证)
 
【安装可视化软件包】  
安装GraphViz
# sudo apt-get install GraphViz
注意,这里用的是apt-get来安装,而不是pip.
 
安装pydot
# sudo pip install pydot
用的是pip来安装,而不是apt-get
 
【可视化工具:draw_net.py】
 
draw_net.py执行的时候带三个参数:
  • 第一个参数:网络模型的prototxt文件
  • 第二个参数:保存的图片路径及名字
  • 第二个参数:--rankdir=x , x 有四种选项,分别是LR, RL, TB, BT 。用来表示网络的方向,分别是从左到右,从右到左,从上到小,从下到上。默认为LR。
 
例如绘制lenet网络模型
python python/draw_net.py examples/mnist/lenet_train_test.prototxt netImage/lenet.png --rankdir=BT
 

Windows平台操作说明

windows平台下的操作比较复杂,而且还有很多的坑,尤其是版本不一致时,遇到各种问题。
 
关于windous平台编译pycaffe的方法参考: Caffe实战(四):pycaffe和matcaffe接口编译
 
【安装可视化工具依赖包】
 
情形一:安装了anaconda for python2.7
 
此时不能直接运行cmd窗口,因为这样调出来的是电脑单独安装的python版本(我的系统安装的是python3.6)
此时需要打开anaconda prompt窗口(可以可以看做是cmd窗口),这里才是python2.7环境。
conda install pydot-ng
conda install graphviz
 
情形二:电脑安装了python2.7
 
下载GraphViz windows版本,安装之后记得将.../bin目录添加到环境变量里,让系统可以找到graphviz的相关文件。
 
#安装pydot
pip install pydot
#安装protobuf
pip install protobuf
#安装scikit-image
pip install scikit-image
#安装sciphy
pip install scipy

 

这里特别要注意的是,先安装GraphViz,并添加环境变量,然后在安装pydot,否则会提示“dot”not found in path 的问题。
 
【可视化工具:draw_net.py】
 
同样分两种情况:
  • 如果安装了anaconda,则在anaconda prompt窗口执行;
  • 如果安装了python2.7,则在cmd窗口内执行。
 
#编写一个cmd脚本
python python/draw_net.py examples/mnist/lenet_train_test.prototxt netImage/lenet.png --rankdir=BT
只要记住一点:哪个里面有python2.7环境,在哪个里面执行。

3. 网络权值可视化

判断模型优劣的第二种方法是对训练后的模型权值进行可视化。
 
卷积层权值可视化十分有用,因为经过良好训练的网络权值通常表现为美观、光滑的滤波器;反之,如果表现为噪声图样,则可能意味着网络还没有经过足够长时间的训练,或者由于正则化强度过小导致网格出现过拟合。通常第一个卷积层是最容易解释额,因为它直接“看”原始像素。
 
由于需要获得网络模型以及网络权值参数等信息,需要提供matlab接口的caffe,即编译生成matcaffe。编译matcaffe接口的操作参考:Caffe实战(四):pycaffe和matcaffe接口编译
 

4. 特征图可视化

可视化网络在前向传播阶段的各层的响应,这样可以很容易看出危险的错误信号,比如对于多个不同的输入,一些响应特征图全为零,于是可以检测“死”滤波器,可能是学习速率过高的症状。
 
通过观察每层的响应特征图,可以判断模型的结构设计(如每层通道数目)是否合理,如果大量的响应特征图都重复出现或全为接近0的值,则可以减少通道数以提高网络效率。
 
一般情况:底层响应特征图关注图像中不同细节(背景或主体的纹理或轮廓),而高维响应特征图变得局部且稀疏,用于剔除不相关内容并提取目标重要的特征。
 
 
参考资料
 
 
 

posted on 2021-04-18 23:04  悬崖边上打坐  阅读(749)  评论(0编辑  收藏  举报

导航