首先,贴参考:caffe_root\caffe-master\examples\imagenet, (这是windows下的脚本运行,用于训练建模)
caffe_root\caffe-master\examples\cpp_classification\classification.cpp(用于分类)
所使用的顺序是1.create_imagenet.sh(将图片转成lmdb格式,并统一大小) 。2.make_imagenet_mean.sh(生成均值文件)。3.train_caffenet.sh(训练网络)。4.classification.cpp(对图片进行分类)
1.图片格式转换
Caffe是用训练集和交叉验证集进行建模,最后使用测试集测试。
1.TrainSet 2.CrossValidate Set(val) 3.TestSet (最好将不同的种类的这三个文件分开),网上百度点数据即可。这步是将图片转换成LMDB格式,首先看create_imagenet.sh,它其实就是一个命令:
$TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$TRAIN_DATA_ROOT \
$DATA/Train.txt \
$EXAMPLE/ilsvrc12_train_lmdb
convert_imageset在 caffeBuilder/Build/x64/Release/ (当然这需要你编译过Caffe,并且选择x64和Release),所以修改上面的环境变量TOOLS为caffeBuilder/Build/x64/Release/(路径没写全,因为每个人的不一样,我写的是绝对路径),resize_height将图片处理后的高度像素,同理resize_width,shuffle为打乱图片顺序,TRAIN_DATA_ROOT为存放的训练集的路径,Train.txt是图片+标签,$EXAMPLE/ilsvrc12_train_lmdb为输出路径,随意填写路径。
发现没有Train.txt。使$DATA加上Train.txt里面的每一行都可以指定一张图片,后面再加标签即可,为了方便,之前将每类都分开存放,这是就可以用cmd打开Train,输入:
dir /s /on /b > $DATA/***Train.txt
$DATA,***Train.txt按自己情况进行替换,之后使用notepad等打开,加入标签,然后将每一类的TrainSet,以及Train.txt放在一起,就是我们要输入的数据和不同种类(标签)。之后,将CrossValidate Set也进行数据和文本的准备,在create_imagenet.sh中的
GLOG_logtostderr=1 $TOOLS/convert_imageset \
--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
--shuffle \
$VAL_DATA_ROOT \
$DATA/Val.txt \
$EXAMPLE/ilsvrc12_val_lmdb
就是对交叉验证集的转换。
Tips:如果使用脚本运行,那么路径上不能有中文。
2.图片均值化
打开make_imagenet_mean.sh,只对TrainSet进行均值化
$TOOLS/compute_image_mean $EXAMPLE/ilsvrc12_train_lmdb \
$DATA/imagenet_mean.binaryproto
$TOOLS 路径相同,ilsvrc12_train_lmdb 就是生成的lmdb文件,写好路径。imagenet_mean.binaryproto为输出的文件,随意写,后缀不变就行。
3.建模训练
打开train_caffenet.sh
./build/tools/caffe train \
--solver=models/bvlc_reference_caffenet/solver.prototxt