Caffe學習筆記1-安裝以及代碼結構

按照官網教程安裝,我在 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的源文件

後面的學習主要圍繞後面兩個文件目錄(includesrc)下的代碼展開

源碼結構

由於includesrc兩個目錄在層次上基本一一對應因此主要分析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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章