使用MDnet时遇到的一些问题(matlab版)

  • https://github.com/HyeonseobNam/MDNet
  • https://github.com/HyeonseobNam/py-MDNet
  • 由于python版本需要使用torch,决定先使用matlab版本试一下,然后就踩进了一些坑,以下做一下记录备忘(机器配置Ubuntu 16.04 LTS, CPU E5 1620, GPU GTX1080ti, CUDA 8.0首先编译matconvnet:MDNet自带一个MatConvnet,需要手动编译,自带的MakeFile文件不能实现直接编译,做了一些修改:
  • 删除了doc相关的信息:

    #include doc/MakeFile
    clean: #doc-clean
  • 增加GPU支持

    ENABLE_GPU ?= yes
  • 修改相关引用目录和信息

    ARCH ?= glnxa64
    MATLABROOT ?= /usr/local/MATLAB/R2017a
    CUDAROOT ?= /usr/local/cuda
  • 修改了ARCH后发现glnxa64编译时会出现 "nvcc fatal : redefinition of argument 'optimize'" 问题,删除CXXOPTIMFLAGS的O3选项后可以通过编译,同时需要注释掉之后的优化选项:

    MEXFLAGS += CXXOPTIMFLAGS='$$CXXOPTIMFLAGS -g'
    #MEXFLAGS += CXXOPTIMFLAGS='$$CXXOPTIMFLAGS -mssse3 -ftree-vect-loop-version -ffast-math -funroll-all-loops'
  • 至此可使用make进行编译
  • 关于使用cudnn

    在编译的时候尝试使用过cudnn6,但是发现似乎不支持,官网上也只说支持cudnn2和4,如果之后有需求,再进行更新,错误如下:

    matlab/src/bits/impl/nnconv_cudnn.cu:112: error: argument of type "int" is incompatible with parameter of type "cudnnTensorFormat_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:112: error: too few arguments in function call
    
    matlab/src/bits/impl/nnconv_cudnn.cu:134: error: too few arguments in function call
    
    matlab/src/bits/impl/nnconv_cudnn.cu:207: error: identifier "CUDNN_ADD_SAME_C" is undefined
    
    matlab/src/bits/impl/nnconv_cudnn.cu:207: error: argument of type "float *" is incompatible with parameter of type "cudnnTensorDescriptor_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:207: error: argument of type "float *" is incompatible with parameter of type "cudnnTensorDescriptor_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:207: error: too many arguments in function call
    
    matlab/src/bits/impl/nnconv_cudnn.cu:319: error: argument of type "int" is incompatible with parameter of type "cudnnTensorFormat_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:319: error: too few arguments in function call
    
    matlab/src/bits/impl/nnconv_cudnn.cu:328: error: too few arguments in function call
    
    matlab/src/bits/impl/nnconv_cudnn.cu:355: error: argument of type "float *" is incompatible with parameter of type "cudnnConvolutionBwdFilterAlgo_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:355: error: argument of type "float *" is incompatible with parameter of type "size_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:355: error: too few arguments in function call
    
    matlab/src/bits/impl/nnconv_cudnn.cu:367: error: argument of type "float *" is incompatible with parameter of type "cudnnConvolutionBwdDataAlgo_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:367: error: argument of type "float *" is incompatible with parameter of type "size_t"
    
    matlab/src/bits/impl/nnconv_cudnn.cu:367: error: too few arguments in function call
    
  • 完成matconvnet编译工作后,配置matlab环境1. 在matlab里运行 " run matconvnet/matlab/vl_setupnn.m"配置matconvnet环境 2. “run setup_mdnet.m" 完成mdnet环境配置运行:由于对matlab路径不熟悉,使用时将其目录改为了绝对路径demo_tracking.mcase 'otb' net = fullfile('/pathto/MDNet/models','mdnet_vot-otb.mat');genConfig.mcase {'otb'} % path to OTB dataset benchmarkSeqHome ='/pathto/MDNet/dataset/OTB/';效果和一些个人想法

    在不进行训练的帧上,MDNet在本机运行速度大概是 0.5s/帧 ,其中正向传播每张图大概用时四分之一秒(256张sample),抽取和保存sample约四份之一秒

    若该帧对长期或短期记忆进行训练,总用时大概在1.3s/帧

    个人认为虽然追踪效果很好,但是时间上消耗还是很厉害。不知道如果使用cudnn会不会有效提升效率

    相关内容推荐