caffe学习(3):ubuntu下将图像数据转换成lmdb文件

上一节是使用已有的二进制文件转换成lmdb文件,但一般我们使用的很可能是原始图片,比如png、jpg格式。因此,这一节讨论将jpg格式转换成lmdb文件格式。
我主要参考了徐其华的学习专栏:Caffe学习系列(11):图像数据转换成db(leveldb/lmdb)文件。在做的过程中发现了很多问题,在这里记录一下,主要参数和原理的讲解可以参考徐其华的学习专栏。
本节用到了caffe中自带的图片,在目录caffe/examples/images里面有cat.jpg和fish-bike.jpg图片。将他们两者转换成lmdb格式。

一、确定函数以及步骤

在caffe中,作者提供了图像转换文件:convert_imageset.cpp,它存放在caffe/build/tools/文件夹下。编译之后,生成对应的可执行文件放在 build/tools/ 下面,这个文件的作用就是用于将图片文件转换成caffe框架中能直接使用的db文件。

该文件的使用格式: convert_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
需要带四个参数:
(1)FLAGS: 图片参数组
(2)ROOTFOLDER/: 图片存放的绝对路径,从linux系统根目录开始
(3)LISTFILE: 图片文件列表清单,一般为一个txt文件,一行一张图片
(4)DB_NAME: 最终生成的db文件存放目录

从上面来看,我们首先需要做一个图片文件列表清单,再确定参数和路径,然后编写调用程序。

二、做图片文件列表清单

首先,在caffe/examples/images下创建脚本,用来生成图片文件列表清单。代码为:

# sudo nano create_filelist.sh

然后编写具体代码:

# /usr/bin/env sh
MY=~/caffe/examples/images
echo "Create train.txt..."
rm -rf $MY/train.txt
find $MY -name cat.jpg | cut -d '/' -f 7 | sed 's/$/ 1/'>>$MY/train.txt
find $MY -name fish-bike.jpg | cut -d '/' -f7 | sed 's/$/ &2/'>>$MY/tmp.txt
cat $MY/tmp.txt>>$MY/train.txt
rm -rf $MY/tmp.txt
echo "Done.."

如图:
这里写图片描述
注意:
(1)文件的路径要正确,否则会出现找不到文件夹,no such files or directory的错误。我这里是绝对路径,用的是~/caffe/examples/images,发现有的网友还可能是/home/caffe/examples/images等等。
(2)cut -d ‘/’ -f 7这里有玄妙。-f表示指定第几列的内容打印出来,徐其华的原文是-f3,用在我的电脑上就不行了,显示的是同一个名字,我需要用-f7,则显示的是图片的原始名字。估计还是和你设置的绝对路径有关。

三、运行create_filelist.sh文件

编写好create_filelist.sh之后,就可以运行了,代码如下:

$ ./create_filelist.sh

注意:
(1)这里可能会出现类似于“找不到文件”或者“文件没有权限”的命令,可能是你的.sh文件被锁住了。需要解锁。代码为:

$ sudo chmod -R 777 create_filelist.sh

解锁后,就可以运行了。运行完成后,可以看到caffe/examples/images文件夹下生成了train.txt文件了。
这里写图片描述
train.txt里的内容是:
这里写图片描述

四、创建.sh文件生成lmdb

创建了train.txt,就来看看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’……

知道参数内容后,开始创建create_lmdb.sh脚本了。代码如下:
代码为:

# sudo nano create_lmdb.sh

然后编写具体代码:

#/usr/bin/env sh
MY=~/caffe/examples/images
rm -rf $MY/img_train_lmdb
~/caffe/build/tools/convert_imageset --shuffle \
--resize_height=256 --resize_width=256 \
~/caffe/examples/images/ $MY/train.txt $MY/img_train_lmdb

如图:
这里写图片描述
同样,还是要注意绝对路径,不然会出错。运行过程如下:
这里写图片描述
到这里,就完成了jpg到lmdb的转换。查看文件夹可以发现生成了lmdb文件。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值