win10+caffe-master + VS2013 + Matlab2016a 快速配置+matlab调试
2016-11-12 19:07
435 查看
版权声明:本文为stu_why原创文章,未经博主允许不得转载。stu_why博客地址:http://blog.csdn.net/zpp1994
第53行修改MatlabDir为 E:\Program Files (x86)\MATLAB R2016a,即你的matlab安装路径;
然后右键->属性->生成解决方案;
为了使用caffe的matlab接口,需要添加matlab中的C++头文件mxGPUArray.h,:选中matcaffe项目,右键->属性->配置属性->C/C++->常规->附加包含目录,本人目录:.\MATLAB R2016a\toolbox\distcomp\gpu\extern\include\gpu,
读者照此修改为自己的matlab安装路径即可;最后编译caffe_.cpp,生成caffe_.mexw64,即表明编译成功:
最后,选中caffe.sln下的16个项目,右键->生成解决方案,如下图:
这一过程在本人电脑上十分钟左右,结果如下:
按照这个流程编译下来很少会出现无法解析外部符号问题,出现这种问题有很大可能是静态库没连接好,但是微软的所有库是自动下载的,除非没下载全。还有关于一些.h 头文件未找到,请自行核对此头文件的位置,然后再配置文件中随便找个IncludePath(此includePath必须在编译时候被使用),将路径加进去即可,同时也必须注意是否需要相关的lib文件。不过帮忙配置挺多电脑以后,基本没遇到太多问题。
在matlab中打开classification_demo.m和test.m(test.m为本人自己编写),
设置路径如下:
设置路径后,运行test.m,结果如下:
说明最大分类概率的标签号为282,对应的是n02123045 tabby, tabby cat,即这张图片被分到第282类的概率为0.29848。
第一步
在github上下载Microsoft为Windows用户提供的Caffe for Windows分支,下载链接:https://github.com/microsoft/caffe。下载后解压到你要安装的目录,本人安装目录为E:\Caffe。然后复制Windows下CommonSettings.props.example,后缀改为CommonSettings.props,如下图:第二步
我的电脑无GPU,修改复制过来的CommonSettings.props配置文件如下:CpuOnlyBuild:true;UseCuDNN:false第53行修改MatlabDir为 E:\Program Files (x86)\MATLAB R2016a,即你的matlab安装路径;
第三步
下载Caffe依赖包NugetPackages,下载链接: https://pan.baidu.com/s/1jHWzike 密码: u3tb,下载解压放到与caffe-master并列文件夹即可,如图:第四步
双击Windows下的caffe.sln,选中libcaffe项目,右键->属性->配置管理器->活动解决方案配置为Release,如下图:然后右键->属性->生成解决方案;
为了使用caffe的matlab接口,需要添加matlab中的C++头文件mxGPUArray.h,:选中matcaffe项目,右键->属性->配置属性->C/C++->常规->附加包含目录,本人目录:.\MATLAB R2016a\toolbox\distcomp\gpu\extern\include\gpu,
读者照此修改为自己的matlab安装路径即可;最后编译caffe_.cpp,生成caffe_.mexw64,即表明编译成功:
最后,选中caffe.sln下的16个项目,右键->生成解决方案,如下图:
这一过程在本人电脑上十分钟左右,结果如下:
按照这个流程编译下来很少会出现无法解析外部符号问题,出现这种问题有很大可能是静态库没连接好,但是微软的所有库是自动下载的,除非没下载全。还有关于一些.h 头文件未找到,请自行核对此头文件的位置,然后再配置文件中随便找个IncludePath(此includePath必须在编译时候被使用),将路径加进去即可,同时也必须注意是否需要相关的lib文件。不过帮忙配置挺多电脑以后,基本没遇到太多问题。
第五步
运行caffe.cpp,直接双击打开caffe.cpp,然后ctrl+f5直接编译,运行后出现如下命令窗口说明编译成功:第六步 运行matlab实例
配置好Caffe运行所需要的环境变量后(否则matcaffe会运行失败),将\caffe-master\Build\x64\Release添加进系统环境变量,否则matcaffe会运行失败;在matlab中打开classification_demo.m和test.m(test.m为本人自己编写),
classification_demo.m
function [scores, maxlabel] = classification_demo(im, use_gpu) % [scores, maxlabel] = classification_demo(im, use_gpu) % 使用BVLC CaffeNet进行图像分类的示例 % 重要:运行前,应首先从Model Zoo(http://caffe.berkeleyvision.org/model_zoo.html) 下载BVLC CaffeNet训练好的权值 % % **************************************************************************** % For detailed documentation and usage on Caffe's Matlab interface, please % refer to Caffe Interface Tutorial at % http://caffe.berkeleyvision.org/tutorial/interfaces.html#matlab % **************************************************************************** % % input % im color image as uint8 HxWx3 % use_gpu 1 to use the GPU, 0 to use the CPU % % output % scores 1000-dimensional ILSVRC score vector % maxlabel the label of the highest score % % You may need to do the following before you start matlab: % $ export LD_LIBRARY_PATH=/opt/intel/mkl/lib/intel64:/usr/local/cuda-5.5/lib64 % $ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 % Or the equivalent based on where things are installed on your system % % Usage: % im = imread('../../examples/images/cat.jpg'); % scores = classification_demo(im, 1); % [score, class] = max(scores); % Five things to be aware of: % caffe uses row-major order % matlab uses column-major order % caffe uses BGR color channel order % matlab uses RGB color channel order % images need to have the data mean subtracted % Data coming in from matlab needs to be in the order % [width, height, channels, images] % where width is the fastest dimension. % Here is the rough matlab for putting image data into the correct % format in W x H x C with BGR channels: % % permute channels from RGB to BGR % im_data = im(:, :, [3, 2, 1]); % % flip width and height to make width the fastest dimension % im_data = permute(im_data, [2, 1, 3]); % % convert from uint8 to single % im_data = single(im_data); % % reshape to a fixed size (e.g., 227x227). % im_data = imresize(im_data, [IMAGE_DIM IMAGE_DIM], 'bilinear'); % % subtract mean_data (already in W x H x C with BGR channels) % im_data = im_data - mean_data; % If you have multiple images, cat them with cat(4, ...) % Add caffe/matlab to you Matlab search PATH to use matcaffe % if exist('../+caffe', 'dir') % addpath('..'); % else % error('Please run this demo from caffe/matlab/demo'); % end % Set caffe mode if exist('use_gpu', 'var') && use_gpu caffe.set_mode_gpu(); gpu_id = 0; % we will use the first gpu in this demo caffe.set_device(gpu_id); else caffe.set_mode_cpu(); end % Initialize the network using BVLC CaffeNet for image classification % Weights (parameter) file needs to be downloaded from Model Zoo. model_dir = 'E:/Caffe/caffe-master/models/bvlc_reference_caffenet/'; % 模型所在目录 net_model = [model_dir 'deploy.prototxt']; % 模型描述文件,注意是deploy.prototxt,不包含data layers net_weights = [model_dir 'bvlc_reference_caffenet.caffemodel']; % 模型权值文件,需要预先下载到这里 phase = 'test'; % run with phase test (so that dropout isn't applied) % 只进行分类,不做训练 if ~exist(net_weights, 'file') error('Please download CaffeNet from Model Zoo before you run this demo'); end % Initialize a network net = caffe.Net(net_model, net_weights, phase); % 初始化网络 if nargin < 1 % For demo purposes we will use the cat image fprintf('using caffe/examples/images/cat.jpg as input image\n'); im = imread('E:/Caffe/caffe-master/examples/images/cat.jpg'); % 获取输入图像 end % prepare oversampled input % input_data is Height x Width x Channel x Num tic; input_data = {prepare_image(im)}; % 图像冗余处理 toc; % do forward pass to get scores % scores are now Channels x Num, where Channels == 1000 tic; % The net forward function. It takes in a cell array of N-D arrays % (where N == 4 here) containing data of input blob(s) and outputs a cell % array containing data from output blob(s) scores = net.forward(input_data); % 分类,得到scores toc; scores = scores{1}; scores = mean(scores, 2); % 取所有分类结果的平均值 [~, maxlabel] = max(scores); % 找到最大概率对应的标签号 % call caffe.reset_all() to reset caffe caffe.reset_all(); % ------------------------------------------------------------------------ function crops_data = prepare_image(im) % ------------------------------------------------------------------------ % caffe/matlab/+caffe/imagenet/ilsvrc_2012_mean.mat contains mean_data that % is already in W x H x C with BGR channels d = load('E:/Caffe/caffe-master/matlab/+caffe/imagenet/ilsvrc_2012_mean.mat'); mean_data = d.mean_data; IMAGE_DIM = 256; CROPPED_DIM = 227; % Convert an image returned by Matlab's imread to im_data in caffe's data % format: W x H x C with BGR channels im_data = im(:, :, [3, 2, 1]); % permute channels from RGB to BGR im_data = permute(im_data, [2, 1, 3]); % flip width and height im_data = single(im_data); % convert from uint8 to single im_data = imresize(im_data, [IMAGE_DIM IMAGE_DIM], 'bilinear'); % resize im_data im_data = im_data - mean_data; % subtract mean_data (already in W x H x C, BGR) % oversample (4 corners, center, and their x-axis flips) crops_data = zeros(CROPPED_DIM, CROPPED_DIM, 3, 10, 'single'); indices = [0 IMAGE_DIM-CROPPED_DIM] + 1; n = 1; for i = indices for j = indices crops_data(:, :, :, n) = im_data(i:i+CROPPED_DIM-1, j:j+CROPPED_DIM-1, :); crops_data(:, :, :, n+5) = crops_data(end:-1:1, :, :, n); n = n + 1; end end center = floor(indices(2) / 2) + 1; crops_data(:,:,:,5) = ... im_data(center:center+CROPPED_DIM-1,center:center+CROPPED_DIM-1,:); crops_data(:,:,:,10) = crops_data(end:-1:1, :, :, 5);
test.m
clear clc im = imread('E:/Caffe/caffe-master/examples/images/cat.jpg');%读取图片 [scores, maxlabel] = classification_demo(im, 0);%获取得分第二个参数0为CPU,1为GPU maxlabel;%查看最大标签是谁 figure; x=[1:1000]; plot(x,scores);%画出得分情况 axis([1, 1000, -0.1, 0.5]);%坐标轴范围 grid on %有网格 hold on plot(maxlabel,max(scores),'r*'); jieguo=strcat(num2str(maxlabel),','); jieguo=strcat(jieguo,num2str(max(scores))); text(im2double(maxlabel)+20,im2double(max(scores)),jieguo); % [maxv,maxl]=findpeaks(im2double(scores),'minpeakdistance',1); % plot(maxl,maxv,'*','color','R'); %绘制最大值点 fid = fopen('E:/Caffe/caffe-master/data/ilsvrc12/synset_words.txt', 'r'); i=0; while ~feof(fid) i=i+1; lin = fgetl(fid); lin = strtrim(lin); if(i==maxlabel) fprintf('the label of %d is %s\n',i,lin) break end end figure;imshow(im);%显示图片 str=strcat('分类结果:',lin); title(str);
设置路径如下:
设置路径后,运行test.m,结果如下:
说明最大分类概率的标签号为282,对应的是n02123045 tabby, tabby cat,即这张图片被分到第282类的概率为0.29848。
相关文章推荐
- IIS环境下快速安装、配置和调试PHP5.2.0
- IIS环境下快速安装、配置和调试PHP5.2.0
- 【ASP.NET Core快速入门】(七)WebHost的配置、 IHostEnvironment和 IApplicationLifetime介绍、dotnet watch run 和attach到进程调试
- Mac下Uiautomator 快速调试配置
- IIS 环境下快速安装、配置和调试PHP5.2.0 【转】
- 局域网内远程调试命令行快速配置
- IIS环境下快速安装、配置和调试PHP5.2.0
- IIS环境下快速安装、配置和调试PHP5.2.0
- Matlab虚拟现实工具箱——快速配置
- IIS环境下快速安装、配置和调试PHP5.2.0
- IIS环境下快速安装、配置和调试PHP5.2.0
- Emacs+Matlab快速配置
- ZendStudio13 PHP调试环境快速配置
- MATLAB与modelsim的联合调试---配置
- Emacs调用Matlab编译器-快速配置
- IIS环境下快速安装、配置和调试PHP5.2.0
- IIS环境下快速安装、配置和调试PHP5.2.0
- matlab 2014b 调用 vs2013 + opencv混合编程配置、mat 与 mxarray的转换、matlab在vs2013中调试
- phpstorm + xampp + xdebug快速调试配置