caffe编译参考:http://blog.csdn.net/cym1990/article/details/72630584
1.数据格式转换
Caffe采用leveldb或者lmdb的数据格式。
第一步就是数据的格式转换了。
编译如下图所示工程,可以生成文件convert_imageset.exe
本次训练是使用的车牌数据,只分2类,有车牌,无车牌。
在caffe根目录下新建data文件夹,在data文件夹下新建plate文件夹,plate文件夹有如下文件:
train和test文件夹存放原始数据,trainldb和testldb文件夹存放格式转换后的leveldb数据,mean存放均值文件,实验数据是车牌和非车牌二分类数据。部分数据大概如下:
有车牌:
无车牌:
在train图像数据文件夹中建立train.txt文件
在命令行中,cd到train图像数据文件夹中执行下面批处理命令:
dir /b/s/p/w *.jpg > train.txt
可以实现将文件夹中的所有文件的文件名和路径提取到train.txt中
生成如图所示:
然后使用替换功能调整为以下格式,图像后面的为标签,每个类别使用同一个标签表示(多个类别必须从0开始),可以通过查找替换功能,将jpg替换为jpg 0,这样可以快速加标签。
利用convert_imageset.exe生成对应的leveldb格式数据,注意参数和路径,参数部分可以查看conver_imageset.cpp文件中的定义。
我们可以写一个convert_imageset.bat文件,来执行数据格式转换,文件内容如下:
SET GLOG_logtostderr=1
D:\WorkSpace\caffe\caffe\Build\x64\Release\convert_imageset.exe --backend=leveldb --resize_width=64 --resize_height=64 D:\WorkSpace\caffe\caffe\data\plate\ D:\WorkSpace\caffe\caffe\data\plate\train\train.txt D:\WorkSpace\caffe\caffe\data\plate\train_ldb
pause
D:\WorkSpace\caffe\caffe\Build\x64\Release\convert_imageset.exe --backend=leveldb --resize_width=64 --resize_height=64 D:\WorkSpace\caffe\caffe\data\plate\ D:\WorkSpace\caffe\caffe\data\plate\test\test.txt D:\WorkSpace\caffe\caffe\data\plate\test_ldb
pause
可以看到我们在转换数据的时候,将所有数据大小统一调整为64*64,这样方便数据处理。
上面的命令先转换train数据格式,然后转换测试数据格式。
在命令行中的这个需要注意:
D:\WorkSpace\caffe\caffe\data\plate\ D:\WorkSpace\caffe\caffe\data\plate\train\train.txt
前面的文件夹加上后面文件
train.txt中每行的内容,需要保证是一个合法的绝对路径,这个路径就是需要寻找到每个文件的路径。同理测试数据一样。
生成成功后得到以下信息:
以上命令运行成功后,在train_ldb文件夹下生成对应的文件:
其他格式的数据转换,比如binary等可以参考examples下cifar10和mnist下的样例。这部分早晚要自己写的,可以多熟悉一下。
2.数据预处理
SET GLOG_logtostderr=1
D:\WorkSpace\caffe\caffe\Build\x64\Release\compute_image_mean.exe --backend=leveldb D:\WorkSpace\caffe\caffe\data\plate\train_ldb D:\WorkSpace\caffe\caffe\data\plate\mean\train_mean.binaryproto
pause
D:\WorkSpace\caffe\caffe\Build\x64\Release\compute_image_mean.exe --backend=leveldb D:\WorkSpace\caffe\caffe\data\plate\test_ldb D:\WorkSpace\caffe\caffe\data\plate\mean\test_mean.binaryproto
pause
以上命令会在mean文件夹中生成文件train_mean.binaryproto和test_mean.binaryproto
3.定义网络结构并训练
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
#crop_size: 227
mean_file: "D://WorkSpace//caffe//caffe//data//plate//mean//train_mean.binaryproto"
}
data_param {
source: "D://WorkSpace//caffe//caffe//data//plate//train_ldb"
batch_size: 256
backend: LEVELDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
#crop_size: 227
mean_file: "D://WorkSpace//caffe//caffe//data//plate//mean//test_mean.binaryproto"
}
data_param {
source: "D://WorkSpace//caffe//caffe//data//plate//test_ldb"
batch_size: 50
backend: LEVELDB
}
}
test_iter: 100
test_interval: 100
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 100000
display: 20
max_iter: 450000
momentum: 0.9
weight_decay: 0.0005
snapshot: 200
snapshot_prefix: "D://WorkSpace//caffe//caffe//data//plate//"
solver_mode: GPU
D:\WorkSpace\caffe\caffe\Build\x64\Release\caffe.exe train --solver=D:\WorkSpace\caffe\caffe\data\plate\solver.prototxt
pause
可能会遇到的文件:
(1)caffe训练数据时出现了Check failed: data_怎么办?
(2)路径文件,找不到数据,这个一般仔细检查文件都可以找出来,还有就是如果路径中包含有/t,也会导致路径不可用,可以在路径中使用//来代替\
(3)http://blog.csdn.net/zr459927180/article/details/51001536,参考此文章,遇到的文件有下面几个,可以参考:
1. caffe训练时遇到loss一直居高不下时:http://blog.sina.com.cn/s/blog_141f234870102w941.html
另外,均值一般都是训练集的均值,测试集正常是不知道,无法求出来的。
参考以下文章:
2.如何快糙好猛地在Windows下编译CAFFE并使用其matlab和python接口
3.http://blog.csdn.net/zr459927180/article/details/51001536
4.caffe windows训练测试自己的图片http://www.jianshu.com/p/607f1e51e3ab