本文主要是介绍利用Caffe创建自己的lmdb数据集,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
用Caffe进行模型训练时,除了用现有的公开数据集(如MNIST, CIFAR等),有时候我们还需要创建自己的数据集进行训练。本篇博客讲的就是如何利用Caffe中的模块创建自己lmdb数据集。
数据集准备
我们需要自己准备好带类别标签的图片数据,并将数据统一命名,这里为了方便,我直接从CIFAR10训练集中拿出5000张图片用于制作验证集,图片为.png格式,并采用‘图片编号_类别标签.png’的命名方式(这个实现起来应该不难,这里就不赘述了),保存在一个文件夹下,部分例子如下:
创建图片名列表清单
这里我们需要创建一个txt文本用来存放所有图片的信息,文本中每行存放一个样本,内容包括图片名和类别标签信息,中间用空格分开。这个实现方法很多,这里我给出一个用python实现的方法:
import os
def create_image_list(file_path,txtpath):"""Create a list of all images and save to a '.txt' file, each image is named as'num_label.png'. For example: 1001_2.pngInputs:file_path: path of image filetxtpath: '.txt' file used to save all images' names and labelsReturn: none"""# remove the old list fileif os.path.isfile(txtpath):os.remove(txtpath)# get the name list of all images image_name_list = os.listdir(file_path)# save the names and labels of all images to the '.txt' file named 'txtname'with open(txtpath,'a') as f:print 'saving to '+txtpath+'...'for image_name in image_name_list:image_label = image_name.split('_')[1].split('.')[0]image_data = image_name+' '+image_labelf.write(image_data+'\n')print 'done.'
注意:代码中输入参数的路径都是绝对路径,当然如果感觉用绝对路径麻烦也该以稍微改动一下变成相对路径。
自己写代码调用上面这个函数,就可以生成下面的txt文本:
生成lmdb文件
这里我们用到的是Caffe下自带的convert_imageset可执行文件,如果你已经成功编译Caffe,这个文件应该在caffe-master/build/tools/下。要用这个可执行文件,我们需要提供三个路径,分别是原始图片数据存放路径、图片列表清单路径(就是之前生成的txt文本路径)和生成的lmdb文件存放路径,这里给出我之前转化数据集时用的脚本:
#!/bin/bash
# convert images to lmdbDATA=/home/meringue/DataBase/cifar-10-batches-py
IMGDIRNAME=train_valid
IMGLIST=img_name_list/train_valid.txt
LMDBNAME=train_valid_lmdbrm -rf $DATA/$LMDBNAME
echo 'converting images...'
/home/meringue/Softwares/caffe-master/build/tools/convert_imageset --shuffle=true \
$DATA/$IMGDIRNAME/ $DATA/$IMGLIST $DATA/$LMDBNAME
上面代码中的参数shuffle=true表示打乱数据,还有很多其他参数设置可以在caffe-master/tools/convert_imageset.cpp中查看。
转化速度很快,运行结束后,我们可以在程序中指定的lmdb路径下看到类似下面的文件:
为了保险起见,最好看一下data.mdb这个文件的大小,当你的数据比较大的时候,这个文件也因该很大。如果发现data.mdb很小,说明转化的时候出现了问题,回去检查一下。一般我们最后需要给lmdb数据添加可读权限,可以通过linux下sudo chmod 777 -R ./PATH 获取所有权限。否则有时候程序调用会出现类似没有权限的错误。
这篇关于利用Caffe创建自己的lmdb数据集的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!