Caffe 将原始图像数据转换成leveldb/lmdb格式

来源:互联网 发布:php 替换字符串 编辑:程序博客网 时间:2024/05/04 10:59

caffe框架使用的数据格式通常是lmdb和leveldb,但是我们经常用到的是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致。
转换过程中,需要准备两部分内容:
1:train.txt和test.txt带有标签的图像地址列表文件,
2:执行文件。
第一部分如下图所示
这里写图片描述
注意:必须保证路径正确,并且在标签后面不能出现空格,否则会出现找不到文件的错误。()
我们可以查看源代码,convet_imageset.cpp中有这样一段:

int label;  while (std::getline(infile, line)) {    pos = line.find_last_of(' ');    label = atoi(line.substr(pos + 1).c_str());    lines.push_back(std::make_pair(line.substr(0, pos), label));  }

第二部分:
在convet_imageset.cpp文件main函数中给出执行文件的写法如下:

这里写图片描述
ROOTFOLDER/: 图片存放的绝对路径
LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片(带有标签)
DB_NAME: 生成的db文件存放位置
我们来了解一下FLAGS参数组的内容:

DEFINE_bool(gray, false,    "When this option is on, treat images as grayscale ones");DEFINE_bool(shuffle, false,    "Randomly shuffle the order of images and their labels");DEFINE_string(backend, "lmdb",        "The backend {lmdb, leveldb} for storing the result");DEFINE_int32(resize_width, 0, "Width images are resized to");DEFINE_int32(resize_height, 0, "Height images are resized to");DEFINE_bool(check_size, false,    "When this option is on, check that all the datum have the same size");DEFINE_bool(encoded, false,    "When this option is on, the encoded image will be save in datum");DEFINE_string(encode_type, "",    "Optional: What type should we encode the image as ('png','jpg',...).");

–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’……

编写执行文件,创建.bat脚本。
.\Build\x64\Release\convert_imageset.exe –gray=true –backend=leveldb –shuffle=true –resize_height=22 –resize_width=22 test/ test.txt leveldb
这里写图片描述
大功告成!
调了一上午的错误,终于在Release下跑通了。。。我觉得应该写一个改错误的文章了。。。。有空多看看源码吧

0 0
原创粉丝点击