一、从网上自己下载数据集
1.1我下载了两类图片,分别为“鸟”:30张;“猫”:30张(注意:随意下载即可)
二、数据集处理
2.1批量重命名
方法:将文件全部选中,然后右键点击重命名,修改如图所示:
2.2批量转换图片大小(先预定设置成28*28)
使用一般的看图软件就可以转换。(我这里使用2345看图王)
注意:在样本转换为LEVEDB文件之前,需要把图片弄到同一大小,否则会出错。
2.3准备训练和测试数据文件夹
(1)“鸟”和“猫”每一种选择25张图片作为训练集合,剩余5张作为测试集合
(2)所以最后train文件夹中由50张图片,test文件夹中由10张图片
2.4制作标签文件(txt)
手动制作如下:(在后面标明是哪一类,我这里使用0表示鸟,1表示猫)
三、编写脚本文件
(1)对测试数据集进行转换:先用txt文件编写,然后将后缀改为.bat然后双击运行就可以了
脚本文件内容如下:
SET GLOG_logtostderr=1
D:\caffe-master\Build\x64\Debug\convert_imageset.exe --backend=leveldb C:\Users\Administrator\Desktop\data\test\ C:\Users\Administrator\Desktop\data\test.txt C:\Users\Administrator\Desktop\data\mtestldb
pause
(2)对训练集进行转换
脚本文件内容如下:
SET GLOG_logtostderr=1
D:\caffe-master\Build\x64\Debug\convert_imageset.exe --backend=leveldb C:\Users\Administrator\Desktop\data\train\ C:\Users\Administrator\Desktop\data\train.txt C:\Users\Administrator\Desktop\data\mtrainldb
pause
(3)均值计算
脚本内容如下:
D:\caffe-master\Build\x64\Debug\compute_image_mean.exe C:\Users\Administrator\Desktop\data\mtrainldb mean.binaryproto --backend=leveldb
pause
(4)在train-test文件夹中拷贝cifar10中的这俩文件然后进行修改
(5)运行脚本创建
Caffe.bat
脚本内容如下:
SET GLOG_logtostderr=1
D:\caffe-master\Build\x64\Debug\caffe.exe train --solver C:\Users\Administrator\Desktop\data\train-test\cifar10_quick_solver.prototxt
按图修改即可,然后双击caffe.bat就会自动运行了
注意:要记得修改lenet_solver.protptxt和lenet_train_test.prototxt中的东西
四、经过以上步骤后,你的数据集文件夹中应包含如下文件:
五、
(1)
这个batch_size表示一次读取的图片数量
(2)需要修改的地方1
name: "CIFAR10_quick"
layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param { //【第1块修改的地方】下面是均值文件所在的路径,改为你自己的均值文件所在的路径
mean_file: "data/mine/train_mean.binaryproto"
}
data_param { //【第2块修改的地方】下面改为训练样本生成的数据库所在的目录[注意:是训练样本数据库]
source: "data/mine/mtrainldb"
batch_size: 50 //【第3块修改的地方】由于我们的训练样本不多,所以我们一次读入50张图片就好
backend: LEVELDB
}
}
layer {
name: "cifar"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param { //【第4块修改的地方】下面是均值文件所在的路径,改为你自己的均值文件所在的路径
mean_file: "data/mine/train_mean.binaryproto"
}
data_param { //【第5块修改的地方】下面改为测试样本生成的数据库所在的目录[注意:是测试样本数据库]
source: "data/mine/mtestldb"
batch_size: 50//【第6块修改的地方】由于我们的测试样本只有150张,所以我们一次读入50张图片就好
backend: LEVELDB
}
}
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
中间的省略......
layer {
name: "ip2"
type: "InnerProduct"
bottom: "ip1"
top: "ip2"
param {
lr_mult: 1
}
param {
lr_mult: 2
}
inner_product_param {
num_output: 3 //【第7块修改的地方】我们现在是3分类问题,所以将第二个全连接层改为3
weight_filler {
type: "gaussian"
std: 0.1
}
bias_filler {
type: "constant"
}
}
}
layer {
name: "accuracy"
type: "Accuracy"
bottom: "ip2"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss"
bottom: "ip2"
bottom: "label"
top: "loss"
}
(3)需要修改的地方2
//【1】改为你自己的网络模型配置文件的目录
net: "data/mine/train-val/cifar10_quick_train_test.prototxt"
//【2】预测阶段迭代次数,设为3,因为batch_size设为50,这样就可以覆盖150张测试集图片
test_iter: 3
//【3】每迭代50次, 进行一次测试
test_interval: 50
//【4】权值学习率,其实就是在反向传播阶段,权值每次的调整量的程度
base_lr: 0.001
momentum: 0.9
weight_decay: 0.004
//【5】在整个过程中,我们使用固定的学习率,也可尝试使用可变学习率
lr_policy: "fixed"
//【6】因为想观察每一次训练的变化,所以设置迭代一次显示一次内容
display: 1
//【7】将最大迭代次数设为4000
max_iter: 4000
//【8】每迭代1000次输出一次结果
snapshot: 1000
//【9】输出格式
snapshot_format: HDF5
//【10】输出文件的前缀
snapshot_prefix: "data/mine/cifar10_quick"
//【11】用的是CPU
solver_mode: CPU
注意:在修改路径的时候,路径中不能含有中文,同时路径格式要正确,转义字符要用“/”或者“\\”,不可以使用“\”
(4)
这个错误是刚刚修改的solver层设置出现了问题,回去继续修改就可以了。
至于如何修改,我现在刚刚接触,还在学习中,如果哪位朋友有好的资料可以分享以下,谢谢大家了。