1. 程式人生 > >caffe cifar10試跑問題總結

caffe cifar10試跑問題總結

library rect xcod -c hit fall quick module ol3

caffe cifar10試跑問題總結

[daniel]

  • 寫了一個腳本可以直接用來添加環境變量:/Users/songdanzju/daniel_script/export_for_ananconda.sh

#! /bin/bash

export PATH=~/ananconda/bin:$PATH

export DYLD_FALLBACK_LIBRARY_PATH=~/anaconda:~/anaconda/lib:/usr/local/lib:/usr/lib

  • 準備數據庫

cd $CAFFE_ROOT #切換目錄到自己的caffe-master的安裝目錄下

sudo ./data/cifar10/get_cifar10.sh

sudo ./examples/cifar10/create_cifar10.sh

> 執行的時候路徑有問題,所以把get_cifar10.sh和create_cifar10.sh 拷貝到caffe文件夾下,並在.sh文件中添加了環境變量, 通過在腳本中添加了語句:sh /Users/songdanzju/daniel_script/export_for_ananconda.sh 實現,再cd $CAFFE_ROOT,執行sudo ./get_cifar10.sh和sudo ./create_cifar10.sh

運行之後將會在examples/cifar10中出現數據庫文件./cifar10-leveldb 和數據庫圖像均值二進制文 件./mean.binaryproto

> 由於我電腦上同時安裝了python2.7和python3.5,所以在上一步會報錯,所以在caffe的Makefile.config文件中關閉了leveldb,然後重新編譯了caffe,解決了問題。這一步測試出現的是兩個分開的數據庫文件:測試和訓練,

查看~/caffe/examples/cifar10/中出現:

cifar10_test_lmdb

cifar10_train_lmdb

mean.binaryproto

> 環境變量問題:caffe在make all之前要添加環境變量,另外試跑cifar10時是在sudo下執行的腳本

>由於sudo執行的~/caffe/ ,所以要在環境變量需要在.sh文件中單獨添加:sh daniel_script/export_for_ananconda.sh

  • 模型說明

該 CNN 由卷積層,POOLing 層,非線性變換層,在頂端的局部對比歸一化線性分類器組成。 該模型的定義在 CAFFE_ROOT/examples/cifar10/cifar10_quick_train.prototxt 中, 可以進行修改。其實後綴為 prototxt 很多都是用來修改配置的

> 由於編譯Caffe的時候沒有用GPU, 所以做訓練的時候,訓練和測試的腳本中的solver_mode要修改為CPU

即cifar10_quick_solver.prototxt和cifar10_quick_solver_lr1.prototxt文件的最後

  • 訓練和測試

訓練這個模型非常簡單,當我們寫好參數設置的文件 cifar10_quick_solver.prototxt 和定義的 文件 cifar10_quick_train.prototxt 和 cifar10_quick_test.prototxt 後,運行 train_quick.sh 或者在 終端輸入下面的命令:cd $CAFFE_ROOT/examples/cifar10
./train_quick.sh
即可,train_quick.sh 是一個簡單的腳本,會把執行的信息顯示出來,培訓的工具是 train_net.bin,cifar10_quick_solver.prototxt 作為參數。

> 同樣是路徑問題,所以拷貝了train_quick.sh到caffe文件夾下,並執行腳本添加環境變量:/Users/songdanzju/daniel_script/export_for_ananconda.sh

**** 讀書筆記 2 用一個預訓練模型提取特征

