1. 程式人生 > >caffe 05 win10 執行examples的cifar10測試用例

caffe 05 win10 執行examples的cifar10測試用例

01 資料

目錄 檔案型別 檔案作用
examples\cifar10 *.prototxt 網路定義檔案
examples\cifar10 create_cifar10.sh 生成lmdb的linxu shell指令碼
examples\cifar10 readme.md 等同於官網cifar10測試詳細介紹
examples\cifar10 train_*.sh linxu下執行cifar測試的各種命令列指令碼
data\cifar10 get_cifar10.sh 獲取測試資料linux shell指令碼

02 測試操作步驟

02.01 下載測試資料

根據examples\cifar10\readme.md檔案說明。開啟data\cifar10\get_cifar10.sh檔案。

#!/usr/bin/env sh
# This scripts downloads the CIFAR10 (binary version) data and unzips it.

DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"

echo "Downloading..."

wget --no-check-certificate http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz

echo "
Unzipping..." tar -xf cifar-10-binary.tar.gz && rm -f cifar-10-binary.tar.gz mv cifar-10-batches-bin/* . && rm -rf cifar-10-batches-bin # Creation is split out because leveldb sometimes causes segfault # and needs to be re-created. echo "Done."
data\cifar10\cifar-10-batches-bin目錄內檔案
batches.meta.txt
data_batch_1.bin
data_batch_2.bin
data_batch_3.bin
data_batch_4.bin
data_batch_5.bin
readme.html
test_batch.bin

02.02 生成lmdb資料

閱讀caffe\examples\cifar10\create_cifar10.sh內容。這個是Linux下面生成lmdb資料庫的指令碼。

#!/usr/bin/env sh
# This script converts the cifar data into leveldb format.
set -e

EXAMPLE=examples/cifar10
DATA=data/cifar10
DBTYPE=lmdb

echo "Creating $DBTYPE..."

rm -rf $EXAMPLE/cifar10_train_$DBTYPE $EXAMPLE/cifar10_test_$DBTYPE

./build/examples/cifar10/convert_cifar_data.bin $DATA $EXAMPLE $DBTYPE

echo "Computing image mean..."

./build/tools/compute_image_mean -backend=$DBTYPE \
  $EXAMPLE/cifar10_train_$DBTYPE $EXAMPLE/mean.binaryproto

echo "Done."

其中convert_cifar_data.bin對應vs2015的工程中的exaples目錄下的convert_cifar_data;compute_image_mean對應vs2015工程中的tools目錄下的compute_image_mean。

生成的可執行檔案是
build\x64\examples\cifar10\Debug\convert_cifar_data-d.exe
build\x64\examples\cifar10\Release\convert_cifar_data.exe
build\x64\tools\Debug\compute_image_mean-d.exe
build\x64\tools\Release\compute_image_mean.exe
如果運行了INSTALL,build\x64\install\bin下面也會有對應的檔案。
為了使用方便,模擬create_cifar10.sh寫一個windows版本的create_cifar10.bat。放在create_cifar10.sh相同目錄下。(注意文字最好採用utf8格式儲存)

@echo off & setlocal enabledelayedexpansion
:: examples\cifar10\create_cifar10.bat
::進入create_cifar10.bat所在磁碟
%~d0
::進入create_cifar10.bat所在目錄
cd %~dp0
:: 回到caffe根目錄
cd ..\..\

:: 網路定義檔案的位置,lmdb也生成在這裡
set EXAMPLE=examples\cifar10
:: 測試資料的位置,
set DATA=data\cifar10\cifar-10-batches-bin

:: 工程檔案生成的位置
::set cfg=Debug
::set BUILD=build\x64\examples\cifar10\%cfg%
::set convert_cifar_data=convert_cifar_data-d.exe
::set compute_image_mean=build\x64\tools\compute_image_mean-d.exe

:: 釋出檔案所在位置,即vs2015工程中執行INSTALL後,檔案的安裝位置
set BUILD=build\x64\install\bin
:: 可釋出的release版本lmdb生成工具
set convert_cifar_data=convert_cifar_data.exe
set compute_image_mean=build\x64\install\bin\compute_image_mean.exe
:: 生成資料型別
set DBTYPE=lmdb

echo.
echo "Creating !DBTYPE! start"
echo.
:: 刪除存在的資料庫目錄,如果目錄存在,會執行失敗
IF EXIST %EXAMPLE%\cifar10_train_%DBTYPE%. echo rmdir /S /Q %EXAMPLE%\cifar10_train_%DBTYPE%.
IF EXIST %EXAMPLE%\cifar10_train_%DBTYPE%. rmdir /S /Q %EXAMPLE%\cifar10_train_%DBTYPE%.
IF EXIST %EXAMPLE%\cifar10_test_%DBTYPE%. echo rmdir /S /Q %EXAMPLE%\cifar10_test_%DBTYPE%.
IF EXIST %EXAMPLE%\cifar10_test_%DBTYPE%. rmdir /S /Q %EXAMPLE%\cifar10_test_%DBTYPE%.

echo %BUILD%\%convert_cifar_data% %DATA% %EXAMPLE% %DBTYPE%
%BUILD%\%convert_cifar_data% %DATA% %EXAMPLE% %DBTYPE%
echo.
echo "Computing image mean..."
echo %compute_image_mean% -backend=%DBTYPE% ^
  %EXAMPLE%\cifar10_train_%DBTYPE% %EXAMPLE%\mean.binaryproto
