Caffe原始碼解析 1 整體結構 附帶番外

2021-07-16 05:47:58 字數 1075 閱讀 8879

鑑於網上大多數的**解讀都比較零散,而且細節不夠豐富,且更多偏向原理性介紹,而對**說明不夠詳細深入,所以自己一邊搜資料一邊讀**,一邊記錄,爭取能夠做乙個系列文章出來。

和官網的說明差不多,這部分內容網上有很多,不打算贅述。

caffe主要有4層資料結構,從底層向上分別是:blobs、layer、net和solver。

blobs定義的是資料結構及其上的基本操作。blobs的特點是4維,這點和theano有點類似,一般維度的順序是,輸出特徵圖數、輸入通道數、影象/模版的長和寬。

layer定義的是層,這部分**應該也是caffe中最為豐富的,因為層的型別非常多。

net定義的是網路的結構,layer是如何組成net的、互相之間如何傳遞資料的。

solver定義的,除了網路之外,還包括使用何種最優化演算法。(姑且先這麼理解,關於net和solver 所解決問題的區分,暫時我也不是很清楚。)

還記得安裝caffe時apt-get的cblas麼?(誒?去翻了下安裝記錄,似乎沒有安裝這個的步驟,那是什麼時候裝好的?有了,atlas開發庫就是包含這個cblas的)

當時不知道是什麼,讀過原始碼之後才知道這是什麼。

blas的全稱是basic linearalgebra subprograms,中文大概可以叫做基礎線性代數子程式。主要是用於向量和矩陣計算的高效能數學庫。去跟蹤caffe的**可以發現,最終所有的矩陣計算都可以落到cblas相關的函式上,這是在blobs之下更底層的庫。

caffe的原始碼中有乙個檔案叫做math_functions.cpp,對cblas提供了一層封裝,提供了所有caffe的基礎計算函式庫。

我們在實際使用caffe的時候,並不是去呼叫c函式(雖然也可以這麼幹),而是通過編寫乙個prototxt檔案,通過文字的方式直接去定義網路結構。

關於protobuf,個人覺得比較直觀的理解就是,通過定義標準化的協議,把標準化程式的編寫轉化為文字的形式,看到介紹protobuf的文章多會提到xml,用xml還需要程式設計師編寫協議解析的**,而protobuf的優勢是不需要這部分工作,同時又很高效。

以上基本是caffe的整體架構。此外,在讀原始碼的時候,還會涉及到glog、gflag等的使用,關於這些會在後面一一進行介紹。

caffe原始碼解析

目錄目錄 簡單介紹 主要函式readprotofromtextfile 函式 writeprotototextfile 函式 readprotofrombinaryfile 函式 writeprototobinaryfile 函式 readimagetocvmat 函式 matchext 函式 cv...

caffe原始碼解析 一

用si載入 後 首先從caffe layer的實現看起,不同框架下最大的差異就在於層的實現也決定了層的靈活性 layer可以看成是乙個基類,下面存在data layer,activation neuron layers,vision layer,common layers,loss layer,各個...

caffe原始碼簡單解析 Blob(1)

使用caffe也有一段時間了,但更多是使用python的介面,使用現有的imagenet訓練好的模型進行分類。為了更好的了解caffe這個框架,也為了提高自己的水平,在對卷積神經網路有了一些研究之後,終於開始研讀caffe的原始碼了,今天看了blob類的一些內容,做個總結。看過caffe官方文件的話...