数据进行训练与测试
总计 2个txt文件 train.txt test.txt 在~/caffe/examples/myfile/下
2个图片源目录 train test 在/home/data 下
1个shell脚本 create_lmdb.sh 在~/caffe/examples/myfile/下
数据源的准备
网络上有很多开放的数据源(caffe自带的mnist等),大家可以自己下载,我在Window下自己标定制作生成了一份数据源,如下
数据由两列组成,第一列为图片的名字,第二列为图片的类型:1 代表有卡牌 2代表不确定 0代表无卡片
此图为1
1.将train.txt传到ubuntu上,路径为 ~/caffe/examples/myfile/
2.同理将test.txt上传至ubuntu上,路径为~/caffe/examples/myfile/
此处最好用Xshell上传,不要直接拖,否则可能会导致windows换行与ubuntu不匹配,导致生成lmdb文件时找不到路径的致命错误
3.图片保存到ubuntu本地:可以在找例子直接下载到ubuntu系统
----------------------------------------------------------------------------------
(从内网上下载)并将图片放在/home/data/train下
scp -r root@XXXX /data/picture/st_0622 /home/data/
cd /home/data/
mv st_0622 train
同理,抽取其中的一部分作为测试图片,放至/home/data/test下
---------------------------------------------------------------------------------------
4.对两个txt文件加上路径
cd ~/caffe/examples/myfile/
sed “s/^/train\\/&/g" test.txt >>newtrain.txt
sed “s/^/test\\/&/g" test.txt >>newtest.txt
2. 将数据转换为lmdb类型
1.编写create_lmdb.shell文档
gedit create_lmdb.sh
绝对路径是图片源的路径
2.生成lmdb文件
在caff根目录下(~/caffe/) sh examples/myfile/create_lmdb.sh
如果出现 E0719 04:12:39.692351 116137 io.cpp:80] Could not open or find file错误,请用vi检查你的txt文件换行符是否末尾有^M
vi newtrain.txt
:set list
ctrl 选择列 G跳转最后一行,删除末尾^M,删除末尾与$间隔的空格
3.生成两个lmdb文件
img_test_lmdb 和 img_train_lmdb
4.计算均值并保存
caffe程序提供了一个计算均值的文件compute_image_mean.cpp,我们直接使用就可以了
#sudo build/tools/compute_image_mean examples/myfile/img_train_lmdb examples/myfile/mean.binaryproto
compute_image_mean带两个参数,第一个参数时lmdb训练数据位置,第二个参数设定均值文件的名字及保存路径。
运行成功后,如下图所示
5.创建模型,并更改相关配置
模型就用程序自带的caffenet模型,位置在models/bvlc_reference_caffenet/文件夹下,将需要的两个配置文件,复制到myfile文件夹内
#sudo cp models/bvlc_reference_caffenet/solver.prototxt examples/myfile/
#sudo cp models/bvlc_reference_caffenet/train_val.prototxt examples/myfile/
修改其中的solver.prototxt
#sudo vi examples/myfile/solver.prototxt
一些系数的理解:
参考:https://blog.csdn.net/u012746763/article/details/51549184
修改train_val.prototxt
只需要修改两个阶段的data层就可以了,其他可以不用管。
--------------------------------------------------------------------------------
name: "CaffeNet"
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TRAIN
}
transform_param {
mirror: true
crop_size: 227
mean_file: "/root/caffe/examples/myfile/mean.binaryproto"
}
data_param {
source: "/root/caffe/examples/myfile/img_train_lmdb"
batch_size: 256
backend: LMDB
}
}
layer {
name: "data"
type: "Data"
top: "data"
top: "label"
include {
phase: TEST
}
transform_param {
mirror: false
crop_size: 227
mean_file: "/root/caffe/examples/myfile/mean.binaryproto"
}
data_param {
source: "/root/caffe/examples/myfile/img_test_lmdb"
batch_size: 50
backend: LMDB
}
}
------------------------------------------------------------------------------------------------------------------------
建议使用绝对路径,相对路径容易翻车
6.训练
到根目录下 cd ~/caffe/
./bild/tools/caffe train --solver=examples/myfile/solver.prototxt