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