在caffe中新增自定義層

2021-07-25 13:28:09 字數 1803 閱讀 6830

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/layers

3)caffe.proto定義該層的引數

py-faster-rcnn/caffe-fast-rcnn/src/caffe/proto/caffe.proto

proposal_layer.cpp

3.1)message layerparameter 修改

新增訊息函式的id,設定id。

message layerparameter

3.2) 新增訊息函式(任意位置)

按順序指明引數。

message

proposalparameter

3.3) 新增layer id(可能不需要新增)

首先,在 message v1layerparameter 中的

enum layertype

然後在繼續新增

message v1layerparameter

optional

windowdataparameter window_data_param = 20

}3.4) 新增引數定義message v0layerparameter {}(可能不需要新增)

不再推薦的方式,這個與proposalparameter 是什麼關係??

message v0layerparameter

3.5 定義乙個層

layer

4)註冊層

在cpp檔案中新增

instantiate_class(diffcutofflayer);

register_layer_class(diffcutoff);

小結:定義乙個新的層,簡單來說分為兩個步驟:

參考資料[3,4,5,6,712]

1)宣告和定義該層的類,分別在hpp和cpp檔案中宣告和定義該類,並且需要在cpp檔案中對該層進行註冊,用下面的兩行**(下面所示)註冊後,則不需要在layer_factory.cpp檔案中

新增構造該新層物件的函式。通常新層會繼承子已有的層次,例如layer.cpp層,需要在新層中定義基類中的純虛函式。例如對於layer層,包括三個虛函式(backward_cpu, forward_gpu和reshape)。

對於只包含測試過程的層,可以通過在backward_cpu的定義**中只新增「not_implemented;」來表示未定義反向傳播函式。

instantiate_class(diffcutofflayer);

register_layer_class(diffcutoff);

2)配置該層:包括註冊和在caffe.proto中設定相關引數。在較新版本的caffe中,使用者只需要

在編譯caffe的過程中,會根據caffe.proto檔案中定義的引數介面來編譯相關層的**。一般只需要做3.1和3.2兩部即可。

注意:不需要在layer_factory.cpp檔案中新增新層的標頭檔案。

[1]

[2]

[3] caffe/src/caffe/proto/caffe.proto

[4]

[5]

[6]

[7]

[8]

// caffe原始碼解析

[9]

// 模型建立過程

[10]

[11]

[12]

caffe自定義層

實現hpp和cpp net在拿到layer之後會呼叫每層layer的setup函式,每層setup中會呼叫 void setup const vector bottom,const vector top 其中cpp中要過載四個函式 upsample.h ifndef caffe upsample l...

Caffe自定義網路層

參考部落格 本文描述了在caffe原始碼中新增網路層的兩種情況 不帶配置引數的和帶配置引數的。示例的網路層中沒有做資料處理,傳入的資料塊直接傳出去,也沒有梯度計算。我們將要在 prototxt 中新增的網路層為 layer該網路層的型別名稱為new,沒有其他配置引數,只需要在對應位置新增.cpp和....

在ListWidget中新增自定義的Item

之前看過很多在listwidget中新增item的方法,但是大部分都沒能解決我的問題。昨天把這個問題解決了,想著把它記下來。留個紀念吧。先上乙個圖例。就像這一樣。這個是純 實現。以下是純 include dialog.h include ui dialog.h include include dia...