转自网站:

http://blog.csdn.net/muyiyushan/article/details/70578077

1.准备数据

使用dog/cat数据集,在训练项目根目录下分别建立train和val文件夹,作为训练数据和验证数据的保存位置。train和val文件夹下各有两个文件夹:dogs和cats,分别保存dog和cat的图片。dog和cat分别有1000张训练图像和400张测试图像。

写一个python脚本文件,遍历train和val两个文件夹,分别生成train.txt和val.txt,其中保存图片的相对路径和标签。类似下面格式,但是最好要将cat和dog的路径顺序打乱,不要一开始全cat,之后全是dog。


/cats/cat.0.jpg 0
/cats/cat.1.jpg 0
/cats/cat.10.jpg 0
/cats/cat.100.jpg 0
/cats/cat.101.jpg 0
/cats/cat.102.jpg 0
/cats/cat.103.jpg 0
/cats/cat.104.jpg 0

  

 

2.数据预处理

2.1转换数据格式

使用convert_imageset.exe将原始图像转换成caffe直接读取的格式:lmdb或leveldb。默认是lmdb,如果要生成leveldb,要添加–backend=leveldb参数。建立convert_image.bat文件,里面命令如下。


SET GLOG_logtostderr=1
E:\Code\Caffe\caffe-master\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width=256 --resize_height=256 E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\train E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\train.txt E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\trainldb
E:\Code\Caffe\caffe-master\caffe-master\Build\x64\Release\convert_imageset.exe --resize_width=256 --resize_height=256 E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\val\ E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\val.txt E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\valldb
pause

参数说明: 
1. E:\Code\Caffe\caffe-master\caffe-master\Build\x64\Release\convert_imageset.exe是执行程序路径。 
2. –resize_width=256 –resize_height=256重新指定生成图像大小。 
3. E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\train是训练图像存储位置。 
4. E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\train.txt训练图像的索引文件。 
5. E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\trainldb生成的lmdb格式文件路径。

测试图像同上。

注意:3的路径和4中train.txt里指定路径连接在一块是图像的绝对路径,否则找不到图片) 
执行convert_image.bat文件,即可生成lmdb文件,分别保存在指定路径中。

2.3计算图像均值

建立compute_mean.bat并执行,内容如下


E:\Code\Caffe\caffe-master\caffe-master\Build\x64\Release\compute_image_mean.exe E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\trainldb E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\train_mean.binaryproto

参数说明 
1. E:\Code\Caffe\caffe-master\caffe-master\Build\x64\Release\compute_image_mean.exe是计算均值的执行文件。 
2. E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\trainldb上一步生成的了 lmdb文件路径。 
3. E:\Code\Caffe\caffe-master\caffe-master\data\dogCat\train_mean.binaryproto生成的均值文件,后缀是.binaryproto。

3.修改配置文件

在项目根目录新建train_val文件夹,将.\caffe-master\models\bvlc_reference_caffenet中的配置文件复制到train_val中。包括train_val.prototxt和solver.prototxt。

train_val.prototxt中修改mean_file路径(训练和测试时用同样的mean file)和data_source的路径,设置相应的batch_size。将最后一层fc8的num_output设置为相应的输出类别数目,也就是2。

solver.prototxt中设置如下。

net: "E:/Code/Caffe/caffe-master/caffe-master/data/dogCat/train_val/train_val.prototxt"
test_iter: 16
test_interval: 50
base_lr: 0.01
lr_policy: "step"
gamma: 0.1
stepsize: 2000
display: 20
max_iter: 10000
momentum: 0.9
weight_decay: 0.0005
snapshot: 500
snapshot_prefix: "E:/Code/Caffe/caffe-master/caffe-master/data/dogCat/caffenet_finetune"
solver_mode: CPU

  

net参数为刚才设置好的train_val.prototxt。 
test_iter为测试时使用的batch个数,test_iter*testbatch_size=test images number。 
test_interval: 测试的迭代间隔次数。 
max_iter:迭代次数。 

4.开始训练

建立caffe.bat训练模型。并保存log文件。

5.可视化训练过程

使用log文件可视化accuracy和loss等参数。

6.微调

