Caffe筆記(三) Caffe源碼解析(資料彙總)

引言

之前對caffe進行了基本的瞭解,也跑了一些例程,仍覺得雖然自己對大體結構瞭解,但是終究是要自己動手寫代碼的,所以還是決定看一下caffe源碼。網絡上資源已經很多,所以這篇博客主要是資料的彙總,以及記錄一些新的角度。

調試工具和環境

可以使用Qt creator IDE對caffe源碼進行調試,環境搭建教程CSDN

注意:由於一般默認單獨編譯caffe的時候按官網步驟都有安裝一個libopencv-dev,該包爲2.4.X版本,如果你又自行安裝了opencv3.x.x,編譯時會出現一些問題,常見的顯示opencv_xxx未定義。如果你的opencv3.x.x是用cmake默認編譯,則可在build-seting界面裏將OpenCV_DIR改爲默認安裝目錄/usr/local/share/OpenCV,如果自己安裝到了其他目錄,可改爲相應目錄即可。

流程

函數起點:/caffe_root/tools/caffe.cpp中的 int main(**) 主函數 其中GlobalInit()主要負責解析命令行,GetBrewFunction()根據解析結果調用相應的函數,如train

int train() :首先讀取solver.prototxt文件中的solver_parameter;分配使用GPU或CPU;對snapshot等信號進行判斷;調用solver_factory中的CreateSolver(solver_param)類來創建並註冊一個solver,隨後進入solver.cpp中的Init()。
solver.cpp:在Init()中首先打印了solver_parameter,然後調用InitTrainNet(),在裏面new了個Net<Dtype>(net_param),隨即轉入net.cpp;
net.cpp:進入Net類之後,其中有一個Init(param)進行網絡的初始化,首先調用FilterNet讀取網絡定義並輸出該信息;

其次建立所有層及其聯繫,採用類似於solver_factory的方式,用LayerRegistry<Dtype>::CreateLayer(layer_param)來構建層(註冊);

接下來找出層的輸入和輸出,並調用相對於層的函數來返回輸入的數據尺寸,還包括讀取訓練數據並返回過程信息;
構建層結束之後,開始初始化層,包括(輸出)數據尺寸,需要的存儲空間。通過多次循環的構建/初始化層來搭建整個網絡。
通過初始化完成之後回到solver.cpp的InitTrainNet()中的NetState net_state;位置。緊接着執行InitTestNets();
負責調用一個由caffe.proto生成的一個caffe.pb.h文件中的caffe::SolverParameter,未完待續.....

 

資料彙總

說明:以下參考資料有些博主有系列文章,很值得點進去一看!!!

一、系列博客

MgLiu的專欄 - CSDN博客

Caffe Source Code Analysis | Ldy's Blog

caffe - 標籤 - denny402 - 博客園

二、各小類細分

1、Caffe.proto

閱讀caffe.proto不可避免的要知曉它的基本使用規則,附上我查到的比較好的參考鏈接

Google Protocol Buffer 的使用和原理摘自);Protobuf學習 - 入門 - Aut - 博客園

2、video_data_layer

【caffe源碼筆記】VideoDataLayer解析 - CSDN博客 

caffe源碼之VideoDataLayer - CSDN博客

3、其他層

Caffe學習系列(5):其它常用層及參數 - denny402 - 博客園

4、pycaffe

除了我自己寫的Caffe實戰之Python接口系列 終章總結之外的一些參考博客:

pycaffe簡明文檔 - ChrisZZ - 博客園

發佈了32 篇原創文章 · 獲贊 55 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章