1. 程式人生 > >MatConvNet使用入門之基礎篇

MatConvNet使用入門之基礎篇

深度學習在object tracking中的使用也越來越多,從去年的VOT結果來看,很多tracker都應用了convolution feature,整體效果都比之前的方法提高了一大截,所以學習deep learning需要提上日程了。看了HCF以及C-COT的原始碼,都運用到了matlab的深度學習工具---MatConvNet,所以關於它的使用瞭解了一番。

1、首先是下載,可以到http://www.vlfeat.org/matconvnet/去下載,不過C-COT的作者Martin大神的原始碼的說明文件readme中也提供了github的下載連結

2、通過執行  mex -setup 來設定matlab的C++編譯器(VS2010 or  greater)

3、將MatConvNet的path加到matlab路徑中去

cd matconvnet-master
addpath matlab

4、需要Compile MatConvNet。

vl_compilenn


當然,最好是寫一個檔案,執行3.4步。

比如,CompileCPU.m

% Compiling for CPU
addpath matlab
vl_compilenn

如果想應用GPU計算,需要寫成CompileGPU.m
addpath matlab
vl_compilenn('enableGpu', true,... 
               'cudaRoot', '/Developer/NVIDIA/CUDA-6.5', ...%自己安裝的CUDA的路徑
               'cudaMethod', 'nvcc', ...
               'enableCudnn', true, ...
               'cudnnRoot', 'local/cudnn-rc2') ;
			   

這裡需要注意,目前MatConvNet只支援英偉達的顯示卡,我看了一下我的桌上型電腦的顯示卡是intel的整合顯示卡,不能用,汗。所以,這裡還是先介紹在CPU下進行處理的方式。

5、載入預訓練的模型。

需要從官網下載一個network(也就是 a pre-trained CNN)


6、setup MatConvNet。

run matlab/vl_setupnn

7、 load the pre-trained CNN。
net = load('D:\MenghanZhou\matlab_work\ToolsBoxes\networks\imagenet-vgg-m-2048.mat');

這裡的net是一個預訓練模型,是一個線性鏈組成的網路。它是一個結構體的形式:

其中,layers有21層(不同的預訓練模型的卷積層數目不同)

      meta包含3個結構體

classes是已經訓練好的模型對事物的1000種分類。

---------------------------我是分割線-----------------------------

來看一個例子,利用VGG已經訓練好的模型對這張圖片分類。


程式碼如下:

%將pepper.png這張圖按照模型,根據得分確定最應該屬於的類別
run matlab/vl_setupnn
net = load('D:\MenghanZhou\matlab_work\ToolsBoxes\networks\imagenet-vgg-m-2048.mat');
im = imread('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裡存放的是很多種類別的名稱


這樣,我們就可以得到下面的結果:

這說明,這張圖片屬於1000中類別中的pepper,而且屬於這個類別的概率為0.979。