linux ubuntu16安装编译matconvnet并测试,常见问题解决
文章目录
1、安装编译MatConvNet
1.1 安装libjpeg
sudo apt-get install libjpeg-dev
1.2 GCC降版本解决编译问题
本人测试用的Ubuntu16默认的是使用gcc5.x,而matlab2017b只有gcc4.9才支持,修改ubuntu中的gcc和g++版本:
sudo apt-get update
sudo apt-get install gcc-4.7
sudo apt-get install g++-4.7
gcc --version显示版本依然是5.x,并没有把4.7版设置为默认的gcc的链接文件,进入/usr/bin/把gcc这个文件删除,建立链接到gcc-4.7(g++类似):
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-4.9 gcc
sudo rm g++
sudo ln -s g++-4.9 g++
1.3 MatConvNet源码包下载
从官网下载合适版本的 MatConvNet 源码包,目前版本为 1.0-beta25.解压后进入源码目录:
tar xfv matconvnet-1.0-beta25.tar.gz
cd matconvnet-1.0-beta25
1.4 编译
打开matlab之后将解压的包添加到matlab路径
接下来分为如下几种情况:
(1)假设只有CPU:
vl_compilenn()
(2)假设你只有唯一的CUDA且匹配你的MATLAB版本
vl_compilenn('enableGpu', true)
(3)如果你有很多CUDA,可以通过指定路径选择一个cuda版本
vl_compilenn('enableGpu',true,'cudaRoot','yourcudapath','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot', 'yourcudnnpath')
这里会有一个问题按照默认安装的时候cuda的路径一般是/usr/local/cuda/,但是在安装cudnn的时候路径没有找到对不对?
我当时的安装方式参考了如下两篇bolg进行安装
主要方式就是讲cudnn的库复制到cuda的路径里面进去
所以这里的cudnnpath就应该是cuda中的被复制路径,最终该指令可以写成如下形式
vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot', '/usr/local/cuda/lib64')
1.5 测试
测试一:
addpath matlab
vl_setupnn()
vl_setupnn('gpu', true)
vl_testnn()
vl_testnn('gpu', true)
测试二:
下载预训练好的网络放到相应路径下
准备一张图片(因为从别的blog上面截得所以有个水印但是不影响测试结果哈哈之后会有一些我自己的改动)
文件夹结构示意图(我的系统是linux便于显示挂载到了windows上面,显示文件夹结构)
我自己写了一个脚本可以在之后都使用一下:
这个里面是init.m文件内容
currentFolder = pwd;
% fprintf(currentFolder);
% fprintf('\n');
addpath(genpath(currentFolder));
addpath(genpath('/home/zhouziqun/MATLAB/matconvnet-1.0-beta25/matlab'));%这个是我编译好的那个文件的路径(相当于吧子文件和文件都添加进路径中)
vl_setupnn();%完成初始化
matlab命令行中run 绝对路径init.m
然后运行test1文件
%将pepper.png这张图按照模型,根据得分确定最应该属于的类别
net = load('./netpath/imagenet-vgg-m-2048.mat');
im = imread('./datapath/peppers.png');
im_ = single(im);
im_ = imresize(im_,net.meta.normalization.imageSize(1:2));%缩放到224*224大小
im_ = im_ - net.meta.normalization.averageImage;%减去均值
res = vl_simplenn(net,im_);%res包含了计算结果,以及中间层的输出 最后一层可以用来分类
y = res(end).x;%最后一层
x = gather(res(end).x);
score = squeeze(gather(res(end).x));%分属于每个类别的分数
[bestScore, best] = max(score);
figure(1);
clf;
imshow(im);
title(sprintf('%s %d,%.3f',net.meta.classes.description{best},best,bestScore));%net.meta.classes.description里存放的是很多种类别的名称
matlab命令行中run 绝对路径test1.m
最终结果
显示准确率和类别如上
2 安装编译中遇到的问题解决:
问题一:numlabs labindex与原始库中有冲突的问题
Warning: Function labindex has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
Warning: Function numlabs has the same name as a MATLAB builtin. We suggest you rename the function to avoid a potential name conflict.
你可以使用open相关命令解决
在命令行中输入
open labindex
这样就会打开你matconvnet路径中的函数文件
对函数名字和函数.m文件两个地方都进行重命名即可解决冲突(我这是已经改完的效果图)
再次进行open labindex之后就会打开matlab自己库中的labindex
如果为了避免matconvnet之中会用到labindex那就这样操作之后把这个matlab中间的labindex改成labindex2,然后在把matconvnet之中的labindex1改回labindex
别问我为啥不直接改matlab中间的labindex,因为我已开始找不到matlab中间的labindex在哪里哈哈哈,只能先改掉一个在open出来 现在你们有了路径就可以自己直接改了
然后就没有问题了
更多推荐
所有评论(0)