matconvnet安装教程可以将特征矩阵作为输入么

c++ - error on compiling matconvnet - Stack Overflow
Join the Stack Overflow Community
Stack Overflow is a community of 7.1 million programmers, just like you, helping each other.
J it only takes a minute:
After following
to compile matconvnet.
when I run run matlab/vl_compilenn in matlab, I receive the following error:
Error using vl_compilenn&check_clpath (line 577)
Unable to find cl.exe
Error in vl_compilenn (line 400)
check_clpath(); % check whether cl.exe in path
Error in run (line 96)
evalin('caller', [script ';']);
Error is related to cl.exe which seems like Visual C++ compiler. I have Windows updated with bunch of 'Microsoft Visual c++ redistribuibile' already installed.
I have Matlab 2016a on Windows 7
5,14053677
Know someone who can answer? Share a link to this
via , , , or .
Your Answer
Sign up or
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Post as a guest
By posting your answer, you agree to the
Browse other questions tagged
rev .25886
Stack Overflow works best with JavaScript enabledMatConvNet是实现计算机视觉中卷积神经网络(Convolutional Neural Networks,CNN)的MATLAB工具箱。 同CAFFE相比,MatConvNet更容易配置与使用。以下对MatConvNet工具箱的配置做较为简要的笔记。本机配置:Ubuntu 14.04 + MATLAB 2014A + Cuda 6.5 & &主要步骤:在以上配置基础上,配置MatConvNet的主要步骤如下:1 安装libjpeg:sudo apt-get install libjpeg-dev2 修改MatConvNet工具包下的makefile:ENABLE_GPU ?= yENABLE_IMREADJPEG ?= yARCH ?= glnxa64CUDAROOT ?= /usr/local/cuda-6.5MATLABROOT ?= /usr/local/MATLAB/R2014a运行: % setup MtConvNet in MATLABrun matlab/vl_setupnn% download a pre-trained CNN from the weburlwrite('http://www.vlfeat.org/sandbox-matconvnet/models/imagenet-vgg-f.mat', ... 'imagenet-vgg-f.mat') ;net = load('imagenet-vgg-f.mat') ;% obtain and preprocess an imageim = imread('peppers.png') ;im_ = single(im) ; % note: 255 rangeim_ = imresize(im_, net.normalization.imageSize(1:2)) ;
%resize为224*224大小的矩阵im_ = im_ - net.normalization.averageI
%averageImage代表ImageNet统计到的图像均值信息,为224*224*3的矩阵&pre % run the CNNres = vl_simplenn(net, im_) ;% show the classification resultscores = squeeze(gather(res(end).x)) ;[bestScore, best] = max(scores) ;figure(1) ; imagesc(im) ;title(sprintf('%s (%d), score %.3f',...net.classes.description{best}, best, bestScore)) ;其中,imagenet-vgg-f.mat可以采用其它下载方式。参考:http://www.vlfeat.org/matconvnet/install/
最新教程周点击榜
微信扫一扫3933人阅读
deep learning(1)
vlfeat工具包发布了他们的Deep Learning 的工具包MatConvNet,由于目前只提供了Linux和Mac上可以编译通过的版本,该工具包的主页是:,并且提供几个已经训练好的CNN网络模型。
经过一上午的小修改,终于将这个工具包的成功的编译可以在Windows底下可以运行的CPU版本。对于GPU的版本由于需要Matlab 2014版本,而本人的Matlab是2012版本,所以就没有继续去进行编译。还有另外一个原因,对于大规模的训练CNN网络,一般都是放在Linux服务器上进行训练的,所以对于平常只使用已经训练好的模型,进行测试实验,仅使用CPU基本就已经够用了。
这个网站提供使用VS2010编译Matlab的普通mewx以及支持CUDA的动态链接的vs模板,可以直接下载使用:
个人的已经修改好的VS2010的工程文件,可以在这个链接进行下载:
链接:&密码:ieu4
在使用的过程中需要对一些包含include, lib的路径进行修改。
以及编译好的mex文件
链接:&密码:h6tz
可以直接下载拷贝到:&matconvnet-1.0-beta7\matlab\mex&目录下
如果需要自己一步一步进行实现,可以参考下面的步骤。
简单介绍一下我使用的环境是VS2010 + Matlab 2012a , 64位win7系统。
具体的编译过程如下:
1. 使用VS2010创建一个MFC的DLL工程
将&matconvnet-1.0-beta7\matlab\src&目录底下的所有文件及文件夹拷贝到我们新建的VS工程文件目录底下。 &&&
&&&&&(1)在工程名字上右键,选择最下面的Properties, 点击最顶上的Configuration Manager按钮, Active solution platform新建一个x64,并选择Release。
&&&&(2) Properties -& Configuration Properties -& General -& Target Extension改为 .mexw64
&&&&(3) Properties -& Configuration Properties -& C/C++ -& Additional Include Directories添加
&&$(matlabroot)\extern\include &&其中$(matlabroot)是你电脑上matlab的安装路径
&&&&&&&&&&&&&可以在电脑的环境变量中新建一个matlabroot变量,指向matlab的安装目录
&&&&(4)Properties -& Configuration Properties -& Linker -& Additional Dependencies中添加
$(matlabroot)\extern\lib\win64\microsoft\libmx.lib
$(matlabroot)\extern\lib\win64\microsoft\libmex.lib
$(matlabroot)\extern\lib\win64\microsoft\libmat.lib
$(matlabroot)\extern\lib\win64\microsoft\libmwblas.lib
&&&&(5)点击Source目录下的 *.def文件,
&EXPORTS&改为&EXPORTS mexFunction
2. &编译vl_nnconv.cu , &vl_nnnormalize.cu ,&vl_nnpool.cu&&
对于这三个文件,采用单独的方式一个一个进行编译。&
首先编译 vl_nnconv.cu, Source Files上右键 Add -& Existing Items 添加 vl_nnconv.cu,后缀名改为.cpp, 并将Project的名字改为vl_nnconv。&
其次是编译&vl_nnnormalize.cu, Source Files上右键 Add -& Existing Items 添加&vl_nnnormalize.cu,后缀名改为.cpp, vl_nnconv.cpp上右键 Remove, 并将Project的名字改为vl_nnnormalize。
最后是编译&vl_nnpool.cu, Source Files上右键 Add -& Existing Items 添加&vl_nnpool.cu,后缀名改为.cpp,&vl_nnnormalize.cpp上右键
Remove, 并将Project的名字改为vl_nnpool。
编译过程中出现的错误:
(1). &对于bits文件夹里面的每一个cpp文件,记得在开始的部分加上#include &stdafx.h&
(2). &对于bits\normalize.cpp没有“x86intrin.h”头文件的错误,可参照下面的链接中对应的VS版本以及CPU进行修改。
(3). &对于bits\normalize.cpp(352): error C2219: syntax error : type qualifier must be after '*',直接将restrict移动动*之后。
3. &编译vl_imreadjpeg
最后是编译vl_imreadjpeg.c这个文件,首先将MFC DLL的工程的名字重命名为“vl_imreadjpeg&,并将vl_imreadjpeg.c的后缀名改为.cpp, 并添加 #include &stdafx.h&
需要libjpeg和pthread的支持
(1)对于libjpeg我是直接拷贝了opencv中的libjpeg的里面的所有文件,链接:&密码:bvng
&&&将整个文件夹拷贝到整个工程的文件目录底下,VS的工程上右键 Add -& New Filter 输入(libjpeg), &然后在libjpeg上右键 Add -& Existing Item将libjpeg文件底下的所有文件都添加进来,但需要Remove掉jmemansi.c这一个文件。选中libjpeg底下所有的.c文件,右键
Properties -& C/C++ &-& Precompiled Header -&Precompiled Header &选中“Not Using Precompiled Headers”
(2)pthread可以在这个地址进行下载
Properties -& Configuration Properties -& C/C++ -& Additional Include Directories添加
&&&&&&D:\Toolbox\pthreads-w32-2-9-1-release\Pre-built.2\include
Properties -& Configuration Properties -& Linker -& Additional Dependencies中添加
&&&&&&&D:\Toolbox\pthreads-w32-2-9-1-release\Pre-built.2\lib\x64\pthreadVC2.lib
将蓝色部分改为对应的目录。
在编译的过程中可能会出现的一些错误及修改方法。
(1) 对于错误&bits\pooling.cpp(52): error C2589: '(' : illegal token on right side of '::' ,主要是有std::max与系统中max宏冲突,将std::max加上括号(std::max)。 以及文件中的std::min改为(std::min)。
(2) &vl_imreadjpeg.cpp(157): error C3861: 'snprintf': identifier not found, 将snprintf改为_snprintf
(3) &vl_imreadjpeg.cpp(325): error C2440: '=' : cannot convert from 'void *' to 'Reader *',&
readers[r] = malloc(sizeof(Reader)) ; 在malloc加上相应的指针类型强制转换。readers[r] = (Reader*)malloc(sizeof(Reader)) ; 对于几处相应的错误采用同样的处理方法。
(4) &vl_imreadjpeg.cpp(211): error C2219: syntax error : type qualifier must be after '*'
&JSAMPROW __restrict scanline = scanlines[dy] + 3*
改为&JSAMPLE FAR * __restrict scanline = scanlines[dy] +
4. 最后就是进行测试了:
(1)将编译好的vl_imreadjpeg.mexw64,&vl_imreadjpeg.mexw64, &vl_nnnormalize.mexw64,&vl_nnpool.mexw64复制到“matconvnet-1.0-beta7\matlab\mex&目录底下
(2) 进入toolbox的matlab目录,运行vl_setupnn.m, 然后再输入vl_test_nnlayers命令如果可以正确运行那么就说明编译成功。
(3)在&examples&目录下运行“cnn_imagenet_minimal.m”,会自动下载VGG实验室已经训练好的一个模型,下载过程可能需要一段时间。
测试这张图片“pepper.png”,可以看到图片上的输出结果“Bell Pepper, Score 0.704”
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14644次
排名:千里之外
转载:12篇
(1)(2)(13)(2)(1)您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
MatConvNet_CNN分类教程.docx 12页
版权归作者和本站网站所有,维权必究
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
此文档为付费文档,你可以预览5页,更多阅读请点击 “我要付费阅读”!
需要金币:100 &&
作者姓名:金忍
个人介绍:北理工学生
你可能关注的文档:
VGGCNN分类问题实用教程1CNN构建模块1.1卷积一个前向神经网络可想象成一系列函数的组合每个函数把一个数据向量和一个参数向量作为输入,并输出一个数据向量。通常函数的类型和序列是人工设定的,参数则是在训练数据中学习得到的,为了解决一个目标问题,如图像或语音分类。在卷积神经网络中,数据和函数有着额外的结构。数据是图像,语音,或一般来说,矩阵到一个或多个实数的映射。特别的,本文教程中主要关注计算机视觉的应用,数据将是2D像素矩阵。形式上,每个将是一个的实矩阵,个像素,每个像素个通道。这里,前两维为空间域,最后一维是通道。注意只有网络的输入为一幅真实图像,其他的数据都是间接特征图。CNN的第二个属性就是函数有一个卷积的结构。这意味着作用于具有局部性和平移不变性。在下面卷积操作的例子中,我们将对输入作用多个不同的卷积操作。这一部分,我们将介绍卷积和非线性模块。首先来介绍常规的线性卷积,使用多个不同的卷积核。我们将这一操作表示为如下的函数关系:执行如下的MATLAB代码。%Readanexampleimagex=imread('peppers.png');%Converttosingleformatx=im2single(x);%Visualizetheinputxfigure(1);imagesc(x)得到如下所示的图像。现在我们来创建10个的卷积核。%Createabankoflinearfiltersw=randn(5,5,3,10,'single');输入图像和卷积核都是单精度浮点型(single)。注意到w有4维,共10个卷积核。卷积核是3维的,并不是2维的。下面我们使用MatConvNet中的vl_nnconv函数,将图像与w进行卷积操作。%Applytheconvolutionoperatory=vl_nnconv(x,w,[]);变量y包含卷积的输出结果。注意到卷积核是3维的,将直接作用于的个通道。进一步说,这样的个卷积核,生成维的,如下。我们来显示卷积的结果y。使用vl_imarraysc函数来显示y的每个通道:%Visualizetheoutputyfigure(2);vl_imarraysc(y);结果如下:卷积操作可以保持输入特征的分辨率。但是有时候需要将输出降采样。这可以使用vl_nnconv函数中的stride参数。%Tryagain,downsamplingtheoutputy_ds=vl_nnconv(x,w,[],'stride',16);figure(3);vl_imarraysc(y_ds);注意到上文的一个问题,直接将卷积核与图像卷积,会忽略特征与边界的地方。使得输出图与卷积核的比例小于输入图。为了解决这一问题,可以使用vl_nnconv函数中的pad参数。使用stride参数和pad参数的结果如下所示。为了巩固目前学到的,我们来手动定义一个卷积核:w=[010;1-41;010];w=single(repmat(w,[1,1,3]));y_lap=vl_nnconv(x,w,[]);figure(5);subplot(1,2,1);imagesc(y_lap);title('filteroutput');subplot(1,2,2);imagesc(-abs(y_lap));title('-abs(filteroutput)');结果如下。1.2非线性门(non-lineargating)如前文介绍的,CNN由许多不同的函数构成。除了前面提到的线性函数,还有许多非线性函数。最简单的非线性函数,是在线性函数之后加入一个非线性门。对于输入的每一个像素进行处理。这个最简单的函数就是修正线性单元(ReLU)。这个函数的实现是vl_relu;运行如下的代码:w=single(repmat([10-1],[1,1,3]));w=cat(4,w,-w);y=vl_nnconv(x,w,[]);z=vl_nnrelu(y);figure(6);subplot(1,2,1);vl_imarraysc(y);subplot(1,2,2);vl_imarraysc(z);结果如下。1.3池化(pooling)池化是CNN中的一个重要操作。池化操作作用于每个独立的特征通道。将临近的特征用一种合适的方法结合。通常的选择是max-pooling或sum-pooling。以max-pooling为例,定义如下:Max-pooling的实现是vl_nnpool函数。执行如下代码:y=vl_nnpool(x,15);figure(6);imagesc(y);结果如下。函数vl
正在加载中,请稍后...matconvnet(30)
首先新建cnn_plate_setup_data.m文件,读取相应的图片和标签,并减去均值。
function imdb =cnn_plate_setup_data(datadir)
inputSize =[20,20,1];
subdir=dir(datadir);
imdb.images.data=[];
imdb.images.labels=[];
imdb.images.set = [] ;
imdb.meta.sets = {'train', 'val', 'test'} ;
image_counter=0;
trainratio=0.8;
for i=3:length(subdir)
imgfiles=dir(fullfile(datadir,subdir(i).name));
imgpercategory_count=length(imgfiles)-2;
disp([i-2 imgpercategory_count]);
image_counter=image_counter+imgpercategory_
for j=3:length(imgfiles)
img=imread(fullfile(datadir,subdir(i).name,imgfiles(j).name));
img=imresize(img, inputSize(1:2));
img=single(img);
imdb.images.data(:,:,:,end+1)=single(img);
imdb.images.labels(end+1)= i-2;
if j-2&imgpercategory_count*trainratio
imdb.images.set(end+1)=1;
imdb.images.set(end+1)=3;
dataMean=mean(imdb.images.data,4);
imdb.images.data = single(bsxfun(@minus,imdb.images.data, dataMean)) ;
imdb.images.data_mean = dataM
还需要设计网络的结构,在cnn_plate_init.m文件里实现:
function net =cnn_plate_init()
rng('default');
net.layers = {};
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{f*randn(3,3,1,20, 'single'), zeros(1, 20, 'single')}}, ...
'stride', 1, ...
'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', ...
'method', 'max', ...
'pool', [2 2], ...
'stride', 2, ...
'pad', 0) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{f*randn(3,3,20,100, 'single'),zeros(1,100,'single')}}, ...
'stride', 1, ...
'pad', 0) ;
net.layers{end+1} = struct('type', 'pool', ...
'method', 'max', ...
'pool', [2 2], ...
'stride', 2, ...
'pad', 0) ;
net.layers{end+1} = struct('type', 'relu') ;
net.layers{end+1} = struct('type', 'conv', ...
'weights', {{f*randn(3,3,100,34, 'single'),zeros(1,34,'single')}}, ...
'stride', 1, ...
'pad', 0) ;
net.layers{end+1} = struct('type', 'softmaxloss') ;
% Meta parameters
net.meta.inputSize = [20 20 1] ;
net.meta.trainOpts.learningRate = logspace(-3, -5, 100);
net.meta.trainOpts.numEpochs = 50 ;
net.meta.trainOpts.batchSize = 1000 ;
% Fill in defaul values
net = vl_simplenn_tidy(net) ;
最后是把这些串联起来,进行训练:
function [net, info] = cnn_plate()
run(fullfile(fileparts(mfilename('fullpath')),...
'..', '..', 'matlab', 'vl_setupnn.m')) ;
datadir='F:\resources\train\数字与字母车牌';
opts.expDir = fullfile(vl_rootnn, 'data', 'plate-baseline') ;
opts.imdbPath = fullfile(opts.expDir, 'imdb.mat');
if exist(opts.imdbPath,'file')
imdb=load(opts.imdbPath);
imdb=cnn_plate_setup_data(datadir);
mkdir(opts.expDir) ;
save(opts.imdbPath, '-struct', 'imdb') ;
net=cnn_plate_init();
net.meta.normalization.averageImage =imdb.images.data_
opts.train.gpus=[];
[net, info] = cnn_train(net, imdb, getBatch(opts), ...
'expDir', opts.expDir, ...
net.meta.trainOpts, ...
opts.train, ...
'val', find(imdb.images.set == 3)) ;%注意这里!!
function fn = getBatch(opts)
% --------------------------------------------------------------------
fn = @(x,y) getSimpleNNBatch(x,y) ;
function [images, labels] = getSimpleNNBatch(imdb, batch)
images = imdb.images.data(:,:,:,batch) ;
labels = imdb.images.labels(1,batch) ;
if opts.train.gpus & 0
images = gpuArray(images) ;
训练好之后写一个识别的demo:
run(fullfile(fileparts(mfilename('fullpath')),...
'..', '..', 'matlab', 'vl_setupnn.m')) ;
addpath ../../data/plate-
datadir='F:\resources\train\数字与字母车牌';
class=2;index=1;
subdir=dir(datadir);
imgfiles=dir(fullfile(datadir,subdir(class+2).name));
img=imread(fullfile(datadir,subdir(class+2).name,imgfiles(index+2).name));
imshow(img);
net=load('net-epoch-10.mat');
im_=single(img);
im_=imresize(im_,net.meta.inputSize(1:2));
im_=im_ - net.meta.normalization.averageI
opts.batchNormalization =
net.layers{end}.type = 'softmax';
res=vl_simplenn(net,im_);
scores=squeeze(gather(res(end).x));
[bestScore,best]=max(scores);
disp(subdir(best+2).name);
disp(bestScore);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:32691次
积分:1129
积分:1129
排名:千里之外
原创:69篇
转载:17篇
译文:15篇
评论:39条
(4)(17)(2)(15)(59)(3)(1)}

我要回帖

更多关于 matconvnet 教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信