01 资料
caffe官网Examples中有关于cifar10测试的详细介绍。
http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
caffe github下载的代码中有关于cifar10的网络定义示例和下载数据sh文件。
目录 | 文件类型 | 文件作用 |
---|---|---|
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."
可以看到测试数据下载地址:http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz。
这个是c++程序处理的数据包。
从http://www.cs.toronto.edu/~kriz/cifar.html页面可以找到三种测试数据压缩包。
版本 | 大小 | 下载地址 |
---|---|---|
binary | 162 MB | CIFAR-10 binary version (suitable for C programs) |
python | 163 MB | CIFAR-10 python version |
matlab | 175 MB | CIFAR-10 Matlab version |
把 http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz 保存在data\cifar10目录,并解压到data\cifar10\cifar-10-batches-bin。
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 $@
# 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 $@
根据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 $@
# 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 $@
# 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 $@
根据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