【将图像数据转换为leveldb/lmdb文件】
在实际应用中,我们常用到的原始数据是图片文件(jpg、png);而且有可能图片的额大小还不一致,而在caffe中经常使用的是lmdb或leveldb,所以,本文将举例介绍,如何将原始图片转换成caffe中能够运行的leveldb/lmdb文件。
在caffe中,convert_imageset.exe就是这样一个可以将图片文件转换为leveldb/lmdb文件的可执行程序!
该文件的使用格式:
convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
这四个参数分别为:
FLAGS:图片参数组。包含要转换的格式、要初始化的图片大小等
ROOTFOLDER:图片存放的绝对路径,从caffe-master目录开始
LISTFILE:图片文件列表清单,一般为一个txt文件,一行一张图片
DB_NAME:最终生成的db(leveldb/lmdb)文件存放目录
【以caffe自带图片为例,实战图片数据转换】
下面将以caffe中自带的图片为例,这两张图片的目录是examps/images/,一张是cat.jpg,另一张是fish_bike.jpg,表示两个类别。如下图所示:
1.生成文件列表清单(LISTFILE)
在examps/images/文件夹下新建一个train.txt文件,手动输入一下内容:
其中,“1” 和 “2”是分别给这两个图片标注的类别编号。
当然,这是在图片量很少的时候用手动的方法编写,但在图片量很多的时候,就需要编写代码来生成类似的txt文件了。
生成的这个train.txt文件就可以作为第三个参数(LISTFILE)来直接使用了。
2.设定FLAGES参数组
-gray:是否以灰度图的方式打开图片,默认为false
-shuffle:是否随机打乱图片顺序,默认为false
-backend:需要转换成的db文件格式,可选为leveldb,默认为lmdb
-resize_width/resize_height:改变图片的大小。在运行中,要求所有的图片的尺寸一种,因此需要改变图片大小。默认为0,不改变
-check_size:检查所有的数据是否有相同的尺寸,默认为false,不检查
-encoded:是否将原图片编码放入最终的数据中,默认为false
3.编写批处理文件
%[flags] rootfolder listfile db_name %
.\Build\x64\Release\convert_imageset.exe -backend=leveldb -resize_height=256 -resize_width=256 examples\images\ examples\images\train.txt examples\images\img_train_leveldb
pause
这样我们就获得了这两张图片的leveldb格式的文件。