> 這一篇比較詳細,參考[http://blog.csdn.net/u013634684/article/details/50143843],文章中直接寫了腳本執行這一步,可以參考,我仿照他的腳本寫了~/daniel_script/extract_features.sh,還未完成。

> 特征提取文件:build/tools/extract_features.bin

2.1 制作一個數據庫先做一個臨時文件夾存放東西。mkdir examples/_temp

find `pwd`/examples/images -type f -exec echo {} \; > examples/_temp/temp.txt
我們將使用 imagedatalayer 預計標簽之後的每一個文件名,所以讓我們添加一個 0 到每一行 的末尾sed "s/$/ 0/" examples/_temp/temp.txt > examples/_temp/file_list.txt 這樣,我們將得到兩個文件 temp.txt 和 file_list.txt

2.2.定義特征提取網絡結構 在實踐中,從一個數據集中減去均值圖像對於提高分類準確性很重要,因此從 ILSVRC dataset 中下載均值圖像數據庫

data/ilsvrc12/get_ilsvrc_aux.sh
我們將使用其中的 data/ilsvrc12/imagenet_mean.binaryproto 去定義網絡結構。 將定義結構的文件 cope 到我們的臨時文件夾。

cp examples/feature_extraction/imagenet_val.prototxt examples/_temp 然後,我們進入 imagenet_val.prototxt 更改路徑。更改其中$CAFFE_DIR 的地方 下圖是我做的改動。

transform_param {

mirror: false

crop_size: 227

mean_file: "/Users/songdanzju/caffe/data/ilsvrc12/imagenet_mean.binaryproto"

}

image_data_param {

source: "/Users/songdanzju/caffe/examples/_temp/file_list.txt"

batch_size: 50

new_height: 256

new_width: 256

}

2.3.提取特征

執行指令:(這是一條指令)

build/tools/extract_features.bin examples/imagenet/caffe_reference_imagenet_model examples/_temp/imagenet_val.prototxt fc7 examples/_temp/features 10 lmdb

> 執行的時候出錯:dyld: Library not loaded … Reason: Image not loaded,環境變量問題,export DYLD_FALLBACK_LIBRARY_PATH=~/anaconda:~/anaconda/lib:/usr/local/lib:/usr/lib ,解決。[http://stackoverflow.com/questions/17703510/dyld-library-not-loaded-reason-image-not-loaded]

> 關於permission denied 的問題:[http://www.aichengxu.com/view/2488942], 權限問題:chmod 777 filename(修改為最高權限),ls -l filename查看文件權限,或者sudo su進入root

> 問題:examples/imagenet/中缺少預訓練模型(也就是已經訓練好的模型)caffe_reference_imagenet_model ,下載位置:[http://dl.caffe.berkeleyvision.org/], copy到examples/imagenet/目錄下

其中 fc7 是最高層的特征,我們也可以使用其他層提取,像 conv5 或 pool3 最後的參數是數據的批次特征保存在 LevelDB examples/_temp/features ,可以運用到其他代碼了。 這裏可以發現,特征文件中 5 個文件和 cifar10 中的 leveldb 是相似的。 _temp 下 features

Cifar10 下特征數據庫

因此,這是我們訓練時組建模型時必要的文件。

> 我的examples/_temp/features/下是兩個文件:data.mdb lock.mdb,我的examples/cifar10/cifar10_train_lmdb/ 下兩個文件:data.mdb lock.mdb

> 在這個過程中如果遇到如下錯誤:

表示參數不夠,檢查參數個數是否對。

其中上面的第5個參數,表示提取特征數據的batch的數目,解釋下,網絡中我們的batch_size,表示一次提取特征的圖片數,而batch就是總的圖片數除以batch_size取整即可。

即提取的特征是batch_size的整數倍,如果圖片數不能整除batch_size網絡會自動從開始的圖片中自動補入。

**** 學習筆記 3 用自己的數據訓練和測試“CaffeNet

參考一篇很詳細的教程:caffe學習筆記6--訓練自己的數據集(帶腳本),這裏沒有詳細寫自己的過程

http://www.voidcn.com/blog/thystar/article/p-5782103.html

> 制作自己的數據集:參考資源:

http://blog.csdn.net/yhl_leo/article/details/50801226

http://blog.csdn.net/deeplearninglc007/article/details/40086503

本學習筆記有點脫離了原文,原文是用 ImageNet1000 類的數據庫,而因為電腦內存不 足,只能自己模仿做一個小的數據庫進行下去。

本來教程是假設已經下載了 ImageNet 訓練數據和驗證數據(非常大),並以下面的格式 存儲在磁盤:

/path/to/imagenet/train/n01440764/n01440764_10026.JPEG /path/to/imagenet/val/ILSVRC2012_val_00000001.JPEG

裏面是各種的分類圖。

因為實在太大,所以我們改為模仿搭建自己的數據庫。

在 data 中新建文件夾 myself

> 我利用整理好的trainset(共400張,裏面可以有不同categroy的文件夾),valset(247張),testset,執行~/Desktop/test/build_train_txt, ~/Desktop/test/build_val_txt, ~/Desktop/test/build_test_txt, 制作圖片路徑與對應標簽文件:train_txt, val_txt, test_txt

我的數據集路徑

訓練樣本存放路徑

trainset: /Users/songdanzju/caffe/data/myself/train/trainset

train.txt: /Users/songdanzju/caffe/data/myself/train/train.txt

交叉驗證樣本存放路徑

valset /Users/songdanzju/caffe/data/myself/train/valset

val.txt /Users/songdanzju/caffe/data/myself/train/val.txt

測試樣本存放路徑

testset: /Users/songdanzju/caffe/data/myself/test/testset

test.txt: /Users/songdanzju/caffe/data/myself/test/test.txt

> 生成lmdb文件的時候出現問題:

原因:train_lmdb 和val_lmdb文件is already exists,刪掉,再運行,解決。

>

讀書筆記 4 學習搭建自己的網絡 MNIST caffe 上進行訓練與學習

——————————————————————————————————

> 問題:執行./examples/mnist/create_mnist.sh時候出錯:

WARNING: Logging before InitGoogleLogging() is written to STDERR

F0111 15:36:44.385371 2933224384 convert_mnist_data.cpp:144] This example requires LevelDB and LMDB; compile with USE_LEVELDB and USE_LMDB.

準備重新編譯caffe,結果cmake時出錯:

CMake Error at /usr/local/Cellar/cmake/3.7.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:138 (message):

Could NOT find vecLib (missing: vecLib_INCLUDE_DIR)

解決方法:

open the CMakeCache.txt file,
find this line:
//vecLib include directory
vecLib_INCLUDE_DIR:PATH=/System/Library/Frameworks/vecLib.framework/Headers

change to:
//vecLib include directory
vecLib_INCLUDE_DIR:PATH=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/vecLib.framework/Headers

然後,

(caffe_root)

cd build

cmake ..

make

______________________________________________

> 問題:執行net.set_phase_test()發現錯誤:

AttributeError Traceback (most recent call last)

<ipython-input-20-23af18ee8508> in <module>()

----> 1 net.set_phase_test()

2 net.set_mode_cpu()

AttributeError: ‘Classifier‘ object has no attribute ‘set_phase_test‘

解決:import caffe 然後dir(caffe)發現沒有set_phase_test,別人的做法:I was able to remove it from my python classify script and everything still seemed to work,我刪除以後發現net.set_mode_cpu()同樣報錯,於是改成caffe.set_mode_cpu(),解決。

> 可視化圖像特征的代碼:filter_visualization.ipynb

https://github.com/intelcaffe/caffe-old/blob/master/examples/filter_visualization.ipynb

各部分源碼(全,各種ipynb都有):http://nbviewer.jupyter.org/github/BVLC/caffe/tree/master/examples/

caffe cifar10試跑問題總結