日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Caffe基础介绍

發(fā)布時(shí)間:2023/11/27 生活经验 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Caffe基础介绍 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Caffe的全稱應(yīng)該是Convolutional Architecture for Fast Feature Embedding,它是一個(gè)清晰、高效的深度學(xué)習(xí)框架,它是開源的,核心語言是C++,它支持命令行、Python和Matlab接口,它既可以在CPU上運(yùn)行也可以在GPU上運(yùn)行。它的license是BSD 2-Clause。

Deep Learning比較流行的一個(gè)原因,主要是因?yàn)樗軌蜃灾鞯貜臄?shù)據(jù)上學(xué)到有用的feature。特別是對(duì)于一些不知道如何設(shè)計(jì)feature的場(chǎng)合,比如說圖像和speech。

Caffe的設(shè)計(jì):基本上,Caffe follow了神經(jīng)網(wǎng)絡(luò)的一個(gè)簡單假設(shè)----所有的計(jì)算都是以layer的形式表示的layer做的事情就是take一些數(shù)據(jù),然后輸出一些計(jì)算以后的結(jié)果,比如說卷積,就是輸入一個(gè)圖像,然后和這一層的參數(shù)(filter)做卷積,然后輸出卷積的結(jié)果。每一個(gè)layer需要做兩個(gè)計(jì)算:forward是從輸入計(jì)算輸出,然后backward是從上面給的gradient來計(jì)算相對(duì)于輸入的gradient,只要這兩個(gè)函數(shù)實(shí)現(xiàn)了以后,我們就可以把很多層連接成一個(gè)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)做的事情就是輸入我們的數(shù)據(jù)(圖像或者語音或者whatever),然后來計(jì)算我們需要的輸出(比如說識(shí)別的label),在training的時(shí)候,我們可以根據(jù)已有的label來計(jì)算loss和gradient,然后用gradient來update網(wǎng)絡(luò)的參數(shù),這個(gè)就是Caffe的一個(gè)基本流程。

基本上,最簡單地用Caffe上手的方法就是先把數(shù)據(jù)寫成Caffe的格式,然后設(shè)計(jì)一個(gè)網(wǎng)絡(luò),然后用Caffe提供的solver來做優(yōu)化看效果如何,如果你的數(shù)據(jù)是圖像的話,可以從現(xiàn)有的網(wǎng)絡(luò),比如說alexnet或者googlenet開始,然后做fine tuning,如果你的數(shù)據(jù)稍有不同,比如說是直接的float vector,你可能需要做一些custom的configuration,Caffe的logistic regression example興許會(huì)很有幫助。

Fine tune方法:fine tuning的想法就是說,在imagenet那么大的數(shù)據(jù)集上train好一個(gè)很牛的網(wǎng)絡(luò)了,那別的task上肯定也不錯(cuò),所以我們可以把pretrain的網(wǎng)絡(luò)拿過來,然后只重新train最后幾層,重新train的意思是說,比如我以前需要classify imagenet的一千類,現(xiàn)在我只想識(shí)別是狗還是貓,或者是不是車牌,于是我就可以把最后一層softmax從一個(gè)4096*1000的分類器變成一個(gè)4096*2的分類器,這個(gè)strategy在應(yīng)用中非常好使,所以我們經(jīng)常會(huì)先在imagenet上pretrain一個(gè)網(wǎng)絡(luò),因?yàn)槲覀冎纈magenet上training的大概過程會(huì)怎么樣。

Caffe可以應(yīng)用在視覺、語音識(shí)別、機(jī)器人、神經(jīng)科學(xué)和天文學(xué)。

Caffe提供了一個(gè)完整的工具包,用來訓(xùn)練、測(cè)試、微調(diào)和部署模型。

Caffe的亮點(diǎn)

(1)、模塊化:Caffe從一開始就設(shè)計(jì)得盡可能模塊化,允許對(duì)新數(shù)據(jù)格式、網(wǎng)絡(luò)層和損失函數(shù)進(jìn)行擴(kuò)展。