%compute_image_mean% -backend=%DBTYPE% ^
  %EXAMPLE%\cifar10_train_%DBTYPE% %EXAMPLE%\mean.binaryproto
echo "Creating !DBTYPE! Done."

endlocal&goto :EOF
:EOF

儲存examples\mnist\create_cifar10.bat檔案後,在caffe根目錄執行:

examples\mnist\create_cifar10.bat

或者
在caffe根目錄下直接執行如下語句。(執行前確保examples\cifar10\目錄下沒有cifar10_train_lmdb和cifar10_test_lmdb目錄)

功能 cmd命令 結果
生成train、test資料 build\x64\install\bin\convert_cifar_data.exe data\cifar10\cifar-10-batches-bin examples\cifar10 lmdb examples\cifar10\cifar10_train_lmdb

examples\cifar10\cifar10_test_lmdb
生成mean.binaryproto資料 build\x64\install\bin\compute_image_mean.exe -backend=lmdb examples\cifar10\mean.binaryproto examples\cifar10\mean.binaryproto

生成的資料庫檔案在examples\cifar10\目錄下。

02.03 執行測試資料

開啟caffe\examples\cifar10\train_quick.sh指令碼。內容如下:

#!/usr/bin/env sh
set -e

TOOLS=./build/tools

$TOOLS/caffe train \
  --solver=examples/cifar10/cifar10_quick_solver.prototxt [email protected]

# reduce learning rate by factor of 10 after 8 epochs
$TOOLS/caffe train \
  --solver=examples/cifar10/cifar10_quick_solver_lr1.prototxt \
  --snapshot=examples/cifar10/cifar10_quick_iter_4000.solverstate.h5 [email protected]

根據caffe\examples\cifar10\train_quick.sh內容,改寫windows bat指令碼caffe\examples\cifar10\train_quick.bat。(注意:最好採用utf8編碼儲存)。

@echo off & setlocal enabledelayedexpansion
:: examples\cifar10\train_quick.bat
::train_quick.bat所在磁碟
%~d0
::train_quick.bat所在目錄
cd %~dp0
:: 回到caffe根目錄
cd ..\..\
::caffe執行檔案目錄
::set caffe_path=build\x64\install\bin
set caffe_path=build\x64\tools\release
echo.
echo %caffe_path%\caffe train ^
  --solver=examples\cifar10\cifar10_quick_solver.prototxt
%caffe_path%\caffe train ^
  --solver=examples\cifar10\cifar10_quick_solver.prototxt
echo.
:: reduce learning rate by factor of 10 after 8 epochs
echo %caffe_path%\caffe train ^
  --solver=examples\cifar10\cifar10_quick_solver_lr1.prototxt ^
  --snapshot=examples\cifar10\cifar10_quick_iter_4000.solverstate.h5
%caffe_path%\caffe train ^
  --solver=examples\cifar10\cifar10_quick_solver_lr1.prototxt ^
  --snapshot=examples\cifar10\cifar10_quick_iter_4000.solverstate.h5
echo.
::mkdir build\x64\log
::examples\cifar10\train_quick.bat > build\x64\log\cifar10_train_quick.log 2>&1
endlocal&goto :EOF
:EOF

在caffe根目錄執行examples\cifar10\train_quick.bat。

examples\cifar10\train_quick.bat

執行結果:
這裡寫圖片描述

02.04 儲存執行日誌

在caffe根目錄下(D:\Git\DeepLearning\caffe)執行如下命令。建立一個執行日誌目錄,執行測試用例。把測試結果重定向到指定執行日誌檔案。

mkdir build\x64\log
examples\cifar10\train_quick.bat > build\x64\log\cifar10_train_quick.log 2>&1

執行後,檢視日誌檔案build\x64\log\cifar10_train_quick.log。
這裡寫圖片描述

02.05 執行其他cifar10測試用例

根據examples/cifar/*.sh,可以執行其他測試網路。
比如train_full.sh:

#!/usr/bin/env sh
set -e

TOOLS=./build/tools

$TOOLS/caffe train \
    --solver=examples/cifar10/cifar10_full_solver.prototxt [email protected]

# reduce learning rate by factor of 10
$TOOLS/caffe train \
    --solver=examples/cifar10/cifar10_full_solver_lr1.prototxt \
    --snapshot=examples/cifar10/cifar10_full_iter_60000.solverstate.h5 [email protected]

# reduce learning rate by factor of 10
$TOOLS/caffe train \
    --solver=examples/cifar10/cifar10_full_solver_lr2.prototxt \
    --snapshot=examples/cifar10/cifar10_full_iter_65000.solverstate.h5 [email protected]

根據train_full.sh指令碼描述,在cmd視窗,caffe根目錄一次執行如下命令,即完成train_full.sh測試用例。(train_full.sh測試用例比較耗時)

build\x64\tools\Release\caffe train --solver=examples\cifar10\cifar10_full_solver.prototxt

build\x64\tools\Release\caffe train --solver=examples\cifar10\cifar10_full_solver_lr1.prototxt --snapshot=examples\cifar10\cifar10_full_iter_60000.solverstate.h5

build\x64\tools\Release\caffe train --solver=examples\cifar10\cifar10_full_solver_lr2.prototxt --snapshot=examples\cifar10\cifar10_full_iter_65000.solverstate.h5