caffe 如何呼叫python層

2021-07-09 05:48:44 字數 980 閱讀 6294

這兩天一直在研究faster rcnn的原始碼,可是依舊感覺雲裡霧裡,故下定決心把caffe呼叫python layer的流程仔細走一遍,好明白到底是什麼在呼叫python layer。話說 linux 除錯還真是蛋疼啊,木有ide那樣直接下斷點,gdb又不會用,只能傻比比的不斷的log(info)輸出。還好最終還是明白了,我就直接順著faster rcnn來說,並記錄在此。

faster rcnn最核心的**就是在lib檔案中,其他的都只是各種呼叫檔案而已。不過lib裡寫了很多個模組,如何讓caffe知道模組在**,並呼叫呢?這是我搞一晚上的初衷。我先大概說一下caffe正常的流程,首先從檔案中讀入solver並生成乙個solver,然後根據solver的net路徑生成乙個net,net呼叫layer_factory迴圈生成每個層,最後根據讀入model或是filler來初始化引數。實際上也怪自己馬虎大意,沒太細看**,導致所用的時間比較多。從上面的流程可以知道layer_factory是迴圈生成每個層,我看.cpp檔案也的確寫了#if with_python_layer,然後有什麼什麼操作,比如儲存python layer的python_param,並呼叫setup,不過我沒看出來這裡實際上已經是利用boost進行c++ python混編了。這些操作的定義就在python_layer.hpp檔案中,我當初還以為在什麼python***.cpp中,找了半天也沒找到。layer_factory中python layer的setup相關具體操作是,先根據param找到module的位置,再載入module,再根據層名載入層,然後前向計算反向計算什麼的。這些就已經算是達到目的了。不過只是知道相對路徑,怎麼可能載入成功呢?然後又繼續找啊找,終於在faster rcnn的tools檔案中找到。_init_paths裡有寫一些預操作,比如將lib路徑寫入pythonpath中,當然如果寫入的話,這樣就可以直接載入了。終於搞定。

這次也算是個小問題而已,不過只有再理清了整條脈絡,看**才會更加清晰,故也算是個重要的問題吧。不過這次也算是暴露了我不認真的問題,以後還是要耐心仔細找答案才行啊。。。。

呼叫caffe的Python和C 的方法

方法1 直接寫sh指令碼檔案,再執行sh檔案即可,這種最簡單,也是最常用的,新手可以參照.examples 下的各種例項sh檔案。方法2 在caffe root目錄下,直接在linux的命令列視窗執行 build tools caffe 後面加上相應的引數即可。在linux中編譯caffe的時候,一...

caffe 呼叫多塊gpu

一.檢測配置 使用命令檢視機器裡面安裝了幾塊顯示卡 二.更改配置檔案 在檢視到機器裡面安裝的顯示卡不止一塊時,就可以通過更改配置檔案,在編譯通過後,就可以使用多個gpu同時執行。設定makefile.config 開啟開關 use nccl 1,並新增nccl庫路徑 use nccl 1 將之前的注...

caffe呼叫已生成的模型

如上圖 就是build tools caffe.bin檔案,上圖就有它的指令介紹。在mnist呼叫已經訓練好的模型,測試。這個測試,假定可能是新加入的測試集,還是按照原來的需求轉換,存放資料到指定的位置。build tools caffe.bin test model examples mnist ...