1. 程式人生 > >從零到一:caffe-windows(CPU)配置與利用mnist資料集訓練第一個caffemodel

從零到一:caffe-windows(CPU)配置與利用mnist資料集訓練第一個caffemodel

一、前言

    本文會詳細地闡述caffe-windows的配置教程。由於博主自己也只是個在校學生,目前也寫不了太深入的東西,所以準備從最基礎的開始一步步來。個人的計劃是分成配置和執行官方教程,利用自己的資料集進行訓練和利用caffe來實現別人論文中的模型(目前在嘗試的是輕量級的SqueezeNet)三步走。不求深度,但求詳細。因為說實話caffe-windows的配置當初花了挺多時間的,目前貌似還真沒有從頭開始一步步講起的教程,所以博主就爭取試著每一步都講清楚吧。

    這裡說些題外話:之所以選擇SqueezeNet是因為相比於目前網際網路行業深度學習應用的火熱,移動裝置端的深度學習應用實在少得可憐。如果我沒記錯地話,蘋果在2016年9月7日釋出會中提到了機器學習兩次,其中ios10的一個亮點就是利用深度學習技術實現照片中人臉的自動識別歸類,私下裡測試了下效果很不錯。當然缺點也顯而易見:由於需要大量的計算,目前只在使用者接通電源的情況下才會去識別。我的師兄們也嘗試過用深度學習做移動裝置端應用的開發,不過最後由於花費時間太長改成了上傳到伺服器端完成。所以計算量大應該算是深度學習應用向移動裝置端轉移的一個很大問題。不過,有理由相信今後移動裝置端的深度學習應用會變得越來越多,也會是一個前景廣闊的市場。

二、環境

    系統版本:Windows 10 專業版 64位

    Visual Studio版本:Visual Studio Ultimate 2013

    都可以從itellyou上下載到,強烈推薦使用上述版本的Visual Studio(以下簡稱VS)。

三、詳細步驟

caffe-windows配置部分

(1)確保正確安裝了VS後首先下載caffe-windows原始碼,網址如下:

   我下載得到的caffe-windows.zip的MD5值為:8F2804014EF395094584230A4A9EE8A6,不排除後續原始碼更新導致本教程失效的可能,因此保險的話可以校驗一下。

(2)解壓後進入如下路徑:\caffe-windows\windows(之後路徑均預設在caffe-windows資料夾下,因此都省略\caffe-windows)

   在\windows目錄下複製檔案 CommonSettings.props.example(應該會以副本形式出現CommonSettings.props - 副本.example),並將該副本改名為CommonSettings.props。(請確認顯示副檔名這個選項已生效)

(3)用VS開啟CommonSettings.props,進行如下兩個更改後儲存退出。

   1.第7行的false改成true;2.第8行的true改成false;更改後

效果如下:

1

   如果是像我一樣的初學者不推薦一開始就配置GPU版本的caffe,因為又會有很多問題出現,容易打消積極性,更應該先利用CPU版本初步掌握caffe後再進一步研究GPU版本。

(4)用VS開啟\windows下的Caffe.sln,載入完成後右鍵點選解決方案資源管理器中的解決方案Caffe,選擇啟用NuGet程式包還原(VS會自動地將caffe要用到的第三方庫下載完成,就功能來說還是很方便的,有點類似linux的apt-get,還不用擔心版本問題。不過就caffe實際用這個還原第三方庫的體驗來說真不咋的),如下圖所示:

2    接下來的過程十分漫長,還有可能出現未響應或下載中斷的情況。

    我想了一種可取且可行的方案:在第四步開啟Caffe.sln之前先下載別人已經下載好的NugetPackages資料夾,並放到和caffe-windows資料夾的同級目錄下。這樣之後再開啟Caffe.sln時能夠自動識別出來(親自試了一下是可行的)。提供一個NugetPackages資料夾的壓縮包:http://pan.baidu.com/s/1qYpg3bY,提取碼f2zx。

    如果自己可以下載,那下載完成後會在caffe-windows檔案同級目錄下出現一個新的NugetPackages資料夾(裡面有16個子資料夾,都是caffe需要用到的庫,之後會結合實際執行結果簡單介紹下這些庫)。如果點選上圖中的管理解決方案的NuGet程式包(G)還可以看到這些庫的簡要資訊,如下圖所示:

3

