caffe 图片数据的转换成lmdb和数据集均值(转)
转自网站:
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和数据集均值(转)的更多相关文章
- 获取minist数据并转换成lmdb
caffe本身是没有数据集的,但在data目录下有获取数据的一些脚本.MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,每个样本为28*28大小的黑白图片,手写数字为0 ...
- 7.caffe:create_lmdb.sh(数据预处理转换成lmdb格式)
个人实践代码如下: #!/usr/bin/env sh # Create the imagenet lmdb inputs # N.B. set the path to the imagenet tr ...
- 【caffe-windows】 caffe-master 之 训练自己数据集(图片转换成lmdb or leveldb)
前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签 ...
- 【caffe-windows】 caffe-master 之图片转换成lmdb or leveldb
前期准备: 文件夹train:此文件夹中按类别分好子文件夹,各子文件夹里存放相应图片 文件夹test:同train,有多少类就有多少个子文件夹 trainlabels.txt : 存的是训练集的标签 ...
- base64格式的图片数据如何转成图片
base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. // $base_img是获取到前端传递的值 $base_img ...
- java中,字符串类型的时间数据怎样转换成date类型。
将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...
- 使用Sql语句快速将数据表转换成实体类
开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare ...
- 利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model
利用泛型和反射,管理配置文件,把Model转换成数据行,并把数据行转换成Model 使用场景:网站配置项目,为了便于管理,网站有几个Model类来管理配置文件, 比如ConfigWebsiteMo ...
- python - django 将图片路径地址转换成 InMemoryUploadedFile 并存储数据库
# 问题场景:对接第三方时遇到一个图片存储问题,对方给的是他们服务器的图片路径地址,但是 我这里存储图片用的是 ImageField 字段属性,也设置了存储路径,现在一旦将图片显示到前端就会将设置的 ...
随机推荐
- 洛谷P3328(bzoj 4085)毒瘤线段树
题面及大致思路:https://www.cnblogs.com/Yangrui-Blog/p/9623294.html, https://www.cnblogs.com/New-Godess/p/45 ...
- POJ 1741 点分治
方法:指针扫描数组 每次选择树的重心作为树根,从树根出发进行一次DFS,求出点到树根的距离,把节点按照与树根的的距离放进数组d,设置两个指针L,R分别从前.后开始扫描,每次满足条件时答案累加R-L., ...
- .NET回归 HTML----表单元素(1)和一些常用的标记
表单就是-----用于搜集不同类型的用户输入. 表单元素指的是不同类型的 input 元素.复选框.单选按钮.提交按钮等等. 首先将表单元素分为三个类型.文本类,按钮类,选择类. 表单可以嵌套在表中, ...
- Java Annotation详解
元数据的作用 如果要对于元数据的作用进行分类,目前还没有明确的定义,不过我们可以根据它所起的作用,大致可分为三类: l 编写文档:通过代码里标识的元数据生成文档. l ...
- Ping命令的设计与实现
ping命令的设计与实现 发表于 C++ Socket TCP/IP 2016-05-15 19:07 字数: 10796 阅读量: 528 ping 命令使用的相关 TCP/IP 协议 ping 命 ...
- Sublime Text3注册码供研究使用
文章介绍 看到文章时候感觉不错,一直用的Notepad++.文章属于转载,文末有文章来源,转载注明出处. 一. Sublime 下载地址: Sublime 3: http://www.sublimet ...
- 【monkey测试】Fragment not attached to Activity
monkey测试跑出了一个异常: // CRASH: packgeName (pid) // Short Msg: java.lang.IllegalStateException // Long Ms ...
- TestNG入门
在Eclipse中安装TestNG 打开Eclipse Help ->Install New Software , 然后Add "http://beust.com/ecli ...
- const char *p; char const *p; char * const p的区别
请看下面三种定义: const char *p; char const *p; char * const p; 首先看第一种,我们先看p,本着”从里往外”的原则,p是一个char *类型的变量,但ch ...
- SpringMVC 配置式开发-BeanNameUrlHandlerMapping(七)
第一种处理器映射器BeanNameUrlHandlerMapping.class(注册器映射器 bean节点的class属性中用到的,这种方式dean id属性必须要以“/”开头) 第二种处理器映射 ...