3.2 Caffe的I/O模块

3.2.1 如何对Layer做参数配置(Data Layer参数配置为例)

1)layer {

name: "cifar"

type: "Data"

top: "data"

top: "label"

include {

phase: TRAIN

}

transform_param {

scale: 0.00390625

}

data_param {

source: "cifar10_train_lmdb"

batch_size: 100

backend: LMDB

}

}

//详细见上面代码解析

  1. 所有数据预处理都在这里设置:

transform_param

{

scale: 0.00390625

mean_file_size: “examples/cifar10/mean.binaryproto" #用一个配置文件来进行均值操作

mirror: 1 # 1表示开启镜像,0表示关闭,也可用ture和false来表示

crop_size: 227 # 剪裁一个 227*227的图块,在训练阶段随机剪裁,在测试阶段从中间裁剪

}

注:通常数据的预处理(如减去均值, 放大缩小, 裁剪和镜像等),Caffe使用OpenCV做处理。

3.2.2 将图片数据转化为LMDB数据

1)方法一:并未实践成功,但列举过程,可以了解转化为LMDB数据细节问题。

创建图片文件列表清单,一般为一个txt文件,一行一张图片。

 

#先准备两个文件夹:train 和test

#

#新建一个文档,命名为label_name.txt

#编辑类别标签

$ ls train/adress | sed "s:^:adress/:" | sed "s:$: 1:">>t_train.txt

// 列举路径train/adress 下的所有图片,在每个图片前面加上类别名:adress,后面加上类别标签1

#生成train列表清单

#同理运行类别road

$ls train/road | sed "s:^:road/:" | sed "s:$: 0:">>t_train.txt

#train列表清单中继续添加road类别图片

#同理

$ls test/adress | sed "s:^:adress/:" | sed "s:$: 1:">>t_test.txt

$ ls test/road | sed "s:^:road/:" | sed "s:$: 0:">>t_test.txt

#生成测试集列表清单

 

 

使用Caffe工具命令,转化成lmdb数据库

Convert_imageset[FLAGS][ROOTFOLDER/][LISTFILE][DB_NAME]

需要带四个参数:

FLAGS:图片参数组

gray: 是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false
shuffle: 是否随机打乱图片顺序。默认为false
backend:需要转换成的db文件格式,可选为leveldb或lmdb,默认为lmdb
resize_width/resize_height: 改变图片的大小。在运行中,要求所有图片的尺寸一致,因此需要改变图片大小。 程序调用opencv库的resize()函数来对图片放大缩小,默认为0,不改变
check_size: 检查所有的数据是否有相同的尺寸。默认为false,不检查
encoded: 是否将原图片编码放入最终的数据中,默认为false
encode_type: 与前一个参数对应,将图片编码为哪一个格式:‘png','jpg'......
ROOTFOLDER/: 图片存放的绝对路径,从linux系统根目录开始
LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片
DB_NAME: 最终生成的db文件存放目录

 

#到train和test文件夹目录下:

$convert_imageset --resize_width=40 --resize_height=40 /home/wtj/数据转换格式/train/ ./t_train.txt ./t_train.lmdb

#我这边显示未找到convert_imageset 命令,度娘也没人和我出现同样问题,于是换下面另一种数据转换实现方法。

  1. 方法二:

以caffe程序中自带的图片为例,进行讲解,图片目录是  example/images/, 两张图片,一张为cat.jpg, 另一张为fish_bike.jpg,表示两个类别。

我们创建一个sh脚本文件,调用linux命令来生成图片清单:

$cd caffe

$sudo vi examples/images/create_filelist.sh

#编辑这个文件,输入下面代码保存

# /usr/bin/env sh

DATA=examples/images //图片相对路径

echo "Create train.txt..." //输出

rm -rf $DATA/train.txt //rm:删除文件 ,重复生成会显示错误

find $DATA -name *cat.jpg | cut -d '/' -f3 | sed "s/$/ 1/">>$DATA/train.txt

//在上述路径下找到图片名为XX.jpg的图片,在每行最后面加上标注1 输入到列表train.txt。

find $DATA -name *bike.jpg | cut -d '/' -f3 | sed "s/$/ 2/">>$DATA/tmp.txt

//cut:截取路径

cat $DATA/tmp.txt>>$DATA/train.txt //将tmp.txt文档合并到train.txt中

rm -rf $DATA/tmp.txt //删除tmp.txt

echo "Done.."

这步先不运行,在最后运行生成的train.txt列表如下

 

当然,图片很少的时候,手动编写这个列表清单文件就行了。如方法一,生成的这个train.txt文件,就可以作为第三个参数,直接使用了。

#调用命令生成最终的lmdb格式数据

#由于参数比较多,因此编写一个sh 脚本来执行命令

#caffe目录下,创建sh脚本文件:

$ sudo vi examples/images/create_lmdb.sh

#编辑

#!/usr/bin/en sh

DATA=examples/images //进入指定路径

rm -rf $DATA/img_train_lmdb //删除该路径下已经生成的img_train_lmdb文件

build/tools/convert_imageset --shuffle \ //shuffle,随机打乱图片顺序

--resize_height=256 --resize_width=256 \ //修改图片尺寸变为256*256

/home/wtj/caffe/examples/images/ $DATA/train.txt $DATA/img_train_lmdb

//图片保存绝对路径

#最后运行脚本

$sudo sh examples/images/create_lmdb.sh

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值