Caffe下自己的数据训练和测试

原创 2015年07月29日 17:49:19

在caffe提供的例程当中,例如mnist与cifar10中,数据集的准备均是通过调用代码自己完成的,而对于ImageNet1000类的数据库,对于高校实验室而言,常常面临电脑内存不足的尴尬境地。而对于应用者而言,用适合于自己条件的的数据集在caffe下训练及测试才是更重要的。所以我们有必要自己做数据库以及在caffe上训练及测试。
1,数据准备
在data中新建文件夹myself,我们截取了ImageNet1000类中的两类—panda与sea_horse,训练panda的图片24张,测试panda的图片6张,训练sea_horse的图片38张,测试sea_horse的图片7张。如图所示:
这里写图片描述
这里写图片描述
培训和测试的输入是用train.txt和val.txt描述的,这些文档列出所有文件和他们的标签。注意,在imagenet1000类中,我们分类的名字是ASCII码的顺序,即0-999,对应的分类名和数字的映射在synset_words.txt(自己写)中。
运行以下指令:

find -name *.jpeg |cut -d '/' -f2-3> train.txt

注意路径
然后,因为自己的数据库样本数比较少,可以自行手动做分类标签。在train.txt的每个照片后用1-2分类。如图:
这里写图片描述
当样本过多,就自己编写指令批量处理。
同理,获得val.txt。matlab(windows下)批量处理代码如下:

% batch write in txt
clear all
clc
file=dir('F:\animal\sea_horse');
temp=length(file);
file=file(3:temp);
fp=fopen('F:\animal\animal.txt','at');      
% 'at' open or create file for reading and writing; append data to end of file
% 'wt' discard existing contents
for n=1:length(file)
    fprintf('iter=%d\n',n)
    txt=[file(n).name ' 2' '\n'];
    fprintf(fp,txt);
end
fclose(fp);

Test.txt不能标签,全部设置成0。
我们还需要把图片的大小变成256X256,官网上提供了下面的命令:

