matlab進行深度學習MatCovNe

MatCovNet官網 http://www.vlfeat.org/matconvnet/git

 

深度學習12:能力提高, 一步一步的介紹如何本身構建網絡和訓練,利用MatConvNet - CSDN博客
https://blog.csdn.net/qq_20259459/article/details/65633407github

 

深度學習在object tracking中的使用也愈來愈多,從去年的VOT結果來看,不少tracker都應用了convolution feature,總體效果都比以前的方法提升了一大截,因此學習deep learning須要提上日程了。看了HCF以及C-COT的源碼,都運用到了matlab的深度學習工具---MatConvNet,因此關於它的使用瞭解了一番。sql

一、首先是下載,能夠到http://www.vlfeat.org/matconvnet/去下載,不過C-COT的做者Martin大神的源碼的說明文檔readme中也提供了github的下載連接網絡

 

二、經過執行  mex -setup 來設置matlab的C++編譯器(VS2010 or  greater)工具

 

三、將MatConvNet的path加到matlab路徑中去學習

 

  1.  
    cd matconvnet-master
  2.  
    addpath matlab

 

 

四、須要Compile MatConvNet。ui

 

 

vl_compilenn

 

 


固然,最好是寫一個文件,執行3.4步。spa

 

好比,CompileCPU.m.net

 

  1.  
    % Compiling for CPU
  2.  
    addpath matlab
  3.  
    vl_compilenn

 

 

若是想應用GPU計算,須要寫成CompileGPU.mcode

 

 

  1.  
    addpath matlab
  2.  
    vl_compilenn('enableGpu', true,...
  3.  
    'cudaRoot', '/Developer/NVIDIA/CUDA-6.5', ...%本身安裝的CUDA的路徑
  4.  
    'cudaMethod', 'nvcc', ...
  5.  
    'enableCudnn', true, ...
  6.  
    'cudnnRoot', 'local/cudnn-rc2') ;

 

 

這裏須要注意,目前MatConvNet只支持英偉達的顯卡,我看了一下個人臺式機的顯卡是intel的集成顯卡,不能用,汗。因此,這裏仍是先介紹在CPU下進行處理的方式。

 

 

五、加載預訓練的模型。

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

連接戳 http://www.vlfeat.org/matconvnet/pretrained/

 

六、setup MatConvNet。

 

run matlab/vl_setupnn

 


七、 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已經訓練好的模型對這張圖片分類。

代碼以下:

  1.  
    %將pepper.png這張圖按照模型,根據得分肯定最應該屬於的類別
  2.  
    run matlab/vl_setupnn
  3.  
    net = load( 'D:\MenghanZhou\matlab_work\ToolsBoxes\networks\imagenet-vgg-m-2048.mat');
  4.  
    im = imread( 'peppers.png');
  5.  
    im_ = single(im);
  6.  
    im_ = imresize(im_,net.meta.normalization.imageSize( 1:2));%縮放到224*224大小
  7.  
    im_ = im_ - net.meta.normalization.averageImage;%減去均值
  8.  
    res = vl_simplenn(net,im_);%res包含了計算結果,以及中間層的輸出 最後一層能夠用來分類
  9.  
    y = res( end).x;%最後一層
  10.  
    x = gather(res( end).x);
  11.  
    score = squeeze(gather(res( end).x));%分屬於每一個類別的分數
  12.  
    [bestScore, best] = max(score);
  13.  
    figure( 1);
  14.  
    clf;
  15.  
    imshow(im);
  16.  
    title(sprintf( '%s %d,%.3f',net.meta.classes.description{best},best,bestScore));%net.meta.classes.description裏存放的是不少種類別的名稱
  17.  
     

 

 

 

這樣,咱們就能夠獲得下面的結果:

 

這說明,這張圖片屬於1000中類別中的pepper,並且屬於這個類別的機率爲0.979。

https://blog.csdn.net/sgfmby1994/article/details/70738883

相關文章
相關標籤/搜索