caffe自定義層

2021-10-19 17:42:18 字數 3437 閱讀 2012

實現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...