(2)、表示和實(shí)現(xiàn)分離:Caffe的模型(model)定義是用Protocol Buffer語言寫進(jìn)配置文件的。以任意有向無環(huán)圖的形式,Caffe支持網(wǎng)絡(luò)架構(gòu)。Caffe會(huì)根據(jù)網(wǎng)絡(luò)的需要來正確占用內(nèi)存。通過一個(gè)函數(shù)調(diào)用,實(shí)現(xiàn)CPU和GPU之間的切換。

(3)、測(cè)試覆蓋:在Caffe中,每一個(gè)單一的模塊都對(duì)應(yīng)一個(gè)測(cè)試。

(4)、Python和Matlab接口:同時(shí)提供Python和Matlab接口。

(5)、預(yù)訓(xùn)練參考模型:針對(duì)視覺項(xiàng)目,Caffe提供了一些參考模型,這些模型僅應(yīng)用在學(xué)術(shù)和非商業(yè)領(lǐng)域,它們的license不是BSD。

Caffe架構(gòu)

(1)、數(shù)據(jù)存儲(chǔ):Caffe通過”blobs”即以4維數(shù)組的方式存儲(chǔ)和傳遞數(shù)據(jù)。Blobs提供了一個(gè)統(tǒng)一的內(nèi)存接口,用于批量圖像(或其它數(shù)據(jù))的操作,參數(shù)或參數(shù)更新。Models是以Google Protocol Buffers的方式存儲(chǔ)在磁盤上。大型數(shù)據(jù)存儲(chǔ)在LevelDB數(shù)據(jù)庫中。

(2)、層:一個(gè)Caffe層(Layer)是一個(gè)神經(jīng)網(wǎng)絡(luò)層的本質(zhì),它采用一個(gè)或多個(gè)blobs作為輸入,并產(chǎn)生一個(gè)或多個(gè)blobs作為輸出。網(wǎng)絡(luò)作為一個(gè)整體的操作,層有兩個(gè)關(guān)鍵職責(zé):前向傳播,需要輸入并產(chǎn)生輸出;反向傳播,取梯度作為輸出,通過參數(shù)和輸入計(jì)算梯度。Caffe提供了一套完整的層類型。

(3)、網(wǎng)絡(luò)和運(yùn)行方式:Caffe保留所有的有向無環(huán)層圖,確保正確的進(jìn)行前向傳播和反向傳播。Caffe模型是終端到終端的機(jī)器學(xué)習(xí)系統(tǒng)。一個(gè)典型的網(wǎng)絡(luò)開始于數(shù)據(jù)層,結(jié)束于loss層。通過一個(gè)單一的開關(guān),使其網(wǎng)絡(luò)運(yùn)行在CPU或GPU上。在CPU或GPU上,層會(huì)產(chǎn)生相同的結(jié)果。

(4)、訓(xùn)練一個(gè)網(wǎng)絡(luò):Caffe訓(xùn)練一個(gè)模型(Model)靠快速、標(biāo)準(zhǔn)的隨機(jī)梯度下降算法。

在Caffe中,微調(diào)(Fine tuning),是一個(gè)標(biāo)準(zhǔn)的方法,它適應(yīng)于存在的模型、新的架構(gòu)或數(shù)據(jù)。對(duì)于新任務(wù),Caffe 微調(diào)舊的模型權(quán)重并按照需要初始化新的權(quán)重。

Blobs,Layers,and Nets:深度網(wǎng)絡(luò)的組成模式表示為數(shù)據(jù)塊工作的內(nèi)部連接層的集合。以它自己的model模式,Caffe定義了層層(layer-by-layer)網(wǎng)絡(luò)。Caffe網(wǎng)絡(luò)定義了從低端到頂層整個(gè)model,從輸入數(shù)據(jù)到loss層。隨著數(shù)據(jù)通過網(wǎng)絡(luò)的前向傳播和反向傳播,Caffe存儲(chǔ)、通信、信息操作作為Blobs。Blob是標(biāo)準(zhǔn)陣列和統(tǒng)一內(nèi)存接口框架。Blob用來存儲(chǔ)數(shù)據(jù)、參數(shù)以及l(fā)oss。隨之而來的layer作為model和計(jì)算的基礎(chǔ),它是網(wǎng)絡(luò)的基本單元。net作為layer的連接和集合,網(wǎng)絡(luò)的搭建。blob詳細(xì)描述了layer與layer或net是怎樣進(jìn)行信息存儲(chǔ)和通信的。Solver是Net的求解。

