MatConvnet工具箱使用手册翻译理解一

来源:互联网 发布:仓库出入库软件 编辑:程序博客网 时间:2024/05/17 06:32

转载自:http://blog.csdn.net/enjolras_fuu/article/details/53676046

概述

MatConvNet是用于MATLAB的卷积神经网络(CNN)的实现。工具箱的设计注重简单性和灵活性。它将CNN的构建块暴露为易于使用的MATLAB函数,提供用于计算具有过滤器组的线性卷积,特征池化等的例程。以这种方式,MatConvNet允许新的CNN快速原型架构;同时,它支持CPU和GPU上的有效计算,允许在大型数据集(如ImageNet ILSVRC)上训练复杂模型。本文档概述了CNN及其在MatConvNet中的实现,并给出了工具箱中每个计算模块的技术细节。

第一章 MatConvNet简介

MatConvNet是一个实现卷积神经网络(CNN)的MATLAB工具箱,被应用于计算机视觉。 自从[8]的突破性工作以来,CNN已经在计算机视觉领域产生重要影响,特别是在图像理解上,基本上取代了传统的图像表示。例如在我们自己的VLFeat [11]开源库中实现的图像表示。

虽然大多数CNN是通过组合简单的线性和非线性滤波操作获得的,诸如卷积和整形,它们的却并非微不足道。原因是CNN需要从大量的数据,通常是数百万的图像中学习,需要非常有效的实现。 作为大多数CNN库,MatConvNet通过使用各种优化,主要是通过支持GPU上的计算来实现这一点。

存在许多其他机器学习,深度学习和CNN开源库。引用一些最流行的:像CudaConvNet,Torch,Theano,Caffe。 许多这些库得到很好的支持,有几十个积极的贡献者和大量的用户基础。 因此,为什么要创建另一个库?

开发MatConvNet的关键动机是为研究人员提供一个特别友好和有效的环境,以便在其研究中使用。MatConvNet通过其在MATLAB环境中的深度集成实现了这一点,MATLAB环境是计算机视觉研究以及许多其他领域中最受欢迎的开发环境之一。特别地,MatConvNet公开了简单的MATLAB命令CNN构建块,如卷积,归一化和合并(第4章); 这些可以组合和扩展以轻松创建CNN架构。虽然有许多这样的模块,使用用C ++和CUDA(第1.4节)编写优化的CPU和GPU实现,但是MATLAB本身支持GPU计算意味着通常可以在保持计算效率的同时在MATLAB中直接写入新的块。与使用低级语言编写新的CNN组件相比,这是一个重要的简化,可以显着加速测试新的想法的速度。使用MATLAB还提供了一个连接到其他领域的桥梁;例如,MatConvNet最近被亚利桑那大学用于行星科学,正如NVIDIA的博客文章中所总结的。

MatConvNet可以从数以百万计的图像学习大型CNN模型,如AlexNet [7]和非常深的网络[9]。这些强大模型中的几个的预训练版本可以从MatConvNet主页下载。虽然功能强大,MatConvNet仍易于使用和安装。 实现是完全独立的,只需要MATLAB和兼容的C ++编译器(使用GPU代码需要免费提供的CUDA DevKit和合适的NVIDIA GPU)。可以使用三个MATLAB命令下载,编译和安装MatConvNet。其包括了几个完整功能的示例,演示如何可以学习小型和大型网络。重要的是,几个标准的预训练网络可以立即下载并在应用程序中使用。有一与工具箱一起保留了具有完整的工具箱技术描述的手册[8]。这些特性使MatConvNet在教育背景下非常有用。
MatConvNet是根据BSD类似许可证的开放源代码。 它可以从http://www.vlfeat.org/matconvnet以及从GitHub.10下载。

1.1入门

MatConvNet易于安装和使用。fig1.1提供了一个完整的例子,使用最新一代深卷积神经网络分类图像。 该示例包括下载MatConvNet,编译包,下载预训练的CNN模型,并在MATLAB的一个图像上评估该模型。

