1. 程式人生 > >深度學習之Caffe框架

深度學習之Caffe框架

 caffe提供多媒體科學家和從業者一個乾淨可修改的框架,框架提供最新的深度學習演算法和一個參考模型的集合。
 框架是一個BSD許可C++庫且繫結Python以及MATLAB來進行訓練,部署在通用目的卷積神經網路和其他有效的深度模型上。
 Caffe適合工業和網際網路規模的媒體需求,通過CUDA GPU計算,一天能在一個單獨的K40 或者 Titan GPU上處理超過4000萬影象,也就是說每張圖片需要2.5ms。通過講模型表示和實際實現分離,Caffe允許實驗和平臺之間的無縫切換,便於從原型機到雲環境的開發和部署。
 對於多媒體資料分析來說,對於發現感官的輸入的有效表達如影象,聲波,觸覺等等。
 旨於促進大規模視覺識別任務,Caffe提供一個完整的工具箱用來訓練,測試,精調,部署模型和充分證明的例子。因此,它對於研究者和其他開發者來說,是一個跳到最好的機器學習方法的理想的起點。同時,它還是最快的用來實現這些演算法的可利用的實現方法,也能快速用於工業部署。

特點

模組化

 Caffe從開始設計都是儘可能的模組化設計,允許輕鬆擴充套件到新的資料格式,網路層和損失函式。大量的層和損失函式已經在上面實現,還有充足的例子展示他們是怎麼組合成一個對於不同人物的可訓練的識別系統。

表達和實現分離

 Caffe模型的定義用Protocol Buffer language被寫成一個配置檔案。Caffe支援任意有向無環圖形式的網路結構。例項上,Caffe準確的保留大量的網路需要的記憶體,並且從主機或者GPU的底層位置進行抽象化。在CPU和GPU的實現上轉換隻需要一個函式呼叫。

測試覆蓋

 Caffe中每個單獨的模組都有一個測試,並且在沒有對應測試的時候新的程式碼不被工程接受。這允許快速的提升和重構程式碼庫,並且給使用程式碼的研究者傳達一個歡迎的和平感。

繫結Python和MATLAB

 為了快速成型與現有研究程式碼相銜接,Caffe提供Python和MATLAB介面,這些語言可能是用來構建網路和分類輸入。Python也揭露了用來輕鬆成型新的訓練過程的solver模組。

預先訓練的參考模型

 Caffe為視覺任務提供參考模型,包括帶有驗證集的“AlexNet”模型和R-CNN檢測模型。

結構

資料儲存

 Caffe儲存和交換資料利用一個四維陣列叫blobs。其提供一個統一的記憶體介面,擁有影象或其他資料的批量資料,以及引數的更新。blobs還隱藏了從CPU主機同步到需要的GPU裝置的混合操作的計算以及精神上的開銷。
 在CPU編碼中,從磁碟到blobs載入資料叫一個CUDA核進行GPU計算,並將blobs轉到下一層。在維持高階效能表現時,忽略低階細節。
 模型存到磁碟中用到Google Protocol Buffers,這個當序列化,有效序列化時,能最小化二值字串,是一個可讀性相容二進位制版本的文字格式;大規模資料被儲存在LevelDB資料庫中。

層級結構

Caffe層級結構是一個神經網路層的本質:它將一個或者多個blobs作為輸入,併產出一個或多個blobs作為輸出。層級結構有兩個責任義務:
(1) 前向傳播引入輸入和產生輸出。
(2) 反向傳播 計算輸出、引數的梯度,傳遞到輸入。
 層級結構包括:卷積層,池化層,內積層,非線性啟用層,區域性相應歸一化層LRN,元素操作以及損失函式包括softmax,hinge。

執行模式

 Caffe模型是端到端的機器學習系統。一個典型的網路開始於來自磁碟的資料層,結束於為了一個任務計算目標的損失層。
 Caffe也能利用預訓練的網路來提取影象語義特徵。

訓練網路

 Caffe通過快速且標準的隨機梯度下降SGD演算法來訓練模型。資料層取得來自磁碟的影象以及標籤,傳遞到各個層(卷積層,池化層,啟用函式,損失函式層),資料在最小塊mini-batches中進行處理,並且在網路中有序的傳遞。訓練中最重要的還是學習率的衰減,動量以及用來停止和恢復的快照snapshot。