一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Caffe:一個(gè)深度學(xué)習(xí)框架

 碼農(nóng)書館 2018-02-22
本資源由 伯樂在線 - Juliesand 整理

Caffe是一個(gè)深度學(xué)習(xí)框架,具有表達(dá)力強(qiáng)、速度快和模塊化的思想,由伯克利視覺學(xué)習(xí)中心(BVLC)和社區(qū)貢獻(xiàn)者開發(fā)。Yangqing Jia在加州大學(xué)伯克利分校攻讀博士期間創(chuàng)建了這個(gè)項(xiàng)目。

Caffe

為什么選擇Caffe?

富有表現(xiàn)力的架構(gòu)鼓勵(lì)應(yīng)用和創(chuàng)新。使用Caffe,可以在配置中定義模型和優(yōu)化,不需要硬編碼。通過設(shè)置一個(gè)GPU機(jī)器訓(xùn)練標(biāo)記在CPU和GPU之間轉(zhuǎn)換,接著調(diào)配商品化集群系統(tǒng)或移動(dòng)設(shè)備來完成。

代碼的可擴(kuò)展性讓開發(fā)更加活躍。在Caffe項(xiàng)目的第一年,它就被開發(fā)者fork超過1000次,由他們完成許多重要的修改并反饋回來。多虧那些貢獻(xiàn)者,這個(gè)框架在代碼和模型兩方面都在追蹤最先進(jìn)的技術(shù)。

速度使Caffe完美的用于研究實(shí)驗(yàn)和工業(yè)開發(fā)。使用一個(gè)NVIDIA K40 GPU Caffe每天可以處理超過60M的圖像。推理過程為1ms/一幅圖像,而學(xué)習(xí)過程為4ms/一幅圖像。我們相信Caffe是現(xiàn)在可使用最快的ConvNet應(yīng)用。

社區(qū):在視覺、速度和多媒體方面,Caffe已經(jīng)有能力用于學(xué)術(shù)研究項(xiàng)目、啟動(dòng)原型,甚至大規(guī)模的工業(yè)應(yīng)用。

安裝

在安裝之前,看一下這個(gè)手冊(cè),記錄下平臺(tái)的一些細(xì)節(jié)。我們可以在Ubuntu 16.04-12.04、OS X10.11-10.8上通過Docker和AWS安裝和運(yùn)行Caffe。官方的編譯腳本和Makefile.config編譯由社區(qū)CMake編譯補(bǔ)全。

逐步介紹:

必備條件

Caffe有幾個(gè)依賴項(xiàng):

  • CUDA是GPU模式所需要的。
  1. 推薦使用庫版本7+和最新的驅(qū)動(dòng)版本,但是6.*也可以。
  2. 5.5和5.0兼容但是被認(rèn)為是過時(shí)的。
  • BLAS通過ATLAS、MKL或OpenBLAS使用。
  • Boost>=1.55
  • Protobuf、glog、gflags、hdf5

可選依賴項(xiàng):

  • OpenCV>=2.4 包括3.0
  • IO庫:lmdb、leveldb(注意:leveldb需要snappy)
  • CuDNN用于GPU加速(v5)

Pycaffe和Matcaffe接口有它們自己的需求。

  • 對(duì)于Python Caffe:Python 2.7或Python 3.3+,numpy(>=1.7),boost條件下為boost.python
  • 對(duì)于MATLAB Caffe:帶有mex編譯器的MATLAB。

cuDNN Caffe:為了達(dá)到最快的運(yùn)行速度,Caffe通過插入式集成NVIDIA cuDNN來加速。為了提升你的Caffe模型的速度,安裝cuDNN,然后安裝Caffe時(shí)在Makefile.config中取消注釋USE_CUDNN:=1標(biāo)記。Caffe會(huì)自動(dòng)進(jìn)行加速。當(dāng)前版本是cuDNN v5;在舊版Caffe中支持舊版本。

CPU-only Caffe:對(duì)于cold-brewed只有CPU模式的Caffe,在Makefile.config中取消注釋CUP_ONLY :=1標(biāo)記,配置和生成沒有CUDA的Caffe。這對(duì)于云或者集中配置非常有幫助。

CUDA和BLAS

Caffe需要CUDA nvcc編譯器編譯它的GPU代碼和用于GPU操作的CUDA驅(qū)動(dòng)器??梢匀?a target="_blank" href="https://developer./cuda-downloads">NUIDIA CUDA網(wǎng)站,按照那里的安裝說明安裝CUDA。分別安裝庫和最新的獨(dú)立驅(qū)動(dòng)器;驅(qū)動(dòng)器和庫捆綁在一起通常是過時(shí)的。警告!331.*CUDA驅(qū)動(dòng)器序列有嚴(yán)重的性能問題,不要使用它。