Blob 存儲(chǔ)和傳輸:一個(gè)blob是對(duì)要處理的實(shí)際數(shù)據(jù)的封裝,它通過Caffe傳遞。在CPU和GPU之間,blob也提供同步能力。在數(shù)學(xué)上,blob是存儲(chǔ)連續(xù)的N維數(shù)組陣列。

Caffe通過blobs存儲(chǔ)和傳輸數(shù)據(jù)。blobs提供統(tǒng)一的內(nèi)存接口保存數(shù)據(jù),例如,批量圖像,model參數(shù),導(dǎo)數(shù)的優(yōu)化。

Blobs隱藏了計(jì)算和混合CPU/GPU的操作根據(jù)需要從主機(jī)CPU到設(shè)備GPU進(jìn)行同步的開銷。主機(jī)和設(shè)備的內(nèi)存是按需分配。

對(duì)于批量圖像數(shù)據(jù),blob常規(guī)容量是圖像數(shù)N*通道數(shù)K*圖像高H*圖像寬W。在布局上,Blob存儲(chǔ)以行為主,因此最后/最右邊的維度改變最快。例如,在一個(gè)4D blob中,索引(n, k, h, w)的值物理位置索引是((n * K + k) * H + h) * W + w。對(duì)于非圖像應(yīng)用,用blobs也是有效的,如用2D blobs。

參數(shù)blob尺寸根據(jù)當(dāng)前層的類型和配置而變化。

一個(gè)blob存儲(chǔ)兩塊內(nèi)存,data和diff,前者是前向傳播的正常數(shù)據(jù),后者是通過網(wǎng)絡(luò)計(jì)算的梯度。

一個(gè)blob使用SyncedMem類同步CPU和GPU之間的值,為了隱藏同步的詳細(xì)信息和盡量最小的數(shù)據(jù)傳輸。

Layer計(jì)算和連接:Layer是模型(model)的本質(zhì)和計(jì)算的基本單元。Layer卷積濾波、pool、取內(nèi)積、應(yīng)用非線性、sigmoid和其它元素轉(zhuǎn)換、歸一化、載入數(shù)據(jù),計(jì)算losses.

每一個(gè)layer類型定義了三個(gè)至關(guān)重要的計(jì)算:設(shè)置、前向和反向。(1)、設(shè)置:初始化這個(gè)layer及在model初始化時(shí)連接一次;(2)、前向:從底部對(duì)于給定的輸入數(shù)據(jù)計(jì)算輸出并傳送到頂端;(3)、反向:對(duì)于給定的梯度,頂端輸出計(jì)算這個(gè)梯度到輸入并傳送到低端。

有兩個(gè)前向(forward)和反向(backward)函數(shù)執(zhí)行,一個(gè)用于CPU,一個(gè)用于GPU。

Caffe layer的定義由兩部分組成,層屬性和層參數(shù)。

每個(gè)layer有輸入一些’bottom’blobs,輸出一些’top’ blobs.

Net定義和操作:net由組成和分化共同定義了一個(gè)函數(shù)和它的梯度。每一層輸出計(jì)算函數(shù)來完成給定的任務(wù),每一層反向從學(xué)習(xí)任務(wù)中通過loss計(jì)算梯度.Caffe model是終端到終端的機(jī)器學(xué)習(xí)引擎。

Net是layers組成的有向無環(huán)圖(DAG)。一個(gè)典型的net開始于數(shù)據(jù)層,此layer從磁盤加載數(shù)據(jù),終止于loss層,此layer計(jì)算目標(biāo)任務(wù),如分類和重建。

Model初始化通過Net::Init()進(jìn)行處理。初始化主要做了兩件事:通過創(chuàng)建blobs和layers來構(gòu)建整個(gè)DAG,調(diào)用layers的SetUp()函數(shù)。它也做了一系列的其它bookkeeping(簿記)的事情,比如驗(yàn)證整個(gè)網(wǎng)絡(luò)架構(gòu)的正確性。

