MatCovNet官網 http://www.vlfeat.org/matconvnet/
深度學習12:能力提升, 一步一步的介紹如何自己構建網絡和訓練,利用MatConvNet - CSDN博客
https://blog.csdn.net/qq_20259459/article/details/65633407
深度學習在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)
鏈接戳 http://www.vlfeat.org/matconvnet/pretrained/
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。
https://blog.csdn.net/sgfmby1994/article/details/70738883