為獲得最佳性能,Caffe可以通過NVIDIA cuDNN加速。在cuDNN網(wǎng)站上免費(fèi)注冊(cè)、安裝,然后繼續(xù)根據(jù)安裝說明操作。編譯cuDNN時(shí)在你的Makefile.config中設(shè)置USE_CUDNN :=1標(biāo)記。

Caffe需要BLAS作為它的矩陣和向量計(jì)算的后端。有幾個(gè)這個(gè)庫的實(shí)現(xiàn)工具。你可以選擇:

  • ATLAS:免費(fèi)、開源、默認(rèn)用于Caffe。
  • Intel MKL:商業(yè)的,針對(duì)Intel CPUs進(jìn)行了優(yōu)化,可以免費(fèi)試用,也可以獲得學(xué)生授權(quán)。
  1. 安裝MKL。
  2. 設(shè)置MKL環(huán)境變量(細(xì)節(jié):Linux,OS X)。例如:source /opt/intel/mkl/bin/mklvars.sh intel64
  3. 在Makefile.config中設(shè)置BLAS := mkl
  • OpenBLAS:免費(fèi)并開源;安裝這個(gè)優(yōu)化的并行的BLAS需要更多的工作量,雖然它可能提供加速。
  1. 安裝OpenBLAS
  2. 在config中設(shè)置BLAS :=open

Python 和 MATLAB Caffe(可選)

Python

主要依賴numpy和boost.python(由boost提供)。Pandas也很有用,而且一些例子中需要它。

你可以使用下面的命令安裝依賴項(xiàng)。

Python
1
for req in $(cat requirements.txt); do pip install $req; done

但是,建議先安裝Anaconda Python發(fā)行包,它可以提供大多數(shù)必需的包和hdf5庫依賴項(xiàng)。

在安裝結(jié)束后導(dǎo)入caffe Python模塊,通過諸如export PYTHONPATH=/path/to/caffe/python:$PYTHONPATH添加模塊目錄到你的$PYTHONPATH。不應(yīng)該在caffe/python/caffe目錄中導(dǎo)入模塊。