(5)之後點選專案-屬性(或直接右擊解決方案Caffe選擇屬性),把配置修改成Release x64,並將生成全部勾上,如下圖所示。最後就可以點生成解決方案了,然後又是較長的等待。。

4

    這裡會出現一個問題,單獨說明下:

    報出類似下面的錯誤:

     error LNK1104:無法開啟檔案“libcaffe.lib

    網上的解決方案是對libcaffe單獨重新生成,如下圖所示:

15

    但這樣的話會出現另外一個錯誤:

    error C2220:警告被視為錯誤-沒有生成“object”檔案

    如果出現這樣的錯誤,請開啟專案-屬性按照下圖進行更改:

16

    之後再對libcaffe重新生成應該就可以成功通過。

    最後再點選生成-生成解決方案應該就可以生成成功了。至此caffe-windows配置完成。進入目錄\caffe-windows\Build\x64\Debug裡面眾多的可執行檔案都會在之後用到。

    其實Debug也是可以的,但是這樣的話之後每次都要開啟VS,總覺得有點不方便,所以後面還是通過自己寫bat檔案呼叫caffe。Debug的方法可以參考這篇文章[2]。

    到了這一步恭喜你配置已經完成了。接下來就可以用mnist資料集生成模型了。

mnist資料集測試部分

  這部分本來應該分開來寫的,但由於完成了caffe-windows配置部分也不知道到底配置得正不正確,所以還是一鼓作氣地用機器學習的Hello World程式:mnist手寫數字資料集來測試下。

(1)首先下載mnist資料集http://yann.lecun.com/exdb/mnist/這裡需要注意的是caffe並不直接通過下載得到的四個檔案進行訓練,而是會把它轉化為lmdb或leveldb格式進行讀取。lmdb是lightning(閃電的) memory-mapped database manager的縮寫,能夠把原始資料通過更為高效的儲存方式儲存,從而加快讀取和訓練速度(lmdb比leveldb更快,可以看看剛剛的NugetPackages資料夾,當中就包含著對應的庫)。

    實現這個轉化的程式碼是\examples\mnist的convert_mnist_data.cpp,但也沒必要看,因為它的執行指令碼create_mnist.sh顯然是linux下的東西。想了想也可以理解,畢竟caffe本來也不支援windows,能移植過來就不錯了,也不能指望大牛們把所有例子的程式碼都一併移植過來。後續教程會專門介紹如何實現自己的資料集向lmdb和leveldb轉換。

    裡面是已經經過轉換的leveldb格式的訓練集和測試集,把這兩個資料夾直接放到\examples\mnist目錄下,如下圖所示:

6

(2)在正式執行前還有幾個檔案中需要進行改動,首先用VS開啟\examples\mnist目錄下的lenet_solver.prototxt,將最後一行改成CPU:

7

   可以看到,這個檔案是對網路訓練引數進行指定:max_iter指定了最大迭代次數,snapshot是輸出中間結果。上圖中的引數已經修改過,初始的max_itersnapshot是10000和5000。

   接著再用VS開啟\examples\mnist目錄下的lenet_train_test.prototxt,做如下修改以正確指定訓練集和測試集。

8

    這裡額外介紹下caffe-windows採用的LeNet-5模型,也就是上圖中layer的定義方式。由於之後自己寫程式碼實現模型時肯定需要對LeNet-5模型有了解,所以提供該模型的原始資料以供參考。

其實平時看些別人論文中提供的程式碼,上述兩個檔案也算是論文和程式碼的核心所在。基本都是提供自己編寫的上述兩個檔案,再加上最終訓練出來的caffemodel,日誌和幾張效果圖。比如下圖就是SqueezeNet提供的的:

13

(3)完成上述工作後就可以編寫bat指令碼進行正式訓練了。回到caffe-windows的根目錄下新建一個run.txt並寫入以下內容(自己敲一遍感覺效果更佳,特別是像我一樣之前對bat檔案完全不懂的人):

14

    將字尾名改成bat後雙擊執行,不出意料,應該會出現類似如下的訓練過程:

9

四、mnist執行結果

    我清除解決方案後按照上述步驟重新試了一次,沒有出現問題。當然也還是不能保證100%能執行,所以如果出現任何錯誤的話歡迎交流。

    下面就對執行的結果進行一些簡單的解釋:

    最前面的部分是列印各種資訊(包括是用CPU還是GPU、訓練引數、網路引數等等),類似下圖內容:

10

    之後即為和下圖一樣的正式訓練過程,可以看到列印資訊的格式也是有規律的:

11

    左側為caffe採用的GLOG庫內方法列印的資訊,這個庫主要起記錄日誌的功能,方便出現問題時查詢根源,具體格式為:

[日期] [時間] [程序號] [檔名] [行號]

    往右即為當前迭代次數以及損失值(訓練過程不輸出準確率accuracy)。

   當迭代次數達到lenet_solver.prototxt定義的max_iter時,就可以認為訓練結束了。並且最終會在目錄\examples\mnist下產生訓練出的模型(檔案字尾名為caffemodel和solverstate),如下圖所示:

12

    分別是訓練至一半和訓練最終完成後的模型。接下來可以用這模型對mnist的測試集和自己手寫的數字進行測試(見下篇教程)。

五、結語

    也許到目前為止你還是感覺caffe像個黑盒一樣,無法洞悉它的具體工作過程。但至少到這一步為止你已經完成了最初的caffe配置過程併成功利用mnist資料訓練出了第一個caffemodel。之後的東西雖然不能說簡單,但並沒有這最初的一步來得意義重大。完成了Step ZERO to ONE,就能飽含信心的繼續下去,進一步探究caffe(好像雞湯了?)。在接下來的教程中會用到該模型對mnist資料集以及你自己手寫的圖片進行測試。後者還是很有趣的。

六、參考

[1]深度學習21天實戰Caffe 趙永科 電子工業出版社

(雖然這本書由於大量地貼程式碼,評價不是太好,但對初學者還是有很多可取之處的)

[3]Caffe官方教程中譯本 社群預覽版

相關推薦

caffe-windows(CPU)配置利用mnist資料訓練一個caffemodel

一、前言     本文會詳細地闡述caffe-windows的配置教程。由於博主自己也只是個在校學生,目前也寫不了太深入的東西,所以準備從最基礎的開始一步步來。個人的計劃是分成配置和執行官方教程,利用自己的資料集進行訓練和利用caffe來實現別人論文中的模型(目前在嘗試的是輕量級的SqueezeNet)三步

caffe利用mnist資料訓練好的lenet_iter_10000.caffemodel模型測試張自己的手寫體數字

1.安裝一些基本依賴項: $ sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler   $ sudo

Keras之DNN利用DNN演算法【Input(8)→12+8(relu)→O(sigmoid)】利用糖尿病資料訓練、評估模型(利用糖尿病資料集中的八個引數特徵預測一個0或1結果)

Keras之DNN:利用DNN演算法【Input(8)→12+8(relu)→O(sigmoid)】利用糖尿病資料集訓練、評估模型(利用糖尿病資料集中的八個引數特徵預測一個0或1結果) 輸出結果 設計思路   實現程式碼 1、 2、  

windows下使用自己製作的資料訓練faster-rcnn(tensorflow版)用於目標檢測

步驟一 步驟二 步驟三 用你的Annotations,ImagesSets和JPEGImages替換…\Faster-RCNN-TensorFlow-Python3.5\data\VOCdevkit2007\VOC2007中對應資料夾

TensorFlow實戰Chapter-9下(DeepLabv3+在自己的資料訓練)

基本配置 資料集處理 我的資料集是3分類問題,但因為資料集的保密協議,在後面的demo中我沒有放出原圖片,我會盡量將訓練細節寫出來。為了方便記錄,我又使用了CamVid資料集(從這裡下載)測試了一下。 資料集處理分成三大步: 標註資料 製作

開始學caffe(九)Windows下實現影象識別

本系列文章主要介紹了在win10系統下caffe的安裝編譯,運用CPU和GPU完成簡單的小專案,文章之間具有一定延續性。 step1:準備資料集 資料集是進行深度學習的第一步,在這裡我們從以下五個連結中下載所需要的資料集: animal flower plane hou

開始學caffe(八)CaffeWindows環境下GPU版本的安裝

之前我們已經安裝過caffe的CPU版本,但是在MNIST手寫數字識別中,我們發現caffe的CPU版本執行速度較慢,訓練效率不高。因此,在這裡我們安裝了caffe的GPU版本,並使用GPU版本的caffe同樣對手寫MNIST數字集進行訓練。 step1: 安裝CUDA

開始山寨Caffe·陸IO系統()

