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中减少初始学习率。

开始训练。

时间: 2024-12-10 10:49:01

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

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

个人实践代码如下: #!/usr/bin/env sh # Create the imagenet lmdb inputs # N.B. set the path to the imagenet train + val data dirs set -e EXAMPLE=/home/wp/CAFFE/caffe-master/myself/00b DATA=/home/wp/CAFFE/caffe-master/myself/00b TOOLS=build/tools TRAIN_DATA_ROO

将传入结构体 pMtInfo 中包含的数据内容转换成 JSON 字符串返回

upu_struct.h封装了有关  pMtInfo结构体的内容,用到的部分如下图所示: 利用jansson库实现将传入结构体 pMtInfo 中包含的数据内容转换成 JSON 字符串返回 代码如下: #include <stdio.h> #include <string.h> #include "jansson.h" #include "upu_struct.h" #include "upu_proto_parse.h"

浮点型float数据强制转换成int整型

问题:如下代码 想获取某两个Decimal类型数之间的商的大小,结果偶尔出错(请注意是 偶尔) Decima t1; Decima t2; int shang =Convert.ToInt32(t1 / t2) ; 解决方法:将Decimal类型数据强制转换成INT整型时  会有四舍五入的过程.如下,需要用Math.Truncate方法来取整数位.所以区商时必须用此方法取整 问题代码: Decima t1=1.2m; Convert.ToInt32(t1)  得到1 Decima t2=1.7m

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

开发过程中经常需要根据数据表编写对应的实体类,下面是使用sql语句快速将数据表转换成对应实体类的代码,使用时只需要将第一行'TableName'引号里面的字母换成具体的表名称就行了: declare @TableName sysname = 'TableName' declare @Result varchar(max) = 'public class ' + @TableName + ' {' select @Result = @Result + ' public ' + ColumnType

file_get_contents(&#39;php://input&#39;) 数据如何转换成数组

前台表单页:demo01.html 后台:demo01.php 输出结果: 备注:若前台通过Ajax的post提交过来的是json数据,需要对json数据进行解析:$data = json_decode($postStr,true); file_get_contents('php://input') 的优势: 1, php://input 可以读取http entity body中指定长度的值,由Content-Length指定长度,不管是POST方式或者GET方法提交过来的数据.但是,一般GE

JPG图片如何快速转换成CAD图纸呢?

我们在日常办公工作中,常常遇到需要把CAD图纸转换成JPG图片格式的时候.但是有时候也会急需把JPG图片转换成CAD图纸.这时候我们该如何才能快速解决呢?今天小编给大家具体演示一下,不使用转换器软件也可以快速的完成操作. 步骤一:首先,我们先下载安装迅捷CAD编辑器到电脑端,然后开启运行软件. 步骤二:先点击界面左上角的"文件"按钮,之后点击下面的"批处理"进入"批处理"的弹窗页面. 步骤三:在"批处理"界面,点击 "

苹果的HEIC格式图片怎么在线转换成JPG格式

苹果的HEIC格式图片怎么在线转换成JPG格式,HEIC格式图片是苹果手机特有的,在其他系统下是不能进行打开查看的,那HEIC图片怎么在windows系统也就是电脑上打开呢,答案是将其转换成jpg格式进行观看,那问题又来了该怎么进行转换的呢,接下来就小编来告诉你转换步骤!第一步:进入电脑上的浏览器,搜索迅捷PDF在线转换器.第二步:进入转换器页面后,在导航栏中选择文档转换,在弹出的下拉框里点击HEIC转JPG.第三步:点进HRIC转JPG后,点击选择文件加入待转换的HEIC文件,也可以直接拖动文

盘点机数据怎么转换成电脑盘点系统的数据

若是该物联宇手持终端是针动该POS系统配备的,先把盘点机生成的盘点数据文件复制到POS系统电脑上,然后在POS系统盘点界面应该有类似"数据导入"的功能,选择该数据文件导入.否则需要把盘点机生成的数据文件转换成POS系统限制格式的文件,此种情况下最佳的处理方式是让盘点机提供商修改程序,生成所需格式:若是此方式行不通,则需要一二次转换数据文件格式的软件,每次导入前都要转换一下文件格式. 原文地址:https://blog.51cto.com/14265294/2387356

Spark2 加载保存文件,数据文件转换成数据框dataframe

hadoop fs -put /home/wangxiao/data/ml/Affairs.csv /datafile/wangxiao/ hadoop fs -ls -R /datafile drwxr-xr-x - wangxiao supergroup 0 2016-10-15 10:46 /datafile/wangxiao -rw-r--r-- 3 wangxiao supergroup 16755 2016-10-15 10:46 /datafile/wangxiao/Affairs