尝试用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代指)不完全对应,所以导致了报错。
- 根据上述方法,尝试把A放到B中,把B放到A中,都没有成功。
- 卸载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的文件目录
这时候可以根据错误的描述进入具体文件查看,大概率情况是报错的最后一个文件在+dagnn文件夹中,这时候就回到github把对应的几行代码复制到目前运行错误的那几行里面。(如Layer.m)
以上就是我的解决方法。
总结:出现错误应该是MatConvNet版本不兼容问题。进行新版本和自带版本的+dagnn文件替换和统一,将项目的+dagnn里面的文件报错代码行恢复最初github版本。个人觉得因为版本问题,可能以上简单粗暴的方法不适用,可以逐个删减文件,但是比较麻烦。