Caffe’s Python接口在Python2.7中工作。Python3.3+應(yīng)該立即可以使用,不需要protobuf支持。對(duì)于protobuf支持請(qǐng)安裝protobuf 3.0 alpha (https://developers.google.com/protocol-buffers/)。早期版本的Python需要自行探索安裝方法。

MATLAB

安裝MATLAB,確保$PATH中已加入mex。

Caffe的MATLAB接口可以在版本2015a、2014a/b、2013a/b和2012b中工作。

編譯

Caffe可以使用Make或CMake編譯。Make是官方支持,CMake由社區(qū)支持。

使用Make編譯

通過復(fù)制和修改示例Makefile.config為安裝配置生成文件。默認(rèn)值應(yīng)該可以工作,但是如果使用Anaconda Python,要取消注釋對(duì)應(yīng)的代碼行。

Python
1
2
3
4
5
cp Makefile.config.example Makefile.config
# Adjust Makefile.config (for example, if using Anaconda Python, or if cuDNN is desired)
make all
make test
make runtest

  • 對(duì)于CPU&GPU加速的Caffe,不需要改變。
  • 對(duì)于使用NVIDIA私有的cuDNN軟件的cuDNN加速器,取消注釋Makefile.config中的USE_CUDNN :=1。cuDNN有時(shí)比Caffe的GPU加速器速度快,但不是一貫如此。
  • 對(duì)于只有CPU的Caffe,取消注釋Makefile.config中的CPU_ONLY :=1。

為了編譯Python和MATLAB包裝類,分別執(zhí)行make pycaffe和make matcaffe。確保先在Makefile.config中設(shè)置你的MATLAB和Python路徑。

分配:運(yùn)行make distribute,創(chuàng)建一個(gè)帶有所有Caffe頭文件的distribute目錄,編譯庫、二進(jìn)制文件等。為分配到其他機(jī)器所需。

速度:為了快速的生成,通過運(yùn)行make all –j8并行編譯,其中8是并行編譯線程的數(shù)量(線程數(shù)量最好選擇機(jī)器內(nèi)核的數(shù)量)。

安裝好Caffe后,檢查MNIST教程和ImageNet模型教程。

CMake編譯

在手動(dòng)編輯Makefile.config的地方配置編譯文件,Caffe提供一個(gè)非官方的CMake編譯,感謝一些社區(qū)成員。需要CMAke版本>=2.8.7?;静襟E如下所示:

Python
1
2
3
4
5
6
mkdir build
cd build
cmake ..
make all
make install
make runtest

更多細(xì)節(jié)參見:https://github.com/BVLC/caffe/pull/1667

ImageNet訓(xùn)練網(wǎng)絡(luò)

這個(gè)教程是為了讓你準(zhǔn)備好使用自己的數(shù)據(jù)訓(xùn)練自己的模型。如果你想要一個(gè)ImageNet訓(xùn)練網(wǎng)絡(luò),那么請(qǐng)注意訓(xùn)練會(huì)消耗大量的能源,而我們討厭全球變暖,所以我們提供CaffeNet模型作為下面model zoo中的訓(xùn)練模型。

數(shù)據(jù)準(zhǔn)備

本文指出所有的路徑,并假設(shè)所有的命令在caffe根目錄執(zhí)行。

ImageNet,我們這里的意思是ILSVRC12挑戰(zhàn)賽,但是你可以輕松訓(xùn)練整個(gè)ImageNet,只是需要更多的磁盤控件和稍微多一點(diǎn)的訓(xùn)練時(shí)間。

我們假設(shè)你已經(jīng)下載了ImageNet訓(xùn)練數(shù)據(jù)和驗(yàn)證數(shù)據(jù),它們存儲(chǔ)在你的磁盤中如下位置:

Python
1
2
/path/to/imagenet/train/n01440764/n01440764_10026.JPEG
/path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG

首先,你需要準(zhǔn)備一些用于訓(xùn)練的輔助數(shù)據(jù)。這些數(shù)據(jù)可以這樣下載。

Python
1
./data/ilsvrc12/get_ilsvrc_aux.sh

訓(xùn)練和驗(yàn)證輸入數(shù)據(jù)分別為train.txt和val.txt,使用文本文件列出所有文件和它們的標(biāo)簽。注意我們對(duì)標(biāo)簽使用同ILSVRC devkit不同的索引:我們按照ASCII碼排序這些同義詞組的名字,從0到999標(biāo)記它們。在synset_works.txt中查看同義詞組和名字的映射。

你可能想要預(yù)先調(diào)整圖像的大小為256*256。默認(rèn)情況下,我們不需要顯示的做這個(gè),因?yàn)樵诩涵h(huán)境中,一個(gè)好處是可以并行調(diào)整圖像大小,并使用分布式編程環(huán)境。例如,Yangqing使用他的輕量級(jí)mincepie包。如果你想要事情更簡(jiǎn)單,你也可以像這樣使用shell命令:

Python
1
2
3
for name in /path/to/imagenet/val/*.JPEG; do
    convert -resize 256x256\! $name $name
done

看一下examples/imagenet/create_imagenet.sh。根據(jù)需要設(shè)置路徑為訓(xùn)練和驗(yàn)證目錄,同時(shí)設(shè)置“RESIZE=true”調(diào)整所有圖像的大小為256*256,如果你沒有提前調(diào)整圖像。現(xiàn)在只使用examples/imagenet/create_imagenet.sh創(chuàng)建leveldbs。注意,examples/imagenet/ilsvrc12_train_leveldb和examples/imagenet/ilsvrc12_val_leveldb不應(yīng)該在執(zhí)行前存在。它由腳本創(chuàng)建。GLOG_logtostderr=1僅僅傳送更多的信息給你觀察,你可以安全地忽視它。

計(jì)算圖像平均值

模型需要我們從每幅圖像中減去圖像平均值,所以我們必須計(jì)算平均值。tools/compute_image_mean.cpp完成這些,它也是一個(gè)熟悉怎樣操縱多個(gè)組件很好的例子,例如協(xié)議緩存、leveldbs和登錄,如果你不熟悉它們的話。總之,平均值計(jì)算可以這樣做:

Python
1
./examples/imagenet/make_imagenet_mean.sh

結(jié)果會(huì)生成data/ilsvrc12/imagenet_mean.binaryproto.

模型定義

我們將描述Krizhevsky、Sutskever和Hinton在NIPS 2012 的文章中第一次提出這個(gè)方法的參考實(shí)例。

網(wǎng)絡(luò)定義(models/bvlc_reference_caffenet/train_val.prototxt)遵循Krizhevsky等人的定義。注意,如果偏離了本文建議的文件路徑,你需要在.prototxt文件中調(diào)整相關(guān)路徑。

如果你認(rèn)真看了models/bvlc_reference_caffenet/train_val.prototxt,你會(huì)注意到幾個(gè)指定phase: TRAIN或phase: TEST的include部分。這部分允許我們?cè)谝粋€(gè)文件中定義兩個(gè)非常相關(guān)的網(wǎng)絡(luò):一個(gè)網(wǎng)絡(luò)用于訓(xùn)練,另一個(gè)網(wǎng)絡(luò)用于測(cè)試。這兩個(gè)網(wǎng)絡(luò)幾乎是相同的,分享所有的層,除了那些標(biāo)記為include { phase: TRAIN } 或 include { phase: TEST }的層。在這種情況下,只有輸入層和一個(gè)輸出層是不同的。

輸入層的不同:訓(xùn)練網(wǎng)絡(luò)數(shù)據(jù)的輸入層從examples/imagenet/ilsvrc12_train_leveldb中提取數(shù)據(jù),隨機(jī)的映射到輸入圖像。測(cè)試網(wǎng)絡(luò)的數(shù)據(jù)層從examples/imagenet/ilsvrc12_val_leveldb中獲得數(shù)據(jù),不執(zhí)行隨機(jī)映射。

輸出層的不同:兩個(gè)網(wǎng)絡(luò)都輸出softmax_loss層,它在訓(xùn)練網(wǎng)絡(luò)中用于計(jì)算損失函數(shù),并初始化反向傳播算法,而在驗(yàn)證過程只是簡(jiǎn)單的報(bào)告這個(gè)損失。測(cè)試網(wǎng)絡(luò)還有第二個(gè)輸出層,accuracy,它用于報(bào)告測(cè)試集的準(zhǔn)確度。在訓(xùn)練過程,測(cè)試網(wǎng)絡(luò)偶爾在測(cè)試集上被實(shí)例化并測(cè)試,產(chǎn)生代碼行如Test score #0: xxx 和 Test score #1: xxx。在這里score0是準(zhǔn)確度(對(duì)于未訓(xùn)練的網(wǎng)絡(luò)將從1/1000=0.001開始),score1是損失(對(duì)于未訓(xùn)練的網(wǎng)絡(luò)將從7附近開始)。

我們也將設(shè)計(jì)一個(gè)協(xié)議緩存用于運(yùn)行求解。讓我們做幾個(gè)計(jì)劃:

  • 我們將以256個(gè)為一組,運(yùn)行總共450000次迭代(大約90個(gè)最大訓(xùn)練次數(shù))。
  • 每1000次迭代,我們使用驗(yàn)證數(shù)據(jù)測(cè)試學(xué)習(xí)網(wǎng)絡(luò)。
  • 我們?cè)O(shè)置初始學(xué)習(xí)速率為0.01,每100000次迭代后減小它(大概20個(gè)最大訓(xùn)練次數(shù))。
  • 每20個(gè)迭代顯示一次信息。
  • 這個(gè)訓(xùn)練網(wǎng)絡(luò)的動(dòng)量為0.9,權(quán)重衰減為0.0005.
  • 每10000次迭代,我們會(huì)簡(jiǎn)要說明當(dāng)前狀態(tài)。

聽起來不錯(cuò)吧?這是在models/bvlc_reference_caffenet/solver.prototxt.中完成的。

訓(xùn)練ImageNet

準(zhǔn)備好了嗎?我們開始訓(xùn)練。

Python
1
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt

在一個(gè)K40機(jī)器上,每20次迭代大概需要運(yùn)行26.5秒(在K20上為36秒),所以實(shí)際上每幅圖像完成完全前后向移動(dòng)采集數(shù)據(jù)為5.2ms。大概2ms向前,其余時(shí)間向后。如果你對(duì)仔細(xì)分析計(jì)算時(shí)間感興趣,你可以運(yùn)行

Python
1
./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt

繼續(xù)訓(xùn)練?

我們都經(jīng)歷過停電,或者我們想要稍微獎(jiǎng)勵(lì)自己一下,玩一會(huì)兒Battlefield(還有人記得Quake嗎?)。因?yàn)槲覀冊(cè)谟?xùn)練時(shí)截取中間結(jié)果,所以我們可以從截圖位置繼續(xù)訓(xùn)練。這可以很容易的完成,像這樣:

Python
1
2
./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt —
snapshot=models/bvlc_reference_caffenet/caffenet_train_iter_10000.solverstate

其中腳本caffenet_train_iter_10000.solverstate是存儲(chǔ)所有所需信息的求解狀態(tài)簡(jiǎn)介,可以用來恢復(fù)為準(zhǔn)確的求解狀態(tài)(包括參數(shù)、動(dòng)量歷史等)。

結(jié)語

因?yàn)槟阌辛艘延?xùn)練網(wǎng)絡(luò),查看怎樣使用Python接口分類圖像

分類ImageNet:使用C++接口

Caffe,它的內(nèi)核是用C++寫的。可以使用Caffe的C++接口去完成類似上個(gè)例子中Python代碼展示的圖像分類應(yīng)用。為了查看Caffe C++ API更通用的示例,你應(yīng)該學(xué)習(xí)tools/caffe.cpp中的命令行工具caffe的源代碼。

介紹

文件examples/cpp_classification/classification.cpp給出了簡(jiǎn)單的C++代碼。為了簡(jiǎn)單起見,這個(gè)例子不支持單一樣本過采樣,也不支持多個(gè)獨(dú)立樣本的批處理。這個(gè)例子不是試圖達(dá)到系統(tǒng)吞吐量的最大可能分類,而是特別注意在保持代碼可讀性的同時(shí)避免不必要的劣化。

編譯

這個(gè)C++示例是在編譯Caffe時(shí)自動(dòng)生成。遵循文檔說明編譯Caffe,在build目錄中這個(gè)分類示例被生成為examples/classification.bin。

用途

想要使用預(yù)先訓(xùn)練的CaffeNet模型分類示例,需要先從“Model Zoo”中下載。使用腳本:

Python
1
./scripts/download_model_binary.py models/bvlc_reference_caffenet

ImageNet標(biāo)簽文件(也叫同義詞組文件)也是需要的,用于將預(yù)測(cè)類別映射到類別名:

C++
1
./data/ilsvrc12/get_ilsvrc_aux.sh

使用這些下載的文件,我們可以分類預(yù)先準(zhǔn)備的貓圖像(examples/images/cat.jpg),使用命令:

C++
1
2
3
4
5
6
./build/examples/cpp_classification/classification.bin \
models/bvlc_reference_caffenet/deploy.prototxt \
models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \
data/ilsvrc12/imagenet_mean.binaryproto \
data/ilsvrc12/synset_words.txt \
examples/images/cat.jpg

輸出應(yīng)該是:

C++
1
2
3
4
5
6
7
8
9
10
11
---------- Prediction for examples/images/cat.jpg ----------
0.3134 - "n02123045 tabby, tabby cat"
0.2380 - "n02123159 tiger cat"
0.1235 - "n02124075 Egyptian cat"
0.1003 - "n02119022 red fox, Vulpes vulpes"
0.0715 - "n02127052 lynx, catamount"

提高性能

為了進(jìn)一步提高性能,你需要更多的利用GPU,這里是一些準(zhǔn)則:

  • 盡早將數(shù)據(jù)轉(zhuǎn)移到GPU上,在這里完成所有的預(yù)處理操作。
  • 如果你同時(shí)分類許多圖像,應(yīng)該使用批處理(許多獨(dú)立圖像在一次運(yùn)行中被分類)。
  • 使用多線程分類確保GPU被充分利用,不要等待I/O阻塞CPU線程。

官方網(wǎng)站:http://caffe./
開源地址:https://github.com/BVLC/caffe

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    能在线看的视频你懂的| 中文字幕精品一区二区年下载| 国产一区二区精品丝袜| 少妇福利视频一区二区| 中文字幕不卡欧美在线| 欧美日韩在线视频一区| 国产传媒中文字幕东京热| 国产一级特黄在线观看| 欧美日韩亚洲国产精品| 欧美日韩免费观看视频| 久久精品国产99国产免费| 亚洲精品美女三级完整版视频 | 国产精品欧美激情在线播放| 欧美一级日韩中文字幕| 日韩中文字幕免费在线视频| 国产日韩精品激情在线观看| 婷婷激情四射在线观看视频| 亚洲国产成人av毛片国产| 中文字幕av诱惑一区二区| 91精品视频免费播放| 高清一区二区三区大伊香蕉| 真实国产乱子伦对白视频不卡| 好吊妞视频这里有精品| 亚洲综合精品天堂夜夜| 欧美成人欧美一级乱黄| 不卡中文字幕在线免费看| 久久精品国产亚洲av久按摩| 日韩在线中文字幕不卡| 欧美日韩精品久久第一页| 国产成人国产精品国产三级| 久久亚洲精品中文字幕| 熟妇久久人妻中文字幕| 中国日韩一级黄色大片| 在线视频免费看你懂的| 黑丝袜美女老师的小逼逼| 久久99国产精品果冻传媒| 熟女白浆精品一区二区| 欧美国产日产在线观看| 日韩不卡一区二区视频| 91欧美激情在线视频| 日韩欧美91在线视频|