Caffe工具論文翻譯

原創翻譯,論文來自:https://arxiv.org/pdf/1408.5093.pdf

如有翻譯瑕疵,敬請見諒

Caffe: Convolutional Architecturefor Fast Feature Embedding

摘要:

Caffe為多媒體科學家和從業者提供了一個乾淨可修改的框架,有最先進的深度學習演算法和一些列訓練好的模型。 該框架是一個BSD許可協議的C++庫,並綁定有Python和MATLAB介面,可以在商品架構的機器上有效地訓練和部署通用的卷積神經網路和其他深度模型。 Caffe通過CUDA和GPU運算,滿足工業和互聯網規模的媒體需求,能夠一天內在單張K40或者Titan GPU處理4000萬張圖片(每張圖像約為2.5ms)。 通過將模型表示和實際實現分離,Caffe允許平台之間的實驗無縫切換,以便於從原型機到雲環境的開發和部署。

Advertisements

在GitHub活躍社區的貢獻者幫助下,Caffe由BVLC維護和開發。它支持著持續進行的研究項目,大規模的工業應用以及視覺,語音和多媒體方向的初創公司。

關鍵詞: 開源, 計算機視覺, 神經網路, 平行計算, 機器學習

1. 介紹:

在多媒體數據分析中,一個關鍵的問題是如何找到感官輸入的有效特徵,這些感官輸入包括圖像、聲波和觸覺。 近年來,傳統手工設計的特徵表現已趨於平穩,而深層組合架構的新發展使得性能不斷提高。 深度模型在許多領域都優於手工設計特徵, 並且使得完全缺乏工程特徵的領域可以進行機器學習。

特別地,我們受到大規模視覺識別的激勵,特定類型的深度架構已經在一些領域取得了領先地位。 這些卷積神經網路有區分地通過反向傳播演算法在一些列卷積層,激活函數和池化層間訓練。 在90年代數字分類的早期成功之後,這些模型超越了所有已知的大規模視覺識別方法,並被Google, Facebook和百度等重量級工業公司所接納,用於圖像理解和搜索。

Advertisements

雖然深度神經網路已經引起了計算機視覺領域內外的強烈興趣,但對於已發表結果的複製,可能耗費研究人員或工程師幾個月的工作。 有時候,研究人員認為有必要在發表論文的同時發布訓練好的模型,從而驗證論文的效能。 但僅僅只有訓練好的模型不足以滿足快速研究的進展和新興的商業應用,而且幾乎沒有工具箱能提供真正的現成部署的最先進的模型,而那些通常沒有運算效率的工具箱又不適合商業部署。

為了解決這些問題,我們發布了Caffe,一個開源框架提供清晰的對深度架構的訪問。 源代碼由乾淨、高效的C++編寫,採用CUDA用於GPU計算,幾乎完整地良好地支持Python/Numpy和MATLAB介面。 Caffe遵守軟體工程的最佳時間,為正確性和實驗嚴謹性以及部署速度提供單元測試。由於仔細得代碼模塊化,以及網路定義(通常是深度學習研究的新穎部分)和實際實現得分離,它非常適合科研使用。

在Caffe中,多媒體科學家和從業者有一個有序可擴展的工具包用於最先進的深度學習演算法,並有訓練好的模型開箱即用。快速的CUDA代碼和GPU運算滿足了工業需求,因為它一天內能在單張K40或者Titan GPU上處理4000萬張圖片。相同的模型可以在不同硬體下的CPU或者GPU模式運行:Caffe將模型表示和實際實現分離,可以在異構平台之間進行無縫切換,並進一步開發和部署,Caffe甚至可以在雲中運行。

雖然Caffe最初被設計用於視覺,但用戶在語音識別,機器人,神經科學和天文學方面對Caffe進行開發。我們希望這一趨勢持續下去,讓更多的科學研究和工業領域可以利用深度學習。

Caffe由BVLC進行維護和開發,並得到了幾位研究生的積極努力工作,我們歡迎來自http://github.com/BVLC/caffe的開源貢獻。我們感謝所有貢獻者的工作。

2. Caffe的出彩點:

Caffe提供了一個完整的工具包用於訓練、測試、微調和部署模型,並且提供了詳盡文檔的實例。因此,這是研究人員和其他開發者希望進入最先進機器學習領域的理想起點。同時,這些很有可能是最快實現的演算法,可以立即用於工業部署。

模塊性。軟體從設計一開始就儘可能地模塊化,允許輕易擴展到新的數據格式,網路層和損失函數。很多網路層和損失函數已經實現了,豐富的樣例展示了如何將它們組成用於各種任務的可訓練識別系統。

表示和實現的分離。Caffe模型定義使用Protocol Buffer語言來編寫的配置文件。Caffe以指向非循環圖的形式支持網路架構。在實例化后,Caffe會保留與網路所需一樣的內存,並從主機或GPU的底層位置進行抽象。在CPU和GPU實現的切換隻需一個函數調用。

測試覆蓋。Caffe的每個單獨的模塊都有自己的單元測試,當這些單元測試不被通過時,就不能添加新的代碼。這允許快速改進和重構代碼庫,並給使用代碼的研究人員帶來平和的歡迎感。

Python和MATLAB介面。對於快速原型設計和現有研究代碼的介面,Caffe提供了Python和MATLAB的綁定。兩種語言都可以用來構建網路和分類。Python介面還暴露了solver模塊,以便於新訓練過程的快速原型。

已訓練過的參考模型。Caffe為視覺任務提供各種參考模型,包括AlexNet模型和R-CNN檢測模型。更多的模型正有計劃地準備發布。我們是可重複研究的堅強支持者:我們希望一個通用軟體的底層能快速促進網路架構的探索和應用。

2.1 與相關軟體的比較

表1:關於各種流行的深度學習框架的比較。

在表1中,我們總結了最近發表的幾個神經網路軟體。雖然我們的列表不完整,但是我們已經涵蓋了最出名的工具包。Caffe與其他現在CNN框架有兩大不同:

(1) 實現完全基於C++,簡化了與現有C++系統的集成和工業界常見的介面。一但模型訓練完成,CPU模式就消除了部署和實驗的專用硬體的障礙。

(2)參考模型提供了先成的最先進結果的實驗,不需要再重新學習。通過對相關任務模型的微調,比如[2]所探索的任務,這些模型為新的研究和應用提供了很好的起點。至關重要的是,我們不僅發布了訓練完成的模型,還提供了相關的腳本和代碼來複現這些模型。

3. 架構

3.1 數據存儲

Caffe通過四維數組(blobs)來存儲和信息交互。

Blobs提供統一的存儲介面,保存一批批的圖像(或者其他數據),參數以及參數更新信息。Blob通過從CPU主機到GPU設備的同步,隱藏了計算過程和混合CPU/GPU操作的交互。實際上,程序將數據從磁碟載入到CPU代碼中的一個blob,調用一個CUDA內核進行GPU計算,並轉移到下一層,忽略低級細節的同時保持一個較高的性能。主機和設備上的內存按需分類(懶惰地),以實現高效內存使用。

模型作為Google Protocol Buffers保存到磁碟,具有幾個重要的特徵:序列化時的最小二進位字元串,高效的序列化,與二進位版本兼容的高可讀性文本格式,以及多語言高效介面實現,特別是C++和Python。

大規模的數據保存在LevelDB 資料庫中。在我們的測試程序中,LevelDB和Protocol Buffers在商業機器上提供了150MB/S的吞吐量而使得CPU影響最小。由於採用了分層設計(下面將會討論)和模塊化代碼,我們最近增加了對其他數據源的支持,其中包括了一些開源社區的貢獻。

3.2 layer

一個Caffe layer本質是一層神經網路層:它需要一個或多個blobs作為輸入,併產生一個或多個blobs作為輸出。Layers對於網路的操作具有兩個至關重要的作用:1. a forward pass接受輸入併產生輸出。2. a backward pass接受不同輸出的梯度,並計算相對於這些參數和輸入的梯度,這些梯度通過反向傳播傳遞到更早一些的層。