在这个例子中的key命令是vl_simplenn,一个用CNN网络和预处理图像im_的包装器作为输入,并且产生结果的结构res作为输出。
该特定包装器可以用于对具有简单结构,即操作链的网络建模。
检查vl_simplenn(在MatConvNet中编辑vl_simplenn)的代码,我们注意到包装器顺序地转换数据,应用由网络配置指定的一些MATLAB函数。这些功能,在第4章中详细讨论,称为“构建块”,并构成MatConvNet的骨干。

虽然大多数块实现简单操作,但他们效率使之不平凡(第1.4节),它们以及支持反向传播(第2.3节)以允许学习CNN。接下来,我们演示如何直接使用这样的构建块之一。 为了该示例考虑使用线性滤波器组对图像进行卷积。首先在MATLAB中读取图像,比如说使用

im=single(imread('peppers.png'))

得到H*W*D矩阵im,其中D = 3是图像中的颜色通道的数量。然后用

f=randn(3,3,3,16,'single')

来创建一个K = 16个随机字母大小为3 * 3的数组。
最后,使用命令

y = vl_nnconv(x,f,[])

将图像与过滤器卷积。 这将产生一个数组y带有K个通道,每个通道用于bank中的每一个。
总代码如下:

% install and compile MatConvNet (run once) untar(['http://www.vlfeat.org/matconvnet/download/'... 'matconvnet1.0beta24.tar.gz']) ; cd matconvnet1.0beta24 run matlab/vl_compilenn % download a pretrained CNN from the web (run once)urlwrite(... 'http://www.vlfeat.org/matconvnet/models/imagenetvggf.mat', ... 'imagenetvggf.mat') ; % setup MatConvNet run matlab/vl_setupnn % load the pretrained CNN net= load('imagenetvggf.mat') ; % load and preprocess an image im=imread('peppers.png') ; im_=imresize(single(im),net.meta.normalization.imageSize(1:2)) ; im_=im_net.meta.normalization.averageImage; % run the CNN res=vl_simplenn(net,im_) ; % show theclassi cation resultscores=squeeze(gather(res(end).x)) ; [bestScore,best] = max(scores) ;figure(1) ; clf ; imagesc(im) ; title(sprintf('%s (%d), score%.3f',net.classes.descriptionfbestg,best,bestScore)) ; 

结果如下:

这里写图片描述

虽然鼓励用户直接使用块来创建新的架构,但MATLAB提供了包装器,如用于标准CNN架构的vl_simplenn,如AlexNet [7]或Network-in-Network [8]。 此外,库提供了大量示例(在examples /子目录中),包括在MNIST,CIFAR和ImageNet数据集上学习各种模型的代码。
所有这些示例使用examples / cnn_train训练代码,它是随机梯度下降的实现(第3.3节)。虽然这个训练代码是完全可维护的和相当灵活,它仍然在examples /子目录,因为它有点问题特定。 欢迎用户实施他们的优化器。

1.2 MatConvNet一目了然

MatConvNet具有简单的设计理念。 它不是将CNN包裹在软件的复杂层上,而是暴露了直接作为MATLAB命令的计算CNN构造块的简单函数,例如线性卷积和ReLU运算符。这些构建块易于组合成完整的CNN,并且可以用于实现复杂的学习算法。虽然提供了小型和大型CNN架构和培训例程的几个现实例子,但是总是可以回到基础并构建自己的网络,利用MATLAB在原型中的效率。通常不需要C编码来尝试新的体系结构。 因此,MatConvNet是计算机视觉和CNNs研究的理想操练场。
MatConvNet包含以下元素:

CNN计算块

一组计算CNN的基本构建块的优化例程。
例如,卷积块由

y = vl_nnconv(x,f,b) 

实现,其中x是图像,f是过滤器组,b是偏移矢量(第4.1节)。
导数计算为

