step1:将图片数据转化为lmdb格式

caffe中建议将图片转化为lmdb格式,我们可以利用caffe提供的工具中的convert_imageset,这个工具是需要使用open cv,因此在配置caffe中需要注意。我使用的OPENCV的2.4。

## Refer to http://caffe.berkeleyvision.org/installation.html
# Contributions simplifying and improving our build system are welcome!

# cuDNN acceleration switch (uncomment to build with cuDNN).
# USE_CUDNN := 1

# CPU-only switch (uncomment to build without GPU support).
# CPU_ONLY := 1

# uncomment to disable IO dependencies and corresponding data layers
  USE_OPENCV := 1
#  USE_LEVELDB := 1
  USE_LMDB := 1

# uncomment to allow MDB_NOLOCK when reading LMDB files (only if necessary)
#    You should not set this flag if you will be reading LMDBs with any
#    possibility of simultaneous read and write
# ALLOW_LMDB_NOLOCK := 1

# Uncomment if you\’re using OpenCV 3
# OPENCV_VERSION := 3

convert_imageset需要设定相关参数,可以参考http://www.cnblogs.com/denny402/p/5082341.html。

需要带四个参数:

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\’……

}

ROOTFOLDER/: 图片存放的绝对路径,从linux系统根目录开始

LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片

DB_NAME: 最终生成的db文件存放目录

写成一个脚本convertlmdb.sh,由于我打算用AlexNet,所以对图片进行了一下resize。

 1 IMAGE=/home/caffe-master/trainimage/
 2 LABEL=/home/caffe-master/train_label.txt
 3 CAFFE_PATH=/home/caffe-master
 4 LMDB_PATH=/home/train_lmdb
 5 rm -rf $LMDB_PATH
 6 $CAFFE_PATH/build/tools/convert_imageset \
 7 --backend=lmdb \
 8 --resize_height=227 --resize_width=227 \
 9 $IMAGE \
10 $LABEL \
11 $LMDB_PATH

 step2:计算均值

 在模型的输入中,需要计算训练数据中的均值,caffe同样提供了工具来进行计算。

 

1 CAFFE-MASTER
2 LMDB_PATH=/home/caffe-master/data/pedestrian/test_lmdb
3 MEAN_PATH=/home/caffe-master/data/pedestrian/testmean.binaryproto
4 $CAFFE-MASTER/build/tools/compute_image_mean \
5 $LMDB_PATH \
6 $MEAN_PATH

 

 

 

  step3:定义模型和solver

关于模型的参数可以参考我的caffe——常用layer参数我们使用CAFFENET,这个网络是对Alexnet的实现,protottxt可以在/caffe-master/models/bvlc_reference_caffenet中找到。对于训练策略,我们可以将文件中的solver.prototxt文件进行修改,使用了随机梯度下降的方法,训练策略可以参考http://caffe.berkeleyvision.org/tutorial/solver.html

#网络定义
net: "models/bvlc_reference_caffenet/train_val.prototxt" #测试集测试时迭代的次数
test_iter:
1000
#测试间隔 test_interval: 1000 #起始学习率
base_lr:
0.01
#学习率变化策略,step是递减的 lr_policy: "step" gamma: 0.1
#学习率递减的间隔 stepsize: 100000 #显示loss的次数
display:
20 #最大训练次数
max_iter:
450000 momentum: 0.9 weight_decay: 0.0005 #保存参数的次数
snapshot:
10000 #参数保存位置
snapshot_prefix:
"models/bvlc_reference_caffenet/caffenet_train" #使用CPU或GPU
solver_mode: GPU

 

step4:开始训练

训练可以使用tools中的caffe,在命令行输入caffe我们可以看到相关的参数提示。

编写一个训练脚本,solver参数是必须给定的,model可以使用已经训练好的模型进行继续训练,设定–snapshot可以继续未完成的训练。

1 ./build/tools/caffe train \
2 --solver=/home/caffe-master/models/cifar10/solver.prototxt \

 

版权声明:本文为leo-sun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/leo-sun/p/6044232.html