matlab進行深度學習MatCovNe


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路徑中去

 

  1.  
    cd matconvnet-master
  2.  
    addpath matlab

 

 

4、需要Compile MatConvNet。

 

 

vl_compilenn

 

 


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

 

比如,CompileCPU.m

 

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

 

 

如果想應用GPU計算,需要寫成CompileGPU.m

 

 

  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下進行處理的方式。

 

 

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

代碼如下:

  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM