實現hpp和cpp
net在拿到layer之後會呼叫每層layer的setup函式,每層setup中會呼叫:
void
setup
(const vector
*>
& bottom,
const vector
*>
& top)
其中cpp中要過載四個函式
upsample.h
#ifndef caffe_upsample_layer_hpp_
#define caffe_upsample_layer_hpp_
#include
#include
"caffe/blob.hpp"
#include
"caffe/layer.hpp"
#include
"caffe/proto/caffe.pb.h"
namespace caffe
//構造
virtual
void
layersetup
(const vector
*>
& bottom,
const vector
*>
& top)
;virtual
void
reshape
(const vector
*>
& bottom,
const vector
*>
& top)
;virtual
inline
const
char
*type()
const
//名字
virtual
inline
intminbottomblobs()
const
//blobs數量限制
virtual
inline
intmaxbottomblobs()
const
virtual
inline
intexactnumtopblobs()
const
//實際要過載這四個函式,但是父類的gpu預設呼叫cpu返回,如果不寫cuda則只需要過載cpu即可
virtual
void
forward_cpu
(const vector
*>
& bottom,
const vector
*>
& top)
;virtual
void
forward_gpu
(const vector
*>
& bottom,
const vector
*>
& top)
;virtual
void
backward_cpu
(const vector
*>
& top,
const vector<
bool
>
& propagate_down,
const vector
*>
& bottom)
;virtual
void
backward_gpu
(const vector
*>
& top,
const vector<
bool
>
& propagate_down,
const vector
*>
& bottom)
;private
:int scale_;};
}// namespace caffe
#endif
// caffe_upsample_layer_hpp_
upsample.cpp
#include
#include
"caffe/layers/upsample_layer.hpp"
namespace caffe
template
<
typename dtype>
void upsamplelayer
::reshape
(//reshape的作用是一致bottom為top開空間,在net定義的時候呼叫
const vector
*>
& bottom,
const vector
*>
& top)
out_shape[bottom[0]
->
num_axes()
-1]*
= scale_;
out_shape[bottom[0]
->
num_axes()
-2]*
= scale_;
top[0]
->
reshape
(out_shape);}
template
<
typename dtype>
void upsamplelayer
::forward_cpu
(const vector
*>
& bottom,
const vector
*>
& top)}}
}}template
<
typename dtype>
void upsamplelayer
::backward_cpu
(const vector
*>
& top,
const vector<
bool
>
& propagate_down,
const vector
*>
& bottom)}}
}}}}
#ifdef cpu_only
stub_gpu
(upsamplelayer)
;#endif
instantiate_class
(upsamplelayer)
;//例項化float和double的layer
register_layer_class
(upsample)
;//在layer_factory裡生成層的float和double creator
}// namespace caffe
修改caffe.prorotxt
message allpassparameter
重編 即可 Caffe自定義網路層
參考部落格 本文描述了在caffe原始碼中新增網路層的兩種情況 不帶配置引數的和帶配置引數的。示例的網路層中沒有做資料處理,傳入的資料塊直接傳出去,也沒有梯度計算。我們將要在 prototxt 中新增的網路層為 layer該網路層的型別名稱為new,沒有其他配置引數,只需要在對應位置新增.cpp和....
在caffe中新增自定義層
caffe中新增自定義層 6,7 1 標頭檔案 路徑 py faster rcnn caffe fast rcnn include caffe layers 2 cpp或者cu檔案 fasterrcnn huawei py faster rcnn caffe fast rcnn src caffe ...
CALayer自定義層
自定義層,其實就是在層上繪圖,一共有2種方法,下面詳細介紹一下。方法描述 建立乙個calayer的子類,然後覆蓋drawincontext 方法,使用quartz2d api進行繪圖 pragma mark 繪製乙個實心三角形 4 void drawincontext cgcontextref ct...