本文是在实现Github上用户farmingyard贴出的加速版ShuffleNet。下面是所包含的文件:
在之前的Caffe框架使用中,只是单纯的会把别人deploy.prototxt,
train.prototxt,solver.prototxt拿来用,制作数据集跑一跑,稍微有一点变化,例如有的网络github上只给一个deploy.prototxt文件,或者是像这样还给出 .cpp .cu .hpp文件README.md又是这样的:
在写出其他两个文件以后直接巡行会出现以下问题:
下面主要就是针对这一问题进行解决。
1、相关文件的使用问题
如果只给出了一个deploy.prototxt文件,另外两个.prototxt配置文件都是需要我们使用者根据自己的情况和所给出的deploy.prototxt自己写的。
然后像这样给出
shuffle_channel_layer.cpp
shuffle_channel_layer.cu
shuffle_channel_layer.hpp
三个文件的,基本都是网络结构中自己定义的layer,是Caffe框架本身没有的,需要我们添加到Caffe框架下。
以ShuffleNet为例,具体使用步骤是将:
shuffle_channel_layer.cpp
shuffle_channel_layer.cu
放进caffe/src/caffe/layers路径下,而
shuffle_channel_layer.hpp
放进caffe/include/caffe/layers路径下。 然后类似于函数的声明一样,我们需要在caffe/src/caffe/proto/caffe.proto文件中找到message LayerParameter{…}这条语句
在最后添加这句话:
注意,这里的164随意取,只要不和前面用过的ID重复即可:
message LayerParameter {
...
optional ShuffleChannelParameter shuffle_channel_param = 164;
...
}
然后在caffe.proto文件的最后,添加:
message ShuffleChannelParameter {
optional uint32 group = 1[default = 1]; // The number of group
}
做完上述步骤后,在caffe需要重新编译,也很简单,直接在caffe文件夹下打开命令行:
make all -j4
或者:
sudo make clean
sudo make all
如果编译caffe时出现如下问题:
主要原因是我们上一步,修改了caffe.proto文件因为我们用文本编辑器打开了文件后,文本编辑器在caffe.proto文件的开头静默插入字节顺序标记。
参考博客解决:https://blog.csdn.net/qq_38451119/article/details/81980292
解决后,开始重新编译caffe。
2、开始训练
在Caffe中使用ShuffleNet层:
type: "ShuffleChannel"
然后就是准备好数据集,根据deploy.prototxt文件编写好train.prototxt和solver.prototxt 就可以开始训练了!