Caffe源码解读(七):将图片数据转化为LMDB数据

来源:互联网 发布:java依赖注入 编辑:程序博客网 时间:2024/05/17 04:11

caffe编译完成后在build/tools/目录下会生成一个convert_imageset工具,用来把图像数据转化成lmdb或者leveldb数据

convert_imageset的使用方法

第一步:创建图片文件列表清单

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

第二步:执行convert_imageset

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文件存放目录

使用举例

这里我要生成两个LMDB数据,分别用来存储训练数据和测试数据。

步骤1:生成列表清单

初始数据为jpg格式图片,label分两类female和male,female用0表示,male用1表示。train目录存放训练数据,test目录存放测试数据。文档结构如下:
这里写图片描述
使用shell命令把每个图像数据按照“相对路径+图像文件名称+空格+label”的格式生成清单文件,命令如下:

ls train/female | sed "s:^:female/:" | sed "s:$: 0:" >> t_train.txtls train/male | sed "s:^:male/:" | sed "s:$: 1:" >> t_train.txtls test/female | sed "s:^:female/:" | sed "s:$: 0:" >> t_test.txtls test/male | sed "s:^:male/:" | sed "s:$: 1:" >> t_test.txt

生成的训练清单文件t_train.txt如下:

female/2017030201.jpg 0female/2017030202.jpg 0female/2017030203.jpg 0female/2017030204.jpg 0female/2017030205.jpg 0male/2017030206.jpg 1male/2017030207.jpg 1male/2017030208.jpg 1male/2017030209.jpg 1male/2017030210.jpg 1

生成的训练清单文件t_test.txt如下:

female/2017030211.jpg 0female/2017030212.jpg 0female/2017030213.jpg 0female/2017030214.jpg 0female/2017030215.jpg 0male/2017030216.jpg 1male/2017030217.jpg 1male/2017030218.jpg 1male/2017030219.jpg 1male/2017030220.jpg 1

**注意:清单中的文件路径是相对地址,相对的是convert_imageset命令的参数ROOTFOLDER。**ROOTFOLDER是个绝对地址。

步骤2:转化成LMDB

convert_imageset --resize_width=40 --resize_height=40 /home/chuwanxing/test_samples/caffe/data/train/ ./t_train.txt ./t_train_lmdb

这里指定了ROOTFOLDER为/home/chuwanxing/test_samples/caffe/data/train/,清单文件t_train.txt,生成的lmdb文件t_train_lmdb。通过–resize调用opencv把数据大小统一成40×40。

这样就完成了训练数据的转化,训练数据同样的操作,不赘述。

0 0
原创粉丝点击