caffe跑自己的数据

就从我做的一个区分人脸中戴眼镜(以下简称正样本)和不戴眼镜(以下简称负样本)的简单二分类问题开始;

首先我得到的是一份正负样本各有两千四左右的数据,正样本用标签1表示,负样本用标签0表示;

得到数据后首先对现有的数据进行组织,分成训练样本和测试样本(训练集:测试集=5:1),得到如下的结果:

接下来对两个数据集中的图片数据运行如下代码进行重命名(需要的话可以统一图片大小),为了保持所有文件的格式一致,采用str(count).zfill(4)方法用0补充高位来统一规范文件名:


重命名后数据集下的数据如下:


接下来就是对数据集标签文件train.txt和test.txt的建立,运行如下代码:


理解了os.walk()函数的返回值就理解上面的代码了,有点值得注意的是在遍历train文件名(0和1)时,先是遍历文件夹1下的文件,再遍历文件夹0下的文件,这也是类别序号x采用x=x-1的原因。

运行完分别在训练集和测试集的目录下产生相应的标签文件:


得到标签文件后就是把图片数据转换成caffe中的lmdb数据形式,修改caffe/examples/imagenet文件夹下的create_imagenet.sh里面的标签文件路径和文件保存路径(这一步可以对图片数据的尺寸大小进行统一的处理,将RESIZE=false更改为RESIZE=true,将所有图片归一化为256*256的大小),运行产生我们需要的lmdb文件:



下一步修改caffe/examples/imagenet文件夹下的make_imagenet_mean.sh里面lmdb文件(训练集的)的路径,计算训练的均值文件(减去像素平均值:所有图片的每个像素都减去所有训练集图片的平均值。),运行后在当前目录下生成.binaryproto文件:


修改网络结构:我是用的caffe自带的caffenet的网络文件进行训练,在caffe/models/bvlc_reference_caffenet里面找到相应的train_val.prototxt和solver.prototxt文件;

修改train_val.prototxt里面的均值文件路径、数据路径和最后的分类类别数(数据层里面如果采用镜像操作,则不需要用到前面生成的均值文件),根据自己的实际需求修改solver.prototxt相应的训练参数。

最后,在caffe的根目录下运行如下代码:


训练结果如下:


根据我的设置,每迭代2000会生成如下一个caffemodel(这是我们想要的模型文件)和一个solverstate(中间状态文件,主要是存放训练过程中的一些超参数,当训练过程中断,你想继续运行数据学习,此时只需要调用.solverstate文件即可

  1. ./build/tools/caffe train \  
  2.      --solver=examples/test/solver.prototxt --snapshot=examples/test/test_100000.solverstate 
):


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值