在编译完caffe之后, 在./build/tools
下面可以找到caffe本身提供的工具
MacOS
依赖安装:
mkdir build
- 创建
build
文件夹
cmake .. -DCMAKE_CXX_STANDARD=11 -DCPU_ONLY=ON
- 进入
build
执行C++11
的编译CPU版本
make all -j8
命令行
如果要执行caffe程序,都需要加./build/tools/
前缀,
sudo sh ./build/tools/caffe train --solver=examples/mnist/train_lenet.sh
train : 训练或finetune模型(model)
其中的<args>
参数有:
-solver
: 必选参数, 模型的配置文件
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt
-gpu
: 可选参数, 指定用哪一块gpu进行训练,-gpu all
使用所有的gpu
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -gpu 2
-snapshot
: 可选参数, 指定从快照(snapshot)中恢复训练, 可以在solver配置文件设置快照,保存solverstate。
# ./build/tools/caffe train -solver examples/mnist/lenet_solver.prototxt -snapshot examples/mnist/lenet_iter_5000.solverstate
-weights
: 可选参数, 加载预先训练好的caffemodel模型来fine-tuning新的模型,不能和-snapshot同时使用
# ./build/tools/caffe train -solver examples/finetuning_on_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel
-iteration
: 可选参数,迭代次数,默认为50。 如果在配置文件文件中没有设定迭代次数,则默认迭代50次。-model
: 可选参数,定义在protocol buffer文件中的模型。也可以在solver配置文件中指定。-sighup_effect
: 可选参数。用来设定当程序发生挂起事件时,执行的操作,可以设置为snapshot, stop或none, 默认为snapshot-sigint_effect
: 可选参数。用来设定当程序发生键盘中止事件时(ctrl+c), 执行的操作,可以设置为snapshot, stop或none, 默认为stop
test : 测试模型
test
参数用在测试阶段,用于最终结果的输出,要模型配置文件中我们可以设定需要输入accuracy还是loss.
# ./build/tools/caffe test -model examples/mnist/lenet_train_test.prototxt -weights examples/mnist/lenet_iter_10000.caffemodel -gpu 0 -iterations 100
- 利用训练好了的权重(-weight),输入到测试模型中(-model),用编号为0的gpu(-gpu)测试100次(-iteration)
time : 显示程序执行时间
time参数用来在屏幕上显示程序运行时间
# ./build/tools/caffe time -model examples/mnist/lenet_train_test.prototxt -iterations 10
- 这个例子用来在屏幕上显示lenet模型迭代10次所使用的时间。包括每次迭代的forward和backward所用的时间,也包括每层forward和backward所用的平均时间。
device_query : 显示gpu信息
device_query参数用来诊断gpu信息
# ./build/tools/caffe device_query -gpu all
1 | I1119 06:48:51.387487 966 caffe.cpp:138] Querying GPUs all |
lmdb转换
在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致。而在caffe中经常使用的数据类型是lmdb或leveldb,因此必须从原始图片文件转换成caffe中能够运行的db(leveldb/lmdb)文件, 在caffe中提供了convert_imageset.cpp,存放在根目录下的tools文件夹下。编译之后生成对应的可执行文件放在buile/tools/
下面,这个文件的作用就是用于将图片文件转换成caffe框架中能直接使用的db文件。
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
需要带四个参数:
FLAGS
: 图片参数组,ROOTFOLDER/
: 图片存放的绝对路径,从linux系统根目录开始LISTFILE
: 图片文件列表清单,一般为一个txt文件,一行一张图片DB_NAME
: 最终生成的db文件存放目录
关于FLAGS参数组
-gray
: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false
-shuffle
: 是否随机打乱图片顺序。默认为false
-backend
:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
-resize_width/resize_height
: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。 程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
-check_size
: 检查所有的数据是否有相同的尺寸。默认为false,不检查
-encoded
: 是否将原图片编码放入最终的数据中,默认为false
-encode_type
: 与前一个参数对应,将图片编码为哪一个格式:png,jpg …
我们以caffe自带的图片作为例子, 图片存放在example/images/
下,
- 生成图片清单
vim examples/images/createImageslist.sh
: 创建shell文件
1 | /usr/bin/env sh |
# bash examples/images/createImageslist.sh
Create train.txt…
Done..
生成了train.txt文件可作为LISTFILE
的参数:
1 | cat.jpg 1 |
- 生成db文件
vim examples/images/creat_lmdb.sh
添加以下内容:
1 | #!/usr/bin/en sh |
shuffle
打乱图片顺序, 设置参数resize_height
和resize_width
将所有图片尺寸都变为256*256
1 | # sh examples/images/creat_lmdb.sh |
这样就把原始图片转化为lmdb文件
图片均值
图片减去均值后,再进行训练和测试,会提高速度和精度, 计算所有训练样本的平均值,计算出来后,保存为一个均值文件, 在以后的测试中,就可以直接使用这个均值来相减,而不需要对测试图片重新计算。
- 计算二进制格式的均值
caffe中使用的均值数据格式是binaryproto
, 提供了一个计算均值的文件compute_image_mean.cpp
,放在caffe根目录下的tools文件夹里面。编译后的可执行文件放在build/tools/
下面, 使用刚刚生成的examples/images/img_train_lmdb/
lmdb文件
./build/tools/compute_image_mean examples/images/img_train_lmdb/ examples/images/meam_shang.binaryproto
在examples/images/
下生成meam_shang.binaryproto文件
两个参数:
examples/images/img_train_lmdb/
: 表示需要计算均值的数据,格式为lmdb的训练数据examples/images/meam_shang.binaryproto
: 计算出来的结果保存文件
- 用python计算均值
1 | #!/usr/bin/env python |
将python文件放在examples/images/
目录下:
python convert_mean.py meam_shang.binaryproto mean_shang.npy
mean.binaryproto 就是经过前面步骤计算出来的二进制均值。
mean.npy就是我们需要的python格式的均值