zoukankan      html  css  js  c++  java
  • 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:MenghanZhoumatlab_workToolsBoxes
    etworksimagenet-vgg-m-2048.mat');

    这里的net是一个预训练模型,是一个线性链组成的网络。它是一个结构体的形式:

    其中,layers有21层(不同的预训练模型的卷积层数目不同)

          meta包含3个结构体

    classes是已经训练好的模型对事物的1000种分类。

    ---------------------------我是分割线-----------------------------

    来看一个例子,利用VGG已经训练好的模型对这张图片分类。

    代码如下:

    1.  
      %将pepper.png这张图按照模型,根据得分确定最应该属于的类别
    2.  
      run matlab/vl_setupnn
    3.  
      net = load('D:MenghanZhoumatlab_workToolsBoxes etworksimagenet-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

  • 相关阅读:
    三种解决IE版本兼容性问题
    CSS 如何让超链接访问后和访问前的颜色不同且访问后仍保留hover和active效果
    bootstrap 笔记用法
    STL优缺点
    输出最大回文数
    将一组单词逆序输出
    排序算法
    背包问题
    二进制
    sstream
  • 原文地址:https://www.cnblogs.com/wanghuadongsharer/p/9503214.html
Copyright © 2011-2022 走看看