文介绍如何使用caffe对自己的图像数据进行分类。
1 图片数据库准备
由于图片数据收集比较费时,实验室数据库分为5类,1 2 3 4 5类,train150张,val256张。
新建一个文件夹leveldb,放自己的数据,在leveldb文件夹下新建train和val文件夹,train文件夹下新建1、2、3、4、5文件夹分别存放150张类别图片,val文件夹同样如此。注样如此。
train文件夹
val文件夹
1 2 3 4 5类文件夹内存储的是每类的图片,比如我的1文件夹中为
2 转换成leveldb格式
在leveldb文件夹下新建两个txt文件:train.txt和val.txt,列出对应图片名及其标签。
数据量较少的可以手动标签,数据量较大的话,可以写批处理命令,比较方便。
批处理的方式可以使用.bat命令行,
注意:标签一定要从零开始标起
打开新件的文本文档,并输入DIR *.* /B > 文件名称列表.txt
保存后关闭。然后使用word打开txt,替换那种方式更改名称
请注意前面文件名称的路径问题,这些如果在转换格式的命令行中,若报错找不到该图片的话就是名称路径问题,根据报错的路径更改txt中图片的名称,0 1 2 3 4代表五类数据
生成列表后,编译convert_imageset.cpp
在\caffe-master\Build\x64\Release\convert_imageset.exe。做一个批处理命令将图片数据转换成leveldb格式。
在caffe-windows文件夹下新建convertimage2ldb.bat。
.bat命令可以由txt改后缀得到,前面是命令,中间是resize大小,--shuffle --backend="leveldb"是leveldb数据格式,对应的--shuffle --backend="lmdb"是lmdb数据格式 ,F:\caffe-master\data\leveldb\train F:\caffe-master\data\leveldb\train.txt是之前定义的train的文件路径,F:\caffe-master\data\leveldb\mtrainldb是存储转换好的训练数据的路径。
双击运行,在leveldb文件夹下就会出现mtrainldb文件夹。
同理可得到mvalldb。这两个就是caffe需要的数据。
注意,我的leveldb文件夹是放在data文件夹下的,在写convertimage2ldb.bat时注意你自己路径。
3 计算mean
这个比较简单,编译comput_image_mean.cpp
利用comput_image_mean.exe。做一个computeMean.bat方便以后使用。
注意数据格式类型
然后搜索
caffe db_lmdb.hpp:14] Check failed: mdb_status == 0 (2 vs. 0) No such file or directory
4 训练自己的网络
数据集和均值文件都生成之后,训练和前面两篇文章类似。这次我直接使用的是imagenet的网络结构,几乎没怎么修改,所以我将imagenet里面的imagenet_train.prototxt、imagenet_val.prototxt、imagenet_solver.prototxt直接拷过来修改一下。
imagenet_val.prototxt、imagenet_train.prototxt里面的
source: "mtrainldb"
mean_file:"mimg_mean.binaryproto"
batch_size: 10
还有最后一层的output改为5,因为我只有五类。
imagenet_solver.prototxt里面的网络参数修改:
注意最后根据自己电脑的配置选择 solver_mode:GPU 还是CPU
开始训练:
找到自己存放的路径