Model格式:The models are defined in plaintext protocol buffer schema(prototxt) while the learned models are serialized as binary protocol buffer(binaryproto) .caffemodel files. The model format is defined by the protobufschema in caffe.proto.

Forward and Backward:Forward inference, Backward learning.

Solver優(yōu)化一個(gè)model通過首先調(diào)用forward得到輸出和loss,然后調(diào)用backward生成model的梯度,接著合并梯度到權(quán)值(weight)更新盡量減少loss.Solver, Net和Layer之間的分工,使Caffe保持模塊化和開放式發(fā)展。

Loss:在Caffe中,作為大多數(shù)機(jī)器學(xué)習(xí),學(xué)習(xí)(learning)是通過loss函數(shù)(error, cost, or objective函數(shù))來驅(qū)動(dòng)。一個(gè)loss函數(shù)指定了學(xué)習(xí)的目標(biāo)通過映射參數(shù)設(shè)置(例如,當(dāng)前的網(wǎng)絡(luò)權(quán)值)到一個(gè)標(biāo)量值。因此,學(xué)習(xí)的目標(biāo)是找到最小化loss函數(shù)權(quán)值的設(shè)置。

在Caffe中,loss是由網(wǎng)絡(luò)的forward計(jì)算。每一個(gè)layer采用一組輸入blobs(bottom,表示輸入),并產(chǎn)生一組輸出blobs(top,表示輸出)。一些layer的輸出可能會(huì)用在loss函數(shù)中。對(duì)于分類任務(wù),一個(gè)典型的loss函數(shù)選擇是SoftmaxWithLoss函數(shù)。

Loss weights:net通過許多個(gè)layers產(chǎn)生一個(gè)loss,loss weights能被用于指定它們的相對(duì)重要性。

按照慣例,帶有”loss”后綴的Caffe layer類型應(yīng)用于loss函數(shù),但其它layers是被假定為純碎用于中間計(jì)算。然而,任一個(gè)layer都能被用于loss,通過添加一個(gè)”loss_weight”字段到一個(gè)layer定義。

在Caffe中,最后的loss是被計(jì)算通過所有的weighted loss加和通過網(wǎng)絡(luò)。

Solver:Solver通過協(xié)調(diào)網(wǎng)絡(luò)的前向推理和后向梯度形成參數(shù)更新試圖改善loss達(dá)到model優(yōu)化。Learning的職責(zé)是被劃分為Solver監(jiān)督優(yōu)化和產(chǎn)生參數(shù)更新,Net產(chǎn)生loss和梯度。

Caffe solver方法:隨機(jī)梯度下降(Stochastic Gradient Descent, type:”SGD”);AdaDelta(type:”AdaDelta”);自適應(yīng)梯度(Adaptive Gradient,type:”AdaGrad”);Adam(type:”Adam”);Nesterov’s Accelerated Gradient(type:”Nesterov”);RMSprop(type:”RMSProp”).

Solver作用:Solver是Net的求解.(1)、優(yōu)化bookkeeping、創(chuàng)建learning訓(xùn)練網(wǎng)絡(luò)、對(duì)網(wǎng)絡(luò)進(jìn)行評(píng)估;(2)、調(diào)用forward/backward迭代優(yōu)化和更新參數(shù);(3)、定期評(píng)估測(cè)試網(wǎng)絡(luò);(4)、整個(gè)優(yōu)化快照model和solver狀態(tài)。

Solver的每一次迭代執(zhí)行:(1)、調(diào)用網(wǎng)絡(luò)forward計(jì)算輸出和loss;(2)、調(diào)用網(wǎng)絡(luò)backward計(jì)算梯度;(3)、按照solver方法,采用漸變進(jìn)行參數(shù)更新;(4)、按照學(xué)習(xí)率、歷史和方法更新solver狀態(tài)。通過以上執(zhí)行來獲得所有的weights從初始化到learned model.

像Caffe models,Caffe solvers也可以在CPU或GPU模式下運(yùn)行。

solver方法處理最小化loss的總體優(yōu)化問題。

實(shí)際的weight更新是由solver產(chǎn)生,然后應(yīng)用到net參數(shù)。