for name in /path/to/imagenet/val/*.JPEG; do
convert -resize 256x256\! $name $name
done

但是我自己并没有成功,就只好用matlab(windows下)代码处理了一下:

for n=1:length(file)
    temp=imread(['F:\animal\panda\' file(n).name]);
    temp=imresize(temp,2);
    temp=imresize(temp,[256 256]);
    imwrite(temp,['F:\animal\panda\' file(n).name]);
end

然后在caffe-master/examples中新建myself文件夹,然后将caffe-maester/examples/imagenet的create_imagenet.sh复制到该文件夹下,将其名改为create_animal.sh,修改训练和测试路径的设置,运行该sh.如图:
这里写图片描述
这里写图片描述
最后得到myself_train_lmdb和myself_val_lmdb:
这里写图片描述
2 计算图像均值
模型需要我们从每张图片减去均值,所以我们必须获得训练的均值,用
tools/compute_image_mean.cpp实现,这个cpp是一个很好的例子去熟悉如何操作多个组建,例如协议的缓冲区,leveldbs,登录等。我们同样复制caffe-maester/examples/imagenet的
./make_imagenet_mean到examples/myself中,将其改名为make_animal_mean.sh,加以修改路径。
这里写图片描述
3 网络的定义
把caffe-master/models/bvlc_reference_caffenet中所有文件复制到caffe-master/examples/myself文件夹中,修改train_val.prototxt,注意修改数据层的路径。如图:
这里写图片描述
这里写图片描述
如果你细心观察train_val.prototext,你会发现他们除了数据来源不同和最后一层不同,其他基本相同。在训练中,我们用一个softmax——loss层计算损失函数和初始化反向传播,而在验证,我们使用精度层检测我们的精度。

我们还有一个运行的协议solver.prototxt,复制过来,将第一行路径改为我们的路径net: “examples/myself/train_val.prototxt”,从里面可以观察到,我们将运行256批次,迭代4500000次(90期),每1000次迭代,我们测试学习网络验证数据,我们设置初始的学习率为0.01,每100000(20期)次迭代减少学习率,显示一次信息,训练的weight_decay为0.0005,每10000次迭代,我们显示一下当前状态。
以上是教程的,实际上,以上需要耗费很长时间,因此,我们稍微改一下
test_iter: 1000是指测试的批次,我们就10张照片,设置10就可以了。
test_interval: 1000是指每1000次迭代测试一次,我们改成500次测试一次。
base_lr: 0.01是基础学习率,因为数据量小,0.01就会下降太快了,因此改成0.001
lr_policy: “step”学习率变化
gamma: 0.1学习率变化的比率
stepsize: 100000每100000次迭代减少学习率
display: 20每20层显示一次
max_iter: 450000最大迭代次数,
momentum: 0.9学习的参数,不用变
weight_decay: 0.0005学习的参数,不用变
snapshot: 10000每迭代10000次显示状态,这里改为2000次
solver_mode: GPU末尾加一行,代表用GPU进行

4 训练
把caffe-master/examples/imagenet中的train_caffenet.sh复制过来并修改名为train_myself.sh运行,修改里面的路径,如图:
这里写图片描述
当然,只有两类,正确率还是相当的高,例如迭代到2000次的时候,正确率是0.924,即13张var样本只有1张预测错了。
如图:
这里写图片描述
5 恢复数据
把caffe-master/examples/imagenet中的resume_training.sh复制过来并运行。
我们用指令./即可。

参照材料:学习笔记3 用自己的数据训练和测试“CaffeNet” 2014.7.22 薛开宇
Caffe官网 ImageNet tutorial

Windows Caffe 学习笔记(三)在Caffe上训练和测试自己的数据

本文是学习官方材料:ImageNet Tutorial时做的,同样由于是Windows版本的原因,很多shell脚本不能直接使用,走了不少弯路,但是收获也不少。比如:其实shell脚本在Windows...
  • abc8730866
  • abc8730866
  • 2016年09月16日 16:20
  • 6009

薛开宇caffe学习笔记完整版

  • 2015年10月01日 20:33
  • 2.48MB
  • 下载

CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

尝试将自己的jpg数据转成lmdb格式。本博客尚不成熟,等待后续进一步努力吧!...
  • u013534498
  • u013534498
  • 2016年05月12日 20:58
  • 11147

Caffe_Windows学习笔记(二)用自己的数据训练和测试CaffeNet

0、参考文献 [1]薛开宇 《学习笔记3 用自己的数据训练和测试“CaffeNet”》 [2]悠望南山 http://www.cnblogs.com/NanShan2016/p/5532589.h...
  • huang2818138
  • huang2818138
  • 2017年09月30日 10:57
  • 142

caffe:用自己的图像数据训练模型

2016.4.6Alexweek 本文参考“学习笔记 3 用自己的数据训练和测试“CaffeNet(薛开宇)”和caffe官网。 1.数据准备 在caffe/data下新建目录myself,并在my...
  • AlexQiweek
  • AlexQiweek
  • 2016年04月29日 13:48
  • 9966

用自己的数据训练和测试“caffenet”

本次实验本来参考examples/imagenet下的readme.txt进行,但因为数据集过于庞大,所以模拟学习,参考薛开宇的学习方式,模仿搭建自己的数据库。 首先在caffe/data下新建文件...
  • u010194274
  • u010194274
  • 2016年01月24日 20:46
  • 6504

[caffe学习笔记]用自己的数据进行训练和测试

我今天尝试制作一个自己的训练数据集,参考薛开宇的学习方式,模仿搭建自己的数据库。  1.因为我的电脑里有整个ImageNet_ILSVRC2012的数据集,所以从训练集ILSVRC2012_img_t...
  • weixin_36340947
  • weixin_36340947
  • 2017年11月17日 12:09
  • 103

Caffe下自己的数据训练和测试

【原文:http://blog.csdn.net/qqlu_did/article/details/47131549】 在caffe提供的例程当中,例如mnist与cifar10中,数据集的...
  • zhazhiqiang2010
  • zhazhiqiang2010
  • 2015年08月11日 17:19
  • 2169

caffe测试精度与验证精度不一致

当时不记得是在解决什么问题的时候看到说要在mean = np.load(mean_file)后面加上.mean(1).mean(1) 看代码看了好一段时间都没有解决同一数据集在测试和训练验证时得...
  • lyiiiiii61
  • lyiiiiii61
  • 2017年11月03日 11:07
  • 223

用Caffe搭建自己的网络,并用图片进行测试

一、将自己的图片数据生成lmdb格式的数据(caffe可以接收的数据格式) 1、在caffe/data中建立文件夹 myself,在myself中建立子文件夹 train 和 val 2、在t...
  • u010480194
  • u010480194
  • 2017年01月09日 14:34
  • 3435
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Caffe下自己的数据训练和测试
举报原因:
原因补充:

(最多只允许输入30个字)