自己创建数据集训练caffeNet,

第一步:首先需要制作自己的数据集,我在网上下载了狗和鸟的图片,各几十张分别分为训练集和验证集,我将训练集放在caffe/data/myself/train中,并分别建立两个文件夹,bird和dog,




验证集同理,我验证集用的是狗和鸟的图片共计19张。



第二步:将文件名导入一个文本文档中,并在后面设立标签数字 1和 2,

首先在命令行中cd到myself文件夹下,输入:find ./train/bird -type f exec echo {} \;>./train1.txt(find 命令的格式及解释:find 路径(路径表示你图片所在的目录) -type f(type f表示普通文件)exec command {} \;(这一句表示 执行这个command命令,这个echo表示显示图片名字)>(表示将内容输入当train,txt文档中(如果文档存在则覆盖里面的内容),如果文档不存在则自动创建一个文档,))

扫描二维码关注公众号,回复: 2147743 查看本文章

你会在myself文件夹下得到一个train.txt文档并包含图片的名字,如图所示:

然后在名字的后面添加上标签 1

sed "s/$/1" ./train1.txt>train.txt

然后再输入上面同样的命令 将狗的图片名字输入到这个train2.txt下:

在myself目录下:find ./train/dog -type f exec echo {} \;>train2.txt 

然后再给图片设置标签,鸟设为1,狗设2,

sed "s/$/2" ./train2.txt>>train.txt(>>表示在train.txt末尾添加内容,)

验证集同理,只要你学会了以上命令的应用,验证集的val.txt如下所示:


然后我们需要把数据集里面的图片全部变成256x256大小的尺寸 首先cd到 myself目录下

for name in train/bird/*.jpg ; do  convert -resize 256x256\! $name $name; done
for name in train/dog/*.jpg ; do  convert -resize 256x256\! $name $name; done
for name in val/dog*.jpg ; do  convert -resize 256x256\! $name $name; done
for name in val/bird*.jpg ; do  convert -resize 256x256\! $name $name; done
以上命令行in后面的目录根据你自己创建的目录而定

1将数据集转化为lmdb形式

接下来在caffe/examples中新建myself文件夹,然后将caffe/examples/imagenet的create_imagenet.sh复制到该文件夹下,将其名改为create_imagenet_myself.sh,修改训练和测试路径的设置,运行该sh.如图:

然后得到:


2 计算图像均值
减去图像均值会获得更好的效果,所以我们使用tools/compute_image_mean.cpp实现,这个cpp是一个很好的例子去熟悉如何操作多个组建,例如协议的缓冲区,leveldbs,登录等。我们同样复制caffe-maester/examples/imagenet的
./make_imagenet_mean到examples/myself中,将其改名为make_myimagenet_mean.sh,这个你可以自己修改路径 $DATA表示你计算出来的均值图片的存储路径。改完后运行该文件,即可得到均值文件,

3网络的定义
把caffe/models/bvlc_reference_caffenet中所有文件复制到caffe/examples/myself文件夹中,修改train_val.prototxt,注意修改数据层的路径。如图:

4更改solver.prototxt文件配置

从里面可以观察到,我们将运行256批次,迭代4500000次(90期),每1000次迭代,我们测试学习网络验证数据,我们设置初始的学习率为0.01,每100000(20期)次迭代减少学习率,显示一次信息,训练的weight_decay为0.0005,每10000次迭代,我们显示一下当前状态。
以上是教程的,实际上,以上需要耗费很长时间,因此,我们稍微改一下
test_iter: 1000是指测试的批次,我们就19张照片,设置19就可以了。
test_interval: 1000是指每1000次迭代测试一次,我们改成50次测试一次。
base_lr: 0.01是基础学习率,因为数据量小,0.01就会下降太快了,因此改成0.001   学习率下降太快 可能会导致梯度爆炸 loss=-nan
lr_policy: “step”学习率变化
gamma: 0.1学习率变化的比率
stepsize: 100每100次迭代减少学习率
display: 20每20层显示一次
max_iter: 500最大迭代次数,
momentum: 0.9学习的参数,不用变
weight_decay: 0.0005学习的参数,不用变
snapshot: 10000每迭代10000次显示状态,这里改为100次 这里指的是每训练100次将训练的caffeNet模型当时的状态保存下来
solver_mode: GPU末尾加一行,代表用GPU进行


由于我的数据集比较小 训练集狗的图片和鸟的图片 都在60张左右,所以训练500次,验证集准确率就能达到百分之百了,且后来从网上找的图片再用来测试,准确率也能在百分之80左右,还可以把

如下图所示:


5.更改train_quick.sh文件:

cd 到我们之前创建的myself文件夹下(不是那个包含数据集的文件夹)

打开train_quick.sh,更改里面的配置,把里面的路径改为我上一步改的那个solver.prototxt所在的目录下,如下图所示:最后运行train_quick.sh,即可开始用自己的数据集训练网络了。


猜你喜欢

转载自blog.csdn.net/zxyhhjs2017/article/details/78561869
今日推荐