caffe深度学习【十五】配置senet,caffe添加Axpy层:解决 Unknown layer type: Axpy 问题

背景:

最近做一个场景分类的问题,想用 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)
扫描二维码关注公众号,回复: 3570036 查看本文章

出现问题的原因就在于,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/python:$PYTHONPATH   
#配置文件最后写入你caffe下python的路径,本人是/home/lincanran/caffe/python

然后按  Esc键   退出编辑模式

然后输入  :wq   会保存退出vim

:wq

(3)保存使刚刚的修改生效

source ~/.bashrc   #生效  

猜你喜欢

转载自blog.csdn.net/qq_38451119/article/details/82256095
今日推荐