matconvnet是一个实现卷积神经网络(CNN)的MATLAB工具箱,用于计算机视觉应用。
自从[7]的突破性工作以来,CNN已经有了计算机视觉的主要影响,特别是图像的理解,基本上是取代传统的图像表示,例如在我们自己的VLFeat
[12]中实现的源库。
虽然大多数CNN是通过组合简单的线性和非线性滤波操作(例如卷积和整形(rectification))获得的,但是它们的实现是非常有意义的。
原因是CNN需要从大量的数据(通常是数百万的图像)中学习,需要非常有效的实现。
作为大多数CNN库,MatConvNet通过使用各种优化,主要是通过支持GPU上的计算来实现这一点。
现如今存在许多其他机器学习,深度学习和CNN开源库。引用一些最受欢迎的:CudaConvNet[1],Torch[2],Theano[3],
Caffe[4]。 许多这些库得到很好的支持,有几十个活跃的贡献者和大量的用户基础。因此,为什么要创建另一个库?
开发MatConvNet的关键动机是为研究人员提供一个特别友好和有效的环境,以便在其调查中使用.MatConvnet通过其在MATLAB环境中的深度集成实现了这一点。这是计算机视觉研究以及许多其他领域最受欢迎的开发环境之一。特别是,MatConvNet公开了简单的MATLAB命令CNN构建块。如卷积,归一化和池化(第4章);这些块可以很容易地组合和扩展以创建CNN体系结构。虽然许多这样的块使用用C
++和CUDA编写的优化的CPU和GPU实现(第1.4节)。
MATLAB本机支持GPU计算意味着通常可以在MATLAB中直接写入新块,同时保持计算效率。与使用低级语言编写新的CNN组件相比,这是一个重要的简化,可以显着加速测试新的想法。使用MATLAB还提供了一个到其他领域的桥梁;
例如,MatConvNet最近被亚利桑那大学用于行星科学,如NVIDIA博客网站所述。
MatConvNet可以学习大型CNN模型,如AlexNet
[7]和非常深的网络的[10]。可以从MatConvNet主页下载这些强大模型的预培训版本。 虽然功能强大,MatConvNet仍然易于使用和安装。实现完全独立,只需要MATLAB和兼容的C
++编译器(使用GPU代码需要免费提供的CUDA开发套件和合适的NVIDIA GPU)。如图1所示。
1.1和第1.1节,可以使用三个MATLAB命令下载,编译和安装MatConvNet。包括了几个完整功能的示例,演示如何可以学习小型和大型网络。重要的是,几个标准的预训练网络可以立即下载并在应用程序中使用。与工具箱一起保存具有工具箱的完整技术描述的手册。这些功能使MatConvNet在教育领域也很有用。MatConvNet是根据BSD类似许可证开放源代码。它可以从http://www.vlfeat.org/matconvnet以及从Git
Hub下载。
1.1 开始运行
Mat Conv Net易于安装和使用。
图1.1提供了使用最新一代深卷积神经网络对图像进行分类的完整示例。 该示例包括下载Mat Conv
Net,编译包,下载预训练的CNN模型,以及在MATLAB的某个库存图像上评估后者。
在此示例中的关键命令是vl_simplenn作为CNN的输入的包装器net和预处理图像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')创建一个大小为3×3的K = 16个随机过滤器组。
最后,使用命令y = vl_nnconv(x,f,[])将图像与滤波器进行卷积。
这导致具有K个通道的阵列y,对于组中的每个K滤波器中的一个。(This results in an array y with K
channels, one for each of the K filters in the bank.)
为了鼓励用户直接使用块来创建新的架构,MATLAB提供包装器,如vl_simplenn用于标准CNN架构,如AlexNet
[7]或Network-in-Network [8]。 此外,库提供了许多示例(在examples
/子目录中),包括在MNIST,CIFAR和Image Net数据集上学习各种模型的代码。
所有这些示例使用examples /
cnn_train训练代码,它是随机梯度下降的实现(第3.3节)。
虽然这个训练代码是完全可维护的和相当灵活,它仍然在例子/子目录,因为它有点问题特定。
欢迎用户对他们的实施优化。
http://s5/mw690/002GGaRezy75HcPw3Xu64&690 MATCONVNET介绍" TITLE="第一章 MATCONVNET介绍" />
加载中,请稍候......