windows下運行caffe例子:cifar10圖像訓練生成caffemodel

碩士畢業論文第二點扯到了CNN上,準備用caffe框架來做,裝好windows下caffe後運行了第一個經典例子LeNet :參考:http://blog.csdn.net/tianrolin/article/details/51434687
運行第二個cifar10例子時,不會寫bat文件,運行也各種錯誤,這裏總結一下我遇到的問題和解決辦法。親測有用!

一、數據集準備

到官網中下載cifar10數據集,如果使用的是c++,那麼下載.bin文件。數據集介紹已經很詳細了。cifar10數據集官網下載
下載並解壓,看到共有6個.bin文件,前面五個是訓練集,最後一個是測試集。

二、將數據集轉成leveldb格式

用vs2013打開項目工程。有一個project是convert_cifar_data。(若沒有,則可以在Solution新建一個cuda project,導入tools文件夾中的convert_cifar_data.cpp文件,配置環境即可)。
編譯這個project,之後會在../../examples/cifar10/文件夾下找到convert_cifar_data.exe。
新建兩個文件夾,分別命名爲input_folder,output_folder。input_folder中放入第一階段準備好的cifar10數據。output_folder爲轉換數據之後存儲位置。
同級目錄下新建一個批處理文件,後綴名.bat,輸入以下內容並保存。

    convert_cifar_data.exe  input_folder output_folders leveldb  
    pause  

這裏將數據集轉成了leveldb格式。運行convet_cifar_data.bat文件,完成數據的轉換。

三、計算數據的均值文件

新建一個cuda project,命名爲compute_image_mean,導入tools文件夾中的compute_image_mean.cpp文件,配置環境。

編譯,輸出路徑爲爲../../bin\,所以,在bin 文件夾下找到生成的compute_image_mean.exe。
將第二階段生成的input_folder,output_folder拷貝過來。同級目錄下新建一個.bat文件。輸入以下內容並保存。

    compute_image_mean.exe output_folders/cifar10_train_leveldb mean.binaryproto     
    pause  

運行compute_image_mean.bat文件,生成了mean.binaryproto文件。這個文件即爲均值文件。

四、訓練cifar10數據集

在examples/cifar10/文件夾中,找到cifar10_quick_trian_test.prototxt。
修改裏面的mean_file和source的路徑。backend一律改爲LEVELDB。
只要是編譯好的caffe框架,在bin文件夾裏面都有一個caffe.exe。這是一個訓練數據集的可執行文件,在上級目錄下新建一個.bat,添加內容,保存並運行。

    .\bin\caffe.exe train --solver=examples/cifar10/cifar10_quick_solver.prototxt  
    pause  

看到在dos窗口已經開始訓練了,訓練迭代次數等參數均在cifar10_quick_solver.prototxt文件中。這裏採用了gpu訓練,迭代了4000次,最終的訓練精度爲0.7061。
在examples/cifar10/文件夾中,找到了訓練出來的模型cifar10_quick_iter_4000.caffemodel。
結果如下:
這裏寫圖片描述

出現問題和注意事項:

1. 問題一:路徑問題

  • 就是要注意替換.prototxt文件中的mean_filesource的路徑,以及caffe.exe等文件的路徑也要確保.bat文件可以找到並運行。(我是本辦法:寫絕對路徑,因爲一直不知道環境變量怎麼設置)

2. 報錯: “db_lmdb.hpp:14] Check failed: mdb_status == 0 (112 vs. 0) 磁盤空間不足。”

  • 這問題是由於lmdb在windows下無法使用lmdb的庫,所以要改成leveldb

           但是要**注意**,由於backend默認的是lmdb,所以你每一次用到生成的圖片leveldb數據的時候,
    
           都要把“--backend=leveldb”帶上,這個很容易忘了,
    

還有在.prototxt中

               data_param {
                      source: "./mysample_val_leveldb"
                      batch_size: 100
                      backend: LEVELDB     //這個也要改掉的,原來是LMDB
                    }
第二個問題參考:http://blog.csdn.net/u010595179/article/details/50581570
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章