還是caffe的自定義層問題。相比于c,python的自定義層更為簡單:代碼少、外部文件少、方便執行。因此用這種方法實現有利于開發和實驗。
首先還是要記得在編譯的時候加上WITH_PYTHON_LAYER的選項,如果沒有加可以先make clean刪除編譯后的文件,再重新編譯。
如果出現
layer_factory.hpp:77] Check failed: registry.count(type) == 1 (0 vs. 1) Unknown layer type: Python這樣的錯誤,說明這一步沒有成功。
在caffe的配置net里我們要輸入有關層的信息,下面以EuclideanLossLayer層為例。簡單來說我們可以直接使用,因為原本caffe里面已經包括了用c編寫的代碼,現在我們把它改編為python層。
layer { type: 'Python' name: 'loss' top: 'loss' bottom: 'python的層文件需要在$PYTHONPATH目錄下。在PRototxt中,模塊名是pyloss,這意味著你的包括EuclideanLossLayer類名的py文件名也應該是pyloss.py。經測試文件應該沒問題,可以讀取運行。不過沒有現成使用EuclideanLossLayer的網絡,最后計算結果沒有驗證。
Caffe Python Layer
新聞熱點
疑難解答