Layer Catalogue:為了創(chuàng)建一個(gè)Caffe model,你需要定義model架構(gòu)在一個(gè)prototxt文件(protocol buffer definition file)中。Caffe layers和它們的參數(shù)是被定義在protocol buffer definitions文件中,對(duì)于Caffe工程是caffe.proto.

Vision Layers:Vision layers通常以圖像作為輸入,并產(chǎn)生其它圖像作為輸出:

(1)、Convolution(Convolution):卷積層通過將輸入圖像與一系列可學(xué)習(xí)的濾波進(jìn)行卷積,在輸出圖像中,每一個(gè)產(chǎn)生一個(gè)特征圖;(2)、Pooling(Pooling);(3)、Local Response Normalization(LRN);(4)、im2col。

Loss Layers:Loss驅(qū)動(dòng)學(xué)習(xí)通過比較一個(gè)輸出對(duì)應(yīng)一個(gè)目標(biāo)和分配成本到最小化。Loss本身是被計(jì)算通過前向傳輸,梯度到loss是被計(jì)算通過后向傳輸:

(1)、Softmax(SoftmaxWithLoss);(2)、Sum-of-Squares/Euclidean(EuclideanLoss);(3)、Hinge/Margin(HingeLoss);(4)、SigmoidCross-Entropy(SigmoidCrossEntropyLoss);(5)、Infogain(InfogainLoss);(6)、Accuracy andTop-k。

Activation/NeuronLayers:一般Activation/Neuron Layers是逐元素操作,輸入一個(gè)bottom blob,產(chǎn)生一個(gè)同樣大小的top blob:

(1)、ReLU/Rectified-Linearand Leaky-ReLU(ReLU);(2)、Sigmoid(Sigmoid);(3)、TanH/Hyperbolic Tangent(TanH);(4)、Absolute Value(AbsVal);(5)、Power(Power);(6)、BNLL(BNLL)。

Data Layers:數(shù)據(jù)輸入Caffe通過Data Layers,它們?cè)诰W(wǎng)絡(luò)的低端。數(shù)據(jù)可以來自于:高效的數(shù)據(jù)庫(LevelDB或LMDB)、直接來自內(nèi)存、在不注重效率的情況下,也可以來自文件,磁盤上HDF5數(shù)據(jù)格式或普通的圖像格式:

(1)、Database(Data);(2)、In-Memory(MemoryData);(3)、HDF5Input(HDF5Data);(4)、HDF5 Output(HDF5Output);(5)、Images(ImageData);(6)、Windows(WindowData);(7)、Dummy(DummyData).

Common Layers:(1)、InnerProduct(InnerProduct);(2)、Splitting(Split);(3)、Flattening(Flatten);(4)、Reshape(Reshape);(5)、Concatenation(Concat);(6)、Slicing(Slice);(7)、Elementwise Operations(Eltwise);(8)、Argmax(ArgMax);(9)、Softmax(Softmax);(10)、Mean-VarianceNormalization(MVN)。

Data:在Caffe中,數(shù)據(jù)存儲(chǔ)在Blobs中。Data Layers加載輸入和保存輸出通過轉(zhuǎn)換從blob到其它格式。普通的轉(zhuǎn)換像mean-subtraction和feature-scaling是通過配置data layer來完成。新的輸入類型需要開發(fā)一個(gè)新的data layer來支持。

?

以上內(nèi)容來自于Caffe官方網(wǎng)站的翻譯和一些網(wǎng)絡(luò)blog的整理,主要參考:

1.??????《Caffe: Convolutional Architecture for Fast Feature Embedding》

2.??????http://caffe.berkeleyvision.org/tutorial/

3.??????http://suanfazu.com/t/caffe/281/3

4.??????http://mp.weixin.qq.com/s?__biz=MzAxNTE2MjcxNw==&mid=206508839&idx=1&sn=4dea40d781716da2f56d93fe23c158ab#rd

5.??????https://yufeigan.github.io/


關(guān)于Caffe在Windows上的配置可以參考:?http://blog.csdn.net/fengbingchun/article/details/50987353

GitHub:?https://github.com/fengbingchun/Caffe_Test?

總結(jié)

以上是生活随笔為你收集整理的Caffe基础介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請(qǐng)說明來源于"生活随笔",并保留原作者的名字。

本文地址:Caffe基础介绍