查看: 2604|回复: 4

caffe深度学习【十五】配置senet,caffe添加Axpy层:解决 Unknow...

[复制链接]

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
11705
发表于 2019-2-21 22:32:37 | 显示全部楼层 |阅读模式

背景:

最近做一个场景分类的问题,想用 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   #生效  









回复

使用道具 举报

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
11705
 楼主| 发表于 2019-2-21 22:32:49 | 显示全部楼层
回复

使用道具 举报

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
11705
 楼主| 发表于 2019-2-21 22:32:56 | 显示全部楼层
这是原始的贴
回复

使用道具 举报

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
11705
 楼主| 发表于 2019-2-21 22:33:00 | 显示全部楼层
希望对大家有用
回复

使用道具 举报

166

主题

616

帖子

1万

积分

xdtech

Rank: 5Rank: 5

积分
11705
 楼主| 发表于 2019-2-21 22:33:15 | 显示全部楼层
senet是最近比较热的主题-场景分析
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表