1. 程式人生 > >caffe原始碼剖析(一)--整體目錄結構

caffe原始碼剖析(一)--整體目錄結構

從今天開始,我們來細緻的分析一下caffe的原始碼。(此係列僅分析caffe原始版本,對於caffe2不涉及,並且只分析各類實現的cpu版,對於gpu實現筆者精力和能力有限,暫不作分析)

分析原始碼之前,我們需要對caffe的程式碼結構有一定的瞭解,只有充分了解了原始碼的組織層次,我們才能有的放矢的閱讀我們需要研究的部分。筆者之前也嘗試過閱讀caffe原始碼,但是那時候對於目錄結構不甚瞭解,讀起來猶如無頭蒼蠅,效果十分不好。直到最近先把程式碼的結構層次弄清楚了以後讀起來才比較順利,因此我先給大家詳細的介紹一下caffe的程式碼結構。

1.整體結構

caffe的整體結構如下圖所示

其中最重要的三個資料夾:include(各類標頭檔案的存放,即.hpp部分),src(標頭檔案對應的實現,即.cpp及.cu部分),tools(caffe提供的工具檔案)。其中include檔案下的目錄組織和src下的目錄組織基本一致。我們下面僅分析include部分以及tools部分

2.include資料夾

include資料夾下的目錄組織如下圖所示

layer資料夾下存放了各種layer的標頭檔案,其中包括我們熟悉的ConvolutionLayer(卷積層),InnerProductLayer(全連線層),PoolingLayer(池化層)等一系列基本的層結構,這些層是layer.hpp中定義的類Layer的子類

test資料夾是和測試相關,不在我們的分析範圍之內

util資料夾下是一些計算和訓練時需要用到的工具,具體結構如下圖所示

其中包括了IO處理相關(io.hpp),資料庫相關(db.hpp,db_leveldb.hpp,db_lmdb.hpp),影象變換相關(im2col.hpp,此檔案的內容相當重要,它實現的主要功能是將圖片的卷積運算轉化成矩陣運算),數學函式相關(math_functions.hpp,這個檔案的內容組成了caffe數學計算的核心部分,包括矩陣,向量的各類運算,caffe處理數學運算的主要思路是藉助第三方庫,在第三方庫的基礎上進一步封裝)

與這幾個子目錄獨立的還有一系列.hpp檔案,其中blob.hpp,layer.hpp,net.hpp這三個檔案是caffe的三大基本元件,分別對應神經網路模型中的資料模型、層模型以及網路模型,三者呈現出逐級包含的關係

3.tools資料夾

tools資料夾的檔案組織如下圖所示

extra資料夾下大多為Python相關,這裡暫且不理會

在tools資料夾下定義了caffe的一些工具,諸如生成資料庫檔案(convert_imageset.cpp),計算生成均值檔案(compute_image_mean.cpp),訓練和測試網路(train_net.cpp和test_net.cpp)

4.總結

caffe的總體原始碼組織形式就是這樣,下一次我們將從blob.hpp和blob.cpp開始探索caffe的原始碼