你說你學過作業系統這門課?寫個無Bug的生產者和消費者模型試試!                               ——你真的學好了作業系統這門課嘛? 在第壹章,展示過這樣圖: 其中,左半部分構成了新版Caffe最惱人、最龐大的IO系統。 也是歷來最不重視的一部分。 第伍章又對左半

開始山寨Caffe·貳主存模型

本文轉自:https://www.cnblogs.com/neopenx/p/5190282.html 從硬體說起 物理之觴 大部分Caffe原始碼解讀都喜歡跳過這部分,我不知道他們是什麼心態,因為這恰恰是最重要的一部分。 記憶體的管理不擅,不僅會導致程式的立即崩潰,還會導致記憶體的

Python3爬蟲開始環境配置

話不多說,關於爬蟲的作用和介紹網上資料很多,不再累述。 “工欲善其事必先利其器”。 1.首先到Python官網進行Python安裝: 2.環境變數配置: (1)找到Python3安裝路徑,我的如下:C:\Users\Administrator\AppData\

開始學caffe(七)利用GoogleNet實現影象識別

一、準備模型 在這裡,我們利用已經訓練好的Googlenet進行物體影象的識別,進入Googlenet的GitHub地址,進入models資料夾,選擇Googlenet 點選Googlenet的模型下載地址下載該模型到電腦中。 模型結構 在這裡,我們利用之前講

開始學caffe(十)caffe中snashop的使用

在caffe的訓練期間,我們有時候會遇到一些不可控的以外導致訓練停止(如停電、裝置故障燈),我們就不得不重新開始訓練,這對於一些大型專案而言是非常致命的。在這裡,我們介紹一些caffe中的snashop。利用snashop我們就可以實現訓練的繼續進行。 在之前我們訓練得到的檔案中,我們發現

開始學caffe(四)mnist手寫數字識別網路結構模型和超引數檔案的原始碼閱讀

下面為網路結構模型 %網路結構模型 name: "LeNet" #網路的名字"LeNet" layer { #定義一個層 name: "mnist" #層的名字"mnist" type:

開始學caffe(二)caffe在win10下的安裝編譯

環境要求 作業系統:64位windows10 編譯環境:Visual Studio 2013 Ultimate版本 安裝流程 step1:檔案的下載 從GitHub新增連結描述中下載Windows版本的caffe,並進行解壓到電腦中。 step2:檔案修改 將壓縮包

Nginx 教程windows環境下的安裝、配置、使用以及設定為windows服務自啟動

目前國內各大入口網站已經部署了Nginx,如新浪、網易、騰訊等;國內幾個重要的視訊分享網站也部署了Nginx,如六房間、酷6等。新近發現Nginx 技術在國內日趨火熱,越來越多的網站開始部署Nginx。     相比apeach、iis,nginx以輕量級、高效能、穩定

開始學C++之虛擬函式多型(虛擬函式表指標、虛解構函式、object slicing虛擬函式、C++物件模型圖

#include <iostream>using namespace std;class CObject {public:     virtual void Serialize()     {         cout << "CObject::Serialize ..." <&

開始山寨Caffe·柒KV資料庫

你說你會關係資料庫?你說你會Hadoop? 忘掉它們吧,我們既不需要網路支援,也不需要複雜關係模式,只要讀寫夠快就行。                                         ——論資料儲存的本質 淺析資料庫技術 記憶體資料庫——STL的map容器 關係資料庫橫行已久,似乎大

開始山寨Caffe·玖BlobFlow

聽說Google出了TensorFlow,那麼Caffe應該叫什麼?                           ——BlobFlow 神經網路時代的傳播資料結構 我的程式碼 我最早手寫神經網路的時候,Flow結構是這樣的: struct Data { vector<d

開始山寨Caffe·捌IO系統(二)

生產者 雙緩衝組與訊號量機制 在第陸章中提到了,如何模擬,以及取代根本不存的Q.full()函式。 其本質是:除了為生產者提供一個成品緩衝佇列,還提供一個零件緩衝佇列。 當我們從外部給定了固定容量的零件之後,生產者的產能就受到了限制。 由兩個阻塞佇列組成的QueuePair,並不是Caffe的獨創,

開始山寨Caffe·伍Protocol Buffer簡易指南

你為Class外訪問private物件而苦惱嘛?你為設計序列化格式而頭疼嘛?                             ——歡迎體驗Google Protocol Buffer 面向物件之封裝性 歷史遺留問題 面向物件中最矛盾的一個特性,就是“封裝性”。 在上古時期,大牛們無聊地設計了