caffe cifar10試跑問題總結html
[daniel]python
#! /bin/bashgit
export PATH=~/ananconda/bin:$PATH github
export DYLD_FALLBACK_LIBRARY_PATH=~/anaconda:~/anaconda/lib:/usr/local/lib:/usr/lib 數據庫
cd $CAFFE_ROOT #切換目錄到本身的caffe-master的安裝目錄下bash
sudo ./data/cifar10/get_cifar10.sh網絡
sudo ./examples/cifar10/create_cifar10.shapp
> 執行的時候路徑有問題,因此把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 ,python2.7
運行以後將會在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/