【笔记】有点麻烦的MatConvNet的dagnn的debug过程

尝试用MatConvNet训练,然而遇到了以下bug,一脸懵逼折腾了四天:

No public property dilate exists for class dagnn.Conv.
Error in dagnn.Layer/load (line 191)
        obj.(f) = s.(f) ;
Error in dagnn.DagNN.loadobj (line 27)
    block.load(struct(s.layers(l).block)) ;
Error in cnn_ucf101_spatial (line 112)
  net = dagnn.DagNN.loadobj(net);

这个bug在github有人也遇到过,也给出了解决方法:github问题与解决

其中方法如下:

I solved the problem. Using @jaisanliang steps.

First I installed the newest matconvnet using the directives of the link http://www.vlfeat.org/matconvnet/install/

Then I copied the all files from
https://github.com/feichtenhofer/twostreamfusion/tree/master/matconvnet/matlab/%2Bdagnn
into where I download and compiled the matconvnet library ./matconvnet/matlab/+dagnn.

但是

不行。。。

思路整体是对的。简单来说就是项目里面的metConvNet(下文以A代指”twostreamfusion-master\matconvnet\matlab+dagnn”)和下载的MatConvNet Beta24(下文以B代指)不完全对应,所以导致了报错。

  1. 根据上述方法,尝试把A放到B中,把B放到A中,都没有成功。
  2. 卸载Cuda8.0,下载Cuda7.5,和VS 2013。依旧没有成功。(但是还是建议下载7.5的(源代码用的7.5),毕竟MatConvNet那么难用,万一真和Cuda版本有关还是挺烦人的。)

最终解决方法:

将A放到B中,对B编译。然后把B放到A中(相同文件的保留A、B中文件大小较大的文件)。在matlab中运行compile.m,编译。
暂时不报之前的错了,但是依旧在报错
下图是twostreamfusion-master\matconvnet\matlab+dagnn的文件目录

【笔记】有点麻烦的MatConvNet的dagnn的debug过程_第1张图片

这时候可以根据错误的描述进入具体文件查看,大概率情况是报错的最后一个文件在+dagnn文件夹中,这时候就回到github把对应的几行代码复制到目前运行错误的那几行里面。(如Layer.m)

以上就是我的解决方法。
总结:出现错误应该是MatConvNet版本不兼容问题。进行新版本和自带版本的+dagnn文件替换和统一,将项目的+dagnn里面的文件报错代码行恢复最初github版本。个人觉得因为版本问题,可能以上简单粗暴的方法不适用,可以逐个删减文件,但是比较麻烦。

你可能感兴趣的:(笔记)