按照官網教程安裝,我在 OS X 10.9 和 Ubuntu 14.04 上面都安裝成功了。主要麻煩在於 glog gflags gtest 這幾個依賴項是google上面的需要翻牆。由於我用Mac沒有CUDA,所以安裝時需要設置 CPU_ONLY := 1。
如果不是乾淨的系統,安裝還是有點麻煩的比如我在OS X 10.9上面,簡直不是一般的麻煩,OS X 10.9 默認的編譯器是clang,所以還要修改編譯器和重行編譯一大堆依賴庫。這方面其實網上教程很多,涵蓋了各種你可能遇到的問題,多Google下問題還是可以解決的。
目錄結構
caffe文件夾下主要文件: 這表示文件夾
data
用於存放下載的訓練數據docs
幫助文檔example
一些代碼樣例matlab
MATLAB接口文件python
Python接口文件model
一些配置好的模型參數scripts
一些文檔和數據用到的腳本
下面是核心代碼文件夾:
tools
保存的源碼是用於生成二進制處理程序的,caffe在訓練時實際是直接調用這些二進制文件。include
Caffe的實現代碼的頭文件src
實現Caffe的源文件
後面的學習主要圍繞後面兩個文件目錄(include
和src
)下的代碼展開
源碼結構
由於include
和src
兩個目錄在層次上基本一一對應因此主要分析src
即可瞭解文件結構。
這裏順便提到一個有意思的東西,我是在Sublime上面利用SublimeClang插件分析代碼的(順便推薦下這插件,值得花點時間裝)。在配置的時候發現會有錯誤提示找不到”caffe/proto/caffe.pb.h”,去看了下果然沒有,但編譯的時候沒有報錯,說明是生成過後又刪除了,查看Makefile文件後發現這裏用了proto編譯的,所以在”src/caffe/proto”下面用CMakeLists文件就可以編譯出來了。
src
gtest
google test一個用於測試的庫你make runtest時看見的很多綠色RUN OK就是它,這個與caffe的學習無關,不過是個有用的庫caffe
關鍵的代碼都在這裏了test
用gtest測試caffe的代碼util
數據轉換時用的一些代碼。caffe速度快,很大程度得益於內存設計上的優化(blob數據結構採用proto)和對卷積的優化(部分與im2col相關)[1]。proto
即所謂的“Protobuf”[2],全稱“Google Protocol Buffer”,是一種數據存儲格式,幫助caffe提速。layers
深度神經網絡中的基本結構就是一層層互不相同的網絡了,這個文件夾下的源文件以及目前位置“src/caffe”中包含的我還沒有提到的所有.cpp文件就是caffe的核心目錄下的核心代碼了。
源碼主要關係
如上所言我們現在可以知道,caffe核心中的核心是下面的文檔和文件:(這部分目前不清楚的地方先參照別人的觀點)
- blob[.cpp .h] 基本的數據結構Blob類[3]。
- common[.cpp .h] 定義Caffe類
- internal_thread[.cpp .h] 使用boost::thread線程庫
- net[.cpp .h] 網絡結構類Net
- solver[.cpp .h] 優化方法類Solver
- data_transformer[.cpp .h] 輸入數據的基本操作類DataTransformer
- syncedmem[.cpp .h] 分配內存和釋放內存類CaffeMallocHost,用於同步GPU,CPU數據
- layer_factory.cpp layer.h 層類Layer
layers
此文件夾下面的代碼全部至少繼承了類Layer
Caffe的官方說明
根據Caffe官方文檔介紹,caffe大致可以分爲三層結構blob,layer,net。數據的保存,交換以及操作都是以blob的形式進行的,layer是模型和計算的基礎,net整和並連接layer。solver則是模型的優化求解。
[1]: linger: 我所寫的CNN框架 VS caffe
[2]: Google Protocol Buffer 的使用和原理
[3]: caffe源碼簡單解析——Blob(1)