在编译好的caffe中,其tools/Release下有一个convert_imageset.exe的文件,其是用来将自己准备的图像数据集进行转化的。在convert_imageset.exe所在的文件夹下执行convert_imageset命令会发现有这样的结果:
由此可见,该命令的使用格式为:
convert_imageset [FLAGS] rootfolder/ listfile db_name
FLAGS:FLAGS为一些可选参数设置,大概包括如下的一些参数:
–gray= bool类型,默认为false,设置为true时将图像当作灰度图像来处理,否则当作彩色图像处理。
–shuffle= bool类型,默认为false,设置为true时则代表将图像集中的图像顺序随机打乱。使用这一操作的目的是使得图像分布均衡。
–backend= string类型,可以取值的集合为{“lmdb”,“leveldb”},默认为“lmdb”,代表采用何种形式的来存储转换后的数据。
–resize_width= int32类型,默认为0,为非0值时代表图像的宽度将resize成resize_width。
–resize_height= int32类型,默认值为0,如果为非0值代表图像的高度将被resize成resize_height。
–check_size= bool类型,默认为false,为true时在处理数据时将检查每一条数据的大小是否相同。
–encoded= bool类型,默认为false,为true时代表将存储编码后的图像,具体采用的编码方式将由encode_type决定。
–encoded= string类型,默认为“”,用于指定使用何种编码方式存储编码后的图像,取值为编码方式的后缀,如”png”等。
rootfolder/:表示原始图像所在的文件夹,必须参数。需要注意的是,这个文件路径的设置需要看listfile中的值的情况。比如listfile中的路径是从rootfolder(不包括)下开始的,则直接设为rootfolder,否则将根据listfile中的路径的父目录来设置rootfolder。比如:C:\train下由几个分好类的文件夹,分别为male文件夹(其中全为男孩图像)和female文件夹(其中全为女孩文件夹),假设rootfolder为C:\train,则在listfile中的标签路径就应该为:“male\图像名.后缀 类别”或“female\图像名.后缀 类别”这样的格式。
listfile:该参数表示labels(标签)文件,必须参数。其在Windows中往往是.txt文件,文件中的格式为“male\图像名.后缀 类别”或“female\图像名.后缀 类别”这样的格式。需要注意的是,该文件中的标签需要与rootfolder拼接的上,即rootfolder+该标签能形成对应图像的位置。
db_name:表示lmdb或leveldb文件的文件夹,一般为…\train_lmdb或…\test_lmdb,在生成之后,该文件之下会生成对应的数据库data.mdb和lock.mdb。
值得注意的是,在有时候使用convert_imageset命令时,其db_name路径中如果存没有命名为.lmdb的字样,则在common.cpp中的18行进行检查时可能就会出现如下错误:
所以,在出现这样的问题时,可以将db_name改为train_lmdb类似的名字,如: