机器学习 - 使用 Caffe 训练自己的数据集

在上一篇博客写了安装 caffe,这里讲一下如何使用 caffe训练自己的数据。

1. 准备数据

首先要准备自己的数据,就是你的图片,不同类别的图片,这些图片要分成两部分,一部分多,一部分少,比例自己把握,5:16:1都可以,多的部分作为训练集,少的部分作为测试集,然后留几张图片用来做最后的分类测试的。

首先!新建一个imgs的文件夹,然后再里面新建一个data文件夹,用来存放数据!以下数据都是在这个文件夹下的。

例如我的图片是一些动作图片,分别是:down, sitdown, standup, handup这四类:

  • 新建四个文件夹down, sitdown, standup, handup, 放数量比较多的那部分的图片,然后再新建一个 train的文件夹,存放这四个文件夹。

  • 然后同理再新建一个 val的文件夹,这里面也是down, sitdown, standup, handup这四个文件夹,存放的是数量少的那部分图片。

  • 新建一个 train.txt里面是图片名字还有对应的图片类别。

  • 新建一个 val.txt同理是val文件夹里面的图片还有对应类别。

文件夹结构如下:

data 文件夹
data 文件夹

上面的暂时只看 train, val, train.txt, val.txt这四个就可以了。

train.txt 文件
这里写图片描述

这里是对应的 train.txt 文件的内容,图片后面一个空格然后写上对应类别的数字,下标从0开始。

val.txt 文件
这里写图片描述

这个是 val.txt 文件内容,和 train.txt 基本一样。就是图片不一样。

2. 数据转换

把图片转换成lmdb格式,这是caffe 使用的输入格式,使用的是caffe/examples/imagenet/create_imagenet.sh脚本文件。


  • 新建一个文件夹imgsnet,路径caffe/examples/用来存放自己的网络和脚本文件等等。
  • create_imagenet.sh 脚本拷贝到 imgsnet (刚才新建的文件夹)下。
  • 修改create_imagenet.sh文件。

EXAMPLE=/home/alps/caffe/examples/imgsnet/ //刚才新建的文件夹
DATA=/home/alpps/caffe/examples/imgs/data/ //存放图片数据的文件夹
TRAIN_DATA_ROOT=/home/alps/caffe/examples/imgs/data/train //训练图片文件夹
VAL_DATA_ROOT=/home/alps/caffe/examples/imgs/data/val //测试图片文件夹
RESIZE=true //让图片resize 为同样大小,下面大小自己修改就行。


create_imagenet.sh
这里写图片描述

然后执行脚本./create_imagenet.sh,等到输出Done.的时候就 OK 了。刚才生成的两个文件在你输入的:EXAMPLE里。我这里是/home/alps/caffe/examples/imgsnet/


3. 生成 meanfile 均值文件

利用刚才生成的 lmdb 文件生成均值文件,计算图像均值,使用的是examples/imagenet/make_imagenet_mean.sh这个脚本,把它拷贝到自己的目录下:

cp examples/imagenet/make_imagenet_mean.sh examples/imgsnet/

然后修改该脚本:

EXAMPLE=/home/alps/caffe/examples/imgsnet
DATA=/home/alps/caffe/examples/imgs/data


make_imagenet_mean.sh文件
这里写图片描述

然后执行./make_imagenet_mean.sh脚本,出现Done.就好了。

3.配置网络

可是使用自己喜欢的网络,LeNet啊或者其他网络都行,这里使用 AlexNet网络,其网络模型比 LeNet略复杂。首先拷贝AlexNet网络:

cp -r caffe/models/bvlc_alexnet caffe/examples/imgsnet

然后进入到这个网络文件夹下:

cd caffe/examples/imgsnet/bvlc_alexnet

要修改:

solver.prototxt
train_val.prototxt

这两个文件。

3.1 修改 solver.prototxt

打开这个文件:

vim solver.prototxt

修改:

net: "/home/alps/caffe/examples/imgsnet/bvlc_alexnet/train_val.prototxt"
test_iter : 50 //测试迭代次数
test_interval : 100 //多少次迭代测试一次
base_lr : 0.01 //基础学习率
lr_policy : "step"
gamma: 0.1
stepsize : 100000
display: 20 //多少次迭代显示一次
max_iter : 700 //一共迭代多少次
momentum : 0.9
weight_decay : 0.0005
snapshot : 700 //多少次迭代保存一次快照
snapshot_prefix : "/home/alps/caffe/examples/imgsnet/bvlc_alexnet/caffe_alexnet_train" //快照保存位置(也是结果的位置)
solver_mode : CPU

3.2 修改 train_val.prototxt

打开 train_val.prototxt文件:

vim train_val.prototxt

修改里面的:

//记得两个参数不止一个!全部修改了!别只修改一个


mean_file : "/home/alps/caffe/examples/imgs/data/imagenet_mean.binaryproto
//这个是上面生成的均值文件位置

source : "/home/alps/caffe/examples/imgsnet/ilsvrc12_train_lmdb"
//这个是上面生成的 lmdb文件位置

//然后如果你自己要定义类别个数(嫌麻烦就别改这里了!不会影响!),请在最后一层里面
name : "fc8" //这个名字的代表 alexnet的最后一层,其他的网络自己找
num_output: 1000 //alexnet默认1000个 改成你自己的个数,我改成: num_output: 4 //也可以不改,训练不影响

4.训练网络

cd /home/alps/caffe   //cd 到caffe根目录

输入如下命令

./build/tools/caffe train --solver=/home/alps/caffe/caffe/examples/imgsnet/bvlc_alexnet/solver.prototxt

然后运行就可以了!
这里写图片描述

出现类似的图就好了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值