Caffe和caffe2漫談

根據網上博客和自己理解部分進行備註說明,文字內容會有部分重複

1.來源:

Caffe是一套最早起源於Berkeley的深度學習框架,被廣泛應用於神經網絡的任務當中,大量paper的實驗都是用它完成的,而國內電商等互聯網公司的大量計算機視覺應用也是基於它完成。現階段很多國產應用也是基於Caffe框架開發。

Caffe2是在2017年4月18日開幕的 F8 年度開發者大會上,Facebook 發佈的一款全新的開源深度學習框架。

Caffe2go是一個以開源項目Caffe2爲基礎、使用Unix理念構建的輕量級、模塊化框架。其核心架構非常輕量化,而且可以附加多個模塊。它是Facebook開發的一個可以在移動平臺上實時獲取、分析、處理像素的深度學習框架Caffe2Go。

2.技術架構:

Caffe
1)數據存儲:
Caffe通過“Blobs”即以4維數組的方式存儲和傳遞數據。Blobs提供了一個統一的內存接口,用於批量圖像(或其它數據)的操作,參數或參數更新。Models是以Google Protocol Buffers的方式存儲在磁盤上。大型數據存儲在LevelDB數據庫中。
2) Layer層:
一個Caffe層(Layer)是一個神經網絡層的本質,它採用一個或多個Blobs作爲輸入,併產生一個或多個Blobs作爲輸出。網絡作爲一個整體的操作,層有兩個關鍵作用:正向傳播,需要輸入併產生輸出;反向傳播,取梯度作爲輸出,通過參數和輸入計算梯度。Caffe提供了一套完整的層類型。
3) 網絡和運行方式:
Caffe保留所有的有向無環層圖,確保正確的進行正 向傳播和反向傳播。Caffe模型是終端到終端的機器學習系統。一個典型的網絡開始於數據層,結束於loss層。通過一個單一的開關,使其網絡運行在CPU或GPU上。在CPU或GPU上,層會產生相同的結果。
4) 訓練一個網絡:
Caffe訓練一個模型(Model)靠快速、標準的隨機梯度下降算法。

3.具體作用:

(1)Blob:用於存儲和傳輸,單個Blob是對要處理的實際數據的封裝,它通過Caffe傳遞在CPU和GPU之間,Blob也提供同步能力。在數學上,Blob是存儲連續的N維數組陣列。

  • Blob使用內存存儲:datadiff,前者是前向傳播的正常數據,後者是通過網絡反向計算的梯度。
  • Blob使用SyncedMem類機制:同步CPU和GPU之間的值,爲了隱藏同步的詳細信息和儘量最小的數據傳輸。

不管是Caffe還是現階段的Caffe2框架都是通過Blobs存儲和傳輸數據。Blobs提供統一的內存接口保存數據,例如,批量圖像,model參數,導數的優化。

Blobs隱藏了計算和混合CPU/GPU的操作根據需要從主機CPU到設備GPU進行同步的開銷。主機和設備的內存是按需分配。

(2)Layer:Layer是模型(model)的本質和計算的基本單元。Layer卷積濾波、pool、取內積、應用非線性、sigmoid和其它元素轉換、歸一化、載入數據,計算losses。先階段Caffe2對於Layer封裝的更加明細,對於必要的計算單元都設有operactor文件。

Layer類型的主要作用是:參數配置、正向、反向。

  • 參數配置:初始化這個layer及在model初始化時連接一次;參數大致分爲兩個類別,層屬性和層參數。
  • 正向:從底部對於給定的輸入數據計算輸出並傳送到頂端;
  • 反向:對於給定的梯度,頂端輸出計算這個梯度到輸入並傳送到低端。

(3)Net: 主要作用是定義和操作;每一層輸出計算函數來完成給定的任務,每一層反向從學習任務中通過loss計算梯度。Caffe model是終端到終端的機器學習引擎。

Caffe中的Model初始化是通過Net::Init()進行處理。初始化主要工作:

  • 創建Blobs和layers來構建整個有向無環圖(DAG)
  • 調用不同Layers的配置函數

(4)Solver: 優化一個model通過首先調用forward得到輸出和loss,然後調用backward生成model的梯度,接着合併梯度到權值(weight)更新儘量減少loss。Solver, Net和Layer之間的分工,使Caffe保持模塊化和開放式發展。

在Caffe中,Loss是由網絡的forward計算。每一個layer採用一組輸入Blobs(bottom,表示輸入),併產生一組輸出Blobs(top,表示輸出)。一些Layer的輸出可能會用在Loss函數中。對於分類任務,一個典型的Loss函數選擇是SoftmaxWithLoss函數。

3.Caffe2框架:

官方介紹Caffe2是一個輕量化和模塊化的深度學習框架,在強調輕便性的同時,也保持了可擴展性和計算性能。
Caffe2的特性:

  • Caffe2框架可以通過一臺機器上的多個GPU或具有一個及多個GPU的多臺機器來進行分佈式訓練。
  • 也可以在iOS系統、Android系統和樹莓派(Raspberry Pi)上訓練和部署模型。
  • 只需要運行幾行代碼即可調用Caffe2中預先訓練好的Model Zoo等模型,即加載訓練模型。
  • Caffe2框架已經應用在Facebook平臺上。
  • NVIDIA(英偉達),Qualcomm(高通),Intel(英特爾),Amazon(亞馬遜)和Microsoft(微軟)等公司的雲平臺都已支持Caffe2

Caffe2的計算單元
Operators是Caffe2的基本計算單元,每個Operator包含了給定輸入和參數時,計算output所需必要的東西。同時,Caffe2對於不同的operaters的封裝性比較好,閱讀相關源碼可以根據caffe的源碼進行類比閱讀。Caffe和Caffe2的Operator Functionality對比如下圖:
在這裏插入圖片描述

4.Caffe2和Caffe的區別:

1.擅長移動和大規模部署: 雖然Caffe2新增了支持多GPU的功能,這讓新框架與Torch具有了相同的GPU支持能力,但是如前所述,Caffe2支持一臺機器上的多個GPU或具有一個及多個GPU的多臺機器來進行分佈式訓練。
2. 側重工業應用: PyTorch適合進行研究、實驗和嘗試不同的神經網絡;而Caffe2更偏向於工業應用,而且重點關注在移動端上的表現。Caffe2的任務就是提供最佳的性能,而如果想要極端靈活的計算,請選擇PyTorch。賈揚清認爲這是一個更好的方式,因爲“一個框架通喫”可能會影響性能。所以,目前Caffe2只支持非常有限的動態控制,例如動態RNN。
3. 重視移動計算

  1. Caffe2針對ARM CPU進行了優化,擁有超越機載GPU的優勢;
  2. 支持Andriod和iOS;
  3. 輕量級和可擴展性強,支持分佈式計算。比如Python和C ++ 編寫的API編寫一次,循環執行;

Facebook發佈的廣泛流行的PyTorch框架,PyTorch是專爲研究建立神經網絡和實驗而開發的。Caffe2是專爲移動生產環境而設計的,可以在各種移動平臺上部署大規模數據。

參考鏈接:
https://www.cnblogs.com/carle-09/p/9033608.html
https://blog.csdn.net/zziahgf/article/details/72461506

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