Caffe提供了一套完整的層類型:卷積層,池化層,全連接層,非線性操作比如修正線性和邏輯, 局部響應歸一化,元素級別的操作和損失函數(比如softmax和hinge)。這些都是最先進的視覺任務所需要的層類型。由於網路的組成結構,編碼自定義層只需要很少的努力。

3.3 網路和運行模式

Caffe記錄了有向非循環圖的所有細節,確保前向傳播和反向傳播的正確性。Caffe是一個端到端的機器學習系統。一個典型的網路從磁碟載入數據層開始,到任務目標的損失函數層結束,這些任務有可能是分類或者重構。

網路通過一個單獨的開關設置在CPU或者GPU上運行。Layers帶有相關的CPU和GPU實現常式,能產生相同的結果(有相應的測試來證明)。這個CPU/GPU模式切換開關可以無縫銜接並且與模型定義無關。

圖1:MINIST數據集數字分類的Caffe網路

3.4 訓練一個網路

Caffe通過快速標準的隨機梯度下降演算法訓練模型。圖1展示了訓練期間一個典型的Caffe網路(MNIST數據集數字分類):數據層從磁碟中提取圖像和標籤,將其通過多個處理層,比如卷積層,池化層,修正線性變化等,最後將預測結果傳送到分類損失層,最後一層所產生差和梯度能夠訓練整個網路。該示例的源代碼能在examples/lenet/lenet_train.prototxt中找到。數據以小批次的順序進行處理。訓練中至關重要的是學習率衰退策略,衰退動量,以及用於停止和恢復訓練的模型快照,所有的這些都已經實現並且文檔化了。

微調,將現有的的模型去適應新的架構或數據,是Caffe的標準方法。從一個現有的網路和模型定義的模型快照中,Caffe為新任務微調舊的模型權重,並更具需要初始化新的權重。這個能力對於知識轉移,物體檢測和物體索引至關重要。

4. 應用和例子

在公開發布的頭6個月中,Caffe已經在加州伯克利和其他大學的大量研究項目中使用,在一些任務中取得了最先進的成果。伯克利EECS的一些成員還與工業夥伴(比如Facebook和Adobe)合作,用Caffe或其前身(Decaf)來取得最先進的成果。

物體分類。Caffe有一個在線demo,展示用戶提供的最先進的物體分類成果,可以在手機上訪問。這個demo輸入一張圖片然後分類到1000個ImageNet的類別。圖2展示了一個典型的分類結果。

圖2:Caffe目標分類的例子

此外,我們還通過微調網路成功地對完整的ImageNet數據集的10000個種類進行訓練。該網路已被應用於開放辭彙對象檢索。

學習語義特徵。除了端對端的訓練,Caffe可以從圖片中通過訓練好的模型來提取語義特徵。這些特徵在其他視覺任務的「下游」中獲得了巨大成功。圖3展示了所有ImageNet驗證圖集的二維展示,用不同的顏色表示不同的類別。良好的分離邊界也顯示出這個一個成功的語義特徵。

圖3:從深度網路中提取特徵投影到二維空間。

有趣的是,這種學習好的特徵比對象分類有更多的用處。比如Karayev et al.展示了一些前景不錯的結果,使用Caffe特徵查找到圖像的不同風格,比如「古典」和「浪漫」。

圖4:前三個最有信息的預測

物體檢測。最值得注意的是,Caffe能夠使我們獲得在最難的研究數據集(PASCAL VOC 2007-2012和ImageNet 2013檢測挑戰),迄今為止最好的物體檢測的最好的結果。

Girshick et al.將Caffe和Selective Search等技術相結合,有效地實現了自然圖像中有效地定位和識別。圖5展示了他們方法的概要圖。

圖5:使用Caffe做物體檢測的R-CNN流程圖

新手引導。為了幫助用戶安裝,使用和調整Caffe,我們再Caffe官網上提供了相關說明和教程。該教程從小的演示(MNIST數字識別)到嚴肅的大型部署(ImgeNet端到端的學習)。

雖然這些教程作為Caffe功能的有效性文檔,但Caffe源代碼還額外提供了所有模塊的詳細內聯文檔。本文檔將在不久的將來發布到網上。

Advertisements

你可能會喜歡