[dzdx,dzdf,dzdb] = vl_nnconv(x,f,b,dzdy) 

其中dzdy是CNN输出w.r.t y的导数(第4.1节),第四章详细描述所有块。

CNN封装

MatConvNet提供了一个简单的包装器,由vl_simplenn调用,实现具有线性拓扑(一个块链)的CNN。
它还提供了一个更加灵活的包装器,支持具有任意拓扑的网络,封装在dagnn,DagNN MATLAB类中。

示例应用程序

MatConvNet提供了几个在MNIST,CIFAR10和ImageNet数据上学习具有随机梯度下降和CPU或GPU的CNN的示例。

预训练模型

MatConvNet提供了几种先进的预先训练的CNN模型,可以用于现成的,用于分类图像或在Caffe或DeCAF的精神下产生的图像编码。

1.3 文档和示例

有关MatConvNet的三个主要信息来源。
第一,网站包含所有功能的描述和几个例子和教程。
第二,有一个PDF手册,其中包含大量有关工具箱的技术细节,包括构建块的详细数学描述。
第三,MatConvNet附有几个例子(第1.1节)。

大多数示例是完全自包含的。
例如,为了运行MNIST示例,它将MATLAB指向MatConvNet根目录,并键入addpath <-examples,后跟cnn_mnist。
由于问题大小,ImageNet ILSVRC示例需要一些更多准备,包括下载和预处理图像(使用捆绑脚本utils /preprocess)

1.5 致谢

MatConvNet是一个社区项目,因此感谢所有贡献者。我们衷心感谢NVIDIA支持这个项目,为我们提供了顶级的GPU和MathWorks,以进行关于如何改进库的讨论。
在这个库中的几个CNN计算的实现是受到Caffe库的启发[5](然而,Caffe不是依赖),几个示例网络已经由Karen Simonyan作为[1]和[10]的一部分训练。

手册中给出的参考文献如下:
[1] K. Chat eld, K. Simonyan, A. Vedaldi, and A. Zisserman. Return of the devil in the
details: Delving deep into convolutional nets. In Proc. BMVC, 2014.
[2] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. ImageNet: A Large-Scale
Hierarchical Image Database. In Proc. CVPR, 2009.
[3] R. Girshick. Fast R-CNN. In arXiv, number arXiv:1504.08083, 2015.
[4] S. Io e and C. Szegedy. Batch normalization: Accelerating deep network training by
reducing internal covariate shift. CoRR, 2015.
[5] S. Io e and C. Szegedy. Batch Normalization: Accelerating Deep Network Training by
Reducing Internal Covariate Shift. ArXiv e-prints, 2015.
[6] Yangqing Jia. Ca e: An open source convolutional architecture for fast feature embed-
ding. http://caffe.berkeleyvision.org/, 2013.
[7] D. B. Kinghorn. Integrals and derivatives for correlated gaussian fuctions using matrix
di erential calculus. International Journal of Quantum Chemestry, 57:141{155, 1996.
[8] A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classi cation with deep convo-
lutional neural networks. In Proc. NIPS, 2012.
[9] Min Lin, Qiang Chen, and Shuicheng Yan. Network in network. CoRR, abs/1312.4400,
2013.
[10] G. Marsaglia and W. W. Tsang. The ziggurat method for generating random variables.
Journal of statistical software, 5(8):1{7, 2000.
[11] K. Simonyan, A. Vedaldi, and A. Zisserman. Deep inside convolutional networks: Visu-
alising image classi cation models and saliency maps. In Proc. ICLR, 2014.
[12] K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image
recognition. 2015.
[13] A. Vedaldi and B. Fulkerson. VLFeat { An open and portable library of computer vision
algorithms. In Proc. ACM Int. Conf. on Multimedia, 2010.
[14] M. D. Zeiler and R. Fergus. Visualizing and understanding convolutional networks. In
Proc. ECCV, 2014.

阅读全文
0 0
原创粉丝点击