caffe cifar10試跑問題總結

caffe cifar10試跑問題總結html

[daniel]python

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

#! /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/

相關文章
相關標籤/搜索