1-5完成了从头训练一个模型,我们也可以从头训练一个模型。但是这样花费时间很多,而且如果训练数据不够多,训练精度也不高。基于迁移学习的思想,可以用自己的数据finetune用imagenet预训练过的模型,这样减少训练时间,效果也更好。实际上就是参数初始化方法不同。

下载预训练模型。

相应修改train_val.prototxt和solver.prototxt。train_val.prototxt中配置好数据文件路径,将最后一层的名称改掉,设置相应num_output,增大weights和bias的lr_mult(从头训练,要加快速度)。

solver.prototxt中减少初始学习率。

开始训练。

caffe 图片数据的转换成lmdb和数据集均值(转)的更多相关文章

  1. 获取minist数据并转换成lmdb

    caffe本身是没有数据集的,但在data目录下有获取数据的一些脚本.MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,每个样本为28*28大小的黑白图片,手写数字为0 ...

  2. 7.caffe:create_lmdb.sh(数据预处理转换成lmdb格式)

    个人实践代码如下: #!/usr/bin/env sh # Create the imagenet lmdb inputs # N.B. set the path to the imagenet tr ...

  3. 【caffe-windows】 caffe-master 之 训练自己数据集(图片转换成lmdb or leveldb)

    前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签  ...

  4. 【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb

    前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签  ...

  5. base64格式的图片数据如何转成图片

    base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. // $base_img是获取到前端传递的值 $base_img ...

  6. java中,字符串类型的时间数据怎样转换成date类型。

    将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...

  7. 使用Sql语句快速将数据表转换成实体类

    开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare ...

  8. 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model

    利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model   使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...

  9. python - django 将图片路径地址转换成 InMemoryUploadedFile 并存储数据库

    # 问题场景:对接第三方时遇到一个图片存储问题,对方给的是他们服务器的图片路径地址,但是 我这里存储图片用的是 ImageField  字段属性,也设置了存储路径,现在一旦将图片显示到前端就会将设置的 ...

随机推荐

  1. mongodb 降序

    降序排序 db.mycol.find({},{,_id:}).sort({})// 1用于升序排列,而-1用于降序. 示例代码: var user = await Kitten.find({ type ...

  2. Executor线程池

    Executor线程池框架: 使用线程池的优点: 1.重用存在的线程 2.减少对象创建.消亡的开销 3.性能佳 4.可有效控制最大并发线程数,提高系统资源的使用率 5.避免过多资源竞争,避免堵塞 6. ...

  3. SQL server2008无法收缩日志

    SQL server2008无法收缩日志,错误信息为: 1:由于最小日志空间要求,无法收缩日志文件 2:无法收缩日志文件 2 (XXX_log),因为该文件结尾的逻辑日志文件正在使用 描述: 用的是网 ...

  4. Git 之 github分享代码

    作为一个技术人员还是脱离不了屌丝的本质,所以每天都是逛逛github,看看别人有什么好的项目,自己可以给他挑挑bug也可以提供自己的水平,但是别人不那怎么才能给别人贡献代码呢?那就是fork了.... ...

  5. python中list的使用

    1.list(列表)是一种有序的集合,可以随时添加.修改.删除其中的元素. 举例:listClassName = ['Jack','Tom','Mark'] 列表可以根据索引获取元素,如:listCl ...

  6. C++二进制文件读写

    简单二进制文件读写,多文件 /*Demo9.1.cpp*/ #include <iostream> #include <fstream> #include <string ...

  7. jQuery 基础 : 获取对象 根据属性、内容匹配, 还有表单元素匹配

    指定元素中包含 id 属性的, 如: $("span[id]")   <span id="span1" name="S1">AA ...

  8. windows10系统连接蓝牙鼠标自动断开解决方案

    环境: Windows 10 企业版 2016 长期服务版 罗技M590 问题: 鼠标长时间未使用,会自动断开 解决步骤: 参考链接: https://zhidao.baidu.com/questio ...

  9. 开发一个属于自己的第一个Composer/Packagist包

    Composer 给我们带来了诸多的好处: 模块化,降低代码重用成本 统一的第三方代码组织方式 更科学的版本更新 初始化项目,生成composer.json文件 初始实例项目代码目录结构: 现在要在项 ...

  10. python:格式化输出整数

    import math #default print "PI = %f" % math.pi #width = 10,precise = 3,align = left print ...