MatConvNet深度学习框架简介及GPU使用注意事项

        MatConvNet是一个基于Matlab的深度学习框架,在计算部分,最底层混编了C/C++或者CUDA C,这使得其速度并不是特别慢。就使用体验来说,MatConvNet是非常优秀的,借助于Matlab,定义网络,使用现有模型以及数据可视化都非常方便。

        由于MatConvNet文档和Demo都比较完备,所以这篇博客主要介绍一些GPU的配置细节。


一、MatConvNet简介

1. 官网资料

2. 运行已有模型

        当年做VggNet的那帮人用最顶配的GPU集群训练了一个多月,我们要在个人电脑上训练VggNet估计要等到量子计算机出来。于是我们可以直接在官网下好别人训练好的模型,然后对自己的图像进行前向传输,获取各个层的输出值。

        使用MatConvNet,这一切将非常方便。(链接到官网)

addpath('matlab');

enableGPU = true;
%vl_compilenn('enableGPU', enableGPU, 'enableCudnn', true);
net = load('../../models/imagenet-vgg-verydeep-19.mat');

im = imread('../../data/bw.bmp');
im = single(im);
im = imresize(im, net.meta.normalization.imageSize(1:2));
%im = im - net.meta.normalization.averageImage;
if enableGPU
    net = vl_simplenn_move(net,'gpu');
    im = gpuArray(im);
end

res = vl_simplenn(net, im);

        上面的GPU、cudnn选项关闭,可以直接使用CPU运行。

        这里注意,模型文件的格式在beta17版本改变过一次,所以最好在官网下载最新版本的代码和模型文件


二、GPU使用注意事项

        1. 如果要使用GPU的话,那么你需要编译GPU版本,设置GPU编译选项

        2. 如果你使用cuda8.0,同时MatConvNet版本在beta22以下,你需要修改源代码,matlab/scr/bits/impl/文件夹下的pooling_gpu.cu第165行的 atomicAdd函数 和 biliinearsamper_gpu.cu第26行的atomicAdd函数。

        3. 如果使用cudnn,记得设置cudnn路径(默认在local/cudnn),然后还要记得把cudnn的cudnn64_5.dll放到mex文件夹下,或者dll所在bin目录加入环境变量下。

        4. 网络模型和图像数据等变量,需要转化为gpuArray类型,对于网络模型,提供了一个函数vl_simplenn_move(net, ‘gpu’),对于返回的值,同样也需要从gpuArray类型变回single类型。

发表评论