概述

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 result

scores=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

由于问题大小,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. Ioe and C. Szegedy. Batch normalization: Accelerating deep network training by

reducing internal covariate shift. CoRR, 2015.

[5] S. Ioe and C. Szegedy. Batch Normalization: Accelerating Deep Network Training by

Reducing Internal Covariate Shift. ArXiv e-prints, 2015.

[6] Yangqing Jia. Cae: 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 dierential 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.

matlab中dzdx,MatConvnet工具箱使用手册翻译理解一相关推荐

  1. 在MATLAB中添加语音处理工具箱(voicebox)

    1. voicebox介绍   voicebox是一个MATLAB中的语音处理工具箱,支持MATLAB6.5以上的版本.其中包含了对语音的分帧处理,滤波,加窗,参数提取等等函数,是语音识别几乎不可缺少 ...

  2. matlab中使用libsvm工具箱训练的svm分类器model保存

    参考自:https://blog.csdn.net/icestone007/article/details/6804150 最近自己做的项目因为用到SVM分类,使用的是matlab中使用libsvm工 ...

  3. MATLAB 中搭建MatConvNet运行环境(调用GPU运行)以及遇到的错误

    安装 MATLAB.VS.CUDA MatConvNet点击下载 我的环境: Windows 10 64bit MATLAB R2014b VS2015 CUDA9.2 1.编译 第一步: >& ...

  4. matlab 整数规划工具箱,Matlab中的YALMIP工具箱 混合整数规划

    YALMIP工具箱 混合整数规划 定义变量: sqdvar()实型 intvar()整型 binvar()0-1型 设定目标函数 : f=目标函数 设定限定条件: F=set(限定条件) 多个限定条件 ...

  5. matlab中模型预测控制工具箱中m文件optimizer代码里面有个built in kalman 的选项

    matlab中MPC工具箱中m文件optimizer代码,看到里面有个"built in kalman "的选项,盲猜是和卡尔曼有关系的吧. 求同行交流呢~QQ 164429350 ...

  6. matlab模糊工具箱使用,MATLAB中模糊神经网络工具箱的使用 - 全文

    前些天把玩了一下MATLAB中神经网络工具箱的使用,忽有"扪参历井仰胁息"之感.别的倒是没什么,只是神经网络的数据组织结构有些"怪异",要是不小心就会导致工具箱 ...

  7. Matlab中安装NURBS工具箱及使用

    文章目录 前言 一.NURBS工具箱的安装 1 打开matlab,点击附加功能 2 输入nurbs 3 下载后压缩包解压 4 将解压后的文件夹放到matlab文件夹的toolbox文件夹里面 5 选择 ...

  8. MATLAB中模糊神经网络工具箱的使用

    前些天小师妹(好吧,我向政府和人民坦白,小师妹是我虚构的)向我请教MATLAB里模糊神经网络工具箱的使用方法,说是没有搜索到好的教程.正所谓'勿以善小而不为',' 我不入地狱谁爱入谁入','天下兴亡匹 ...

  9. matlab中的分类工具箱svm,MATLAB实现多分类和libsvm工具箱的安装使用详解

    首先告诉大家MATLAB现在可以实现多类分类的问题!但是需要借助工具箱! 下面介绍的是台湾林智仁教授的libsvm工具箱在MATLAB中的安装和使用: 安装环境:Win7.Microsoft Visu ...

  10. 如何使用matlab进行模 数转换,如何使用matlab中的ident工具箱进行系统辨识数学模型...

    首先,要取出实验对象的数据,即数据采集,假如有一直流电机,可以通过一系列手段取出电机的输入输出数据, 然后将数据导入matlab中,输入命令ident,打开工具箱,拟合模型: 第一步:在matlab工 ...

最新文章

  1. smartarm3250 performance
  2. bootStrap-treeview插件
  3. SpringBoot升级到2.0后默认时间格式变化_springboot接收date类型参数
  4. 人工智障学习笔记——深度学习(2)卷积神经网络
  5. 全面支持3.0 新华三“力夯”可信计算发展
  6. 一个简易的游戏代码_500 行代码写一个俄罗斯方块游戏
  7. vuejs解析url地址
  8. hdu5481 Desiderium
  9. C#nbsp;Listlt;gt;简单用法
  10. 戴尔PowerEdge 4路服务器全面升级 实现企业应用与核心业务工作负载的优异性能...
  11. 如何对一个普通的Java项目进行打包,打成jar包,idea操作
  12. 2021-09-03101. 对称二叉树
  13. 【java算法】二分查找算法详解
  14. 长江大学计算机地质绘图,石文油气藏地质智能绘图系统
  15. [吐血推荐]超冷笑话集锦!
  16. 手写平衡二叉树(二)
  17. Java发送QQ邮件的3种形式(commons-email)
  18. 希尔贝壳荣获“北京市创新型中小企业”称号
  19. JAVA公益捐赠管理系统_公益组织捐赠系统的设计与实现
  20. Debian系下载deb安装包及依赖包

热门文章

  1. 瑞星企业防毒2010网络版(一)管理中心与客户端部署
  2. 如何通过蓝牙将PC与Windows Mobile 6的手持机连接,方便调试。
  3. 服务器后台运行程序(nohup/screen/tmux)
  4. 用于NIR-II成像的小分子染料(CH1055)
  5. js实现table中td单元格合拼并求和
  6. FPGA 20个例程篇:12.千兆网口实现MDIO接口读写
  7. Google Code 中使用svn工具说明
  8. 卡巴斯基2010激活码
  9. Invalid arguments ' Candidates are: int fseek(__sFILE *, long int, int) '
  10. 正宗eMule官方网站导航