windows-caffe添加新层

参考博客:
http://46aae4d1e2371e4aa769798941cef698.devproxy.yunshipei.com/kkk584520/article/details/52721838

因为是在windows-caffe下,所以在上述博客基础上做了些较为详细的记录,外加一点点修改

一、修改caffe.proto

在路径 caffe-windows-master\src\caffe\proto中找到caffe.proto.prototxt,添加

    optional AllPassParameter all_pass_param = 155;

还有

    message AllPassParameter {  
          optional float key = 1 [default = 0];  
        }

添加完成后保存,然后就是windows-caffe下的多一步的操作,需要点击extract_proto批处理文件,重新生成caffe.pb.hpp和caffe.pb.cc文件。

二、添加新层头文件

在路径caffe-windows-master\include\caffe\layers下添加all_pass_layer.h文件

#ifndef CAFFE_ALL_PASS_LAYER_HPP_  
#define CAFFE_ALL_PASS_LAYER_HPP_  

#include <vector>  

#include "caffe/blob.hpp"  
#include "caffe/layer.hpp"  
#include "caffe/proto/caffe.pb.h"  

#include "caffe/layers/neuron_layer.hpp"  

namespace caffe {  
template <typename Dtype>  
class AllPassLayer : public NeuronLayer<Dtype> {  
 public:  
  explicit AllPassLayer(const LayerParameter& param)  
      : NeuronLayer<Dtype>(param) {}  

  virtual inline const char* type() const { return "AllPass"; }  

 protected:  

  virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom,  
      const vector<Blob<Dtype>*>& top);  
  //virtual void Forward_gpu(const vector<Blob<Dtype>*>& bottom,  
     // const vector<Blob<Dtype>*>& top);  
  virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,  
      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);  
  //virtual void Backward_gpu(const vector<Blob<Dtype>*>& top,  
    //  const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);  
};  

}  // namespace caffe  

#endif  // CAFFE_ALL_PASS_LAYER_HPP_ 

这里我在上述博客的基础上,将关于gpu的虚函数注释掉了,因为我的caffe是在GPU模式下编译的(若不注释,会出现链接错误),若是在CPU模式下编译,可不注释。

三、添加新层源文件

caffe-windows-master\src\caffe\layers路径下添加all_pass_layer.cc

#ifndef CAFFE_ALL_PASS_LAYER_HPP_  
#define CAFFE_ALL_PASS_LAYER_HPP_  

#include <vector>  

#include "caffe/blob.hpp"  
#include "caffe/layer.hpp"  
#include "caffe/proto/caffe.pb.h"  

#include "caffe/layers/neuron_layer.hpp"  

namespace caffe {  
template <typename Dtype>  
class AllPassLayer : public NeuronLayer<Dtype> {  
 public:  
  explicit AllPassLayer(const LayerParameter& param)  
      : NeuronLayer<Dtype>(param) {}  

  virtual inline const char* type() const { return "AllPass"; }  

 protected:  

  virtual void Forward_cpu(const vector<Blob<Dtype>*>& bottom,  
      const vector<Blob<Dtype>*>& top);  
  //virtual void Forward_gpu(const vector<Blob<Dtype>*>& bottom,  
     // const vector<Blob<Dtype>*>& top);  
  virtual void Backward_cpu(const vector<Blob<Dtype>*>& top,  
      const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);  
  //virtual void Backward_gpu(const vector<Blob<Dtype>*>& top,  
    //  const vector<bool>& propagate_down, const vector<Blob<Dtype>*>& bottom);  
};  

}  // namespace caffe  

#endif  // CAFFE_ALL_PASS_LAYER_HPP_  

在路径下添加之后,需要在caffe VS C++工程中添加.hpp文件和.cc文件
这里写图片描述

这里写图片描述

四、重新编译

选中caffe工程,点击rebuild即可

五、实验添加的新层

写个简单的测试网络结构 deploy.prototxt

name: "AllPassTest"  
layer {  
  name: "data"  
  type: "Input"  
  top: "data"  
  input_param { shape: { dim: 10 dim: 3 dim: 227 dim: 227 } }  
}  
layer {  
  name: "ap"  
  type: "AllPass"  
  bottom: "data"  
  top: "conv1"  
  all_pass_param {  
    key: 12.88  
  }  
}

windows-caffe测试方法和在Linux下相同,打开CMD,进入caffe根目录

    bin\caffe.exe time -model deploy.prototxt

这里写图片描述

done

这里只是做个记录

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值