|
背景: 最近做一个场景分类的问题,想用 senet 跑一下,看看效果
论文入口:
https://arxiv.org/abs/1709.01507
代码入口:
https://github.com/hujie-frank/SENet
问题:
从github上下下来的代码,如果直接拿来就跑,就会出现如下问题:
把文字也弄出来,方便遇到同样问题的同学查询到:
Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Axpy (known types: AbsVal, Accuracy, AnnotatedData, ArgMax, BNLL, BatchNorm, BatchReindex, Bias, Concat, ContrastiveLoss, Convolution, Crop, Data, Deconvolution, DetectionEvaluate, DetectionOutput, Dropout, DummyData, ELU, Eltwise, Embed, EuclideanLoss, Exp, Filter, Flatten, HDF5Data, HDF5Output, HingeLoss, Im2col, ImageData, InfogainLoss, InnerProduct, Input, LRN, LSTM, LSTMUnit, Log, MVN, MemoryData, MultiBoxLoss, MultinomialLogisticLoss, Normalize, PReLU, Parameter, Permute, Pooling, Power, PriorBox, Python, RNN, ReLU, Reduction, Reshape, SPP, Scale, Sigmoid, SigmoidCrossEntropyLoss, Silence, Slice, SmoothL1Loss, Softmax, SoftmaxWithLoss, Split, TanH, Threshold, Tile, VideoData, WindowData)
出现问题的原因就在于,senet新定义了一个Axpy层
因此我们需要将Axpy层相应的hpp、cpp以及cu文件并放到caffe对应的文件夹中
并修改caffe.proto文件
然后重新编译caffe即可
解决方法:
一、从github上下载hpp、cpp以及cu文件,并放到自己caffe对应的目录下
github入口: https://github.com/hujie-frank/SENet
在上述的原作者的 github 上就可以下载到对应的axpy层的文件,并放到对应的caffe的文件夹的目录即可
(1)axpy_layer.hpp文件
下载后,打开这个文件夹:
找到下面这个文件:
将这个 axpy_layer.hpp 文件复制到你自己的caffe,即 caffe/include/caffe/layers 目录下
(2)axpy_layer.cpp 和 axpy_layer.cu 文件
下载后,打开这个文件夹:
找到下面这2个文件:
将 axpy_layer.cpp 和 axpy_layer.cu 这2个文件复制到你自己的caffe,即 caffe/src/caffe/layers 目录下
二、 修改caffe.proto文件
因为新添加了层,需要在 caffe/src/caffe/proto/caffe.proto 文件中的 message LayerParameter 中为新层添加参数
即使新层没有参数,也需要在message LayerParameter中为新层添加参数,目的是为了告诉caffe现在新添加了一个层
步骤如下:
(1)打开caffe.proto文件
(2)按ctrl+F 搜索: optional WindowDataParameter window_data_param ,然后在下面另起一行
(3)填入:
optional AxpyParameter axpy_param = 149;
注意:这里添加的时候ID不能重复(即我这里的149是自己取得,只要不和前面用过的ID重复即可)
(4)拉到文档最后
填入:
message AxpyParameter {
}
在最后为新参数添加添加一个消息
如果有参数就需要在里面写参数,没有就定义一个空的message即可
这里我们不需要填入参数
(5)保存退出
三、重新编译caffe
返回到caffe的根目录,输入:
make clear
make all
make pycaffe
如果make all中间如果出现 caffe.proto:1:1: Interpreting non ascii codepoint 239. 问题
原因在于前面第二步里修改了caffe.proto后编码的问题
请参考我的另一篇博文 https://blog.csdn.net/qq_38451119/article/details/81980292 解决!
结果:
成功跑起senet
补充:
有的同学可能训练的时候可以跑通senet,但是在测试的时候,用到了caffe的python接口
然后又提示:
Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Axpy
跟之前一样的问题
明明我们有编译python接口:
make pycaffe
为什么python接口还是没配置好呢?
因为你没有把python路径添加进去系统文件
解决的办法:
(1)打开 .bashrc 配置文件
sudo gedit ~/.bashrc
#或者用vim打开
sudo vim ~/.bashrc
因为我这边是用服务器,所以只能用vim打开了
(2)如果用的是 vim,在最后一行,敲小写的字母o
(o:在光标所在行下新增一列并进入编辑模式)
然后输入下面这一行,注意,caffe下python的地址要替换成你自己的,其他不用变
export PYTHONPATH=/home/lincanran/caffe/pythonPYTHONPATH
#配置文件最后写入你caffe下python的路径,本人是/home/lincanran/caffe/python
然后按 Esc键 退出编辑模式
然后输入 :wq 会保存退出vim
:wq
(3)保存使刚刚的修改生效
source ~/.bashrc #生效
|
|