Caffe学习(7)——图像数据转换为db文件(leveldb/lmdb)

在深度学习的实际应用中,我们经常用到的的原始数据是如jpg、png等格式的图片文件,而且图片的大小也可能不一致。而在caffe中经常使用的数据类型是lmdb或leveldb(当然还有其他格式,这里不做介绍),因此,我们需要将原始图片文件转换为caffe中能够运行的db文件。

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

该文件的使用格式是:

conver_imageset [FLAGS] ROOTFOLDER/ LISTFILE DB_NAME
四个参数的作用分别是:

FLAGS:图片参数组,后面做详细介绍
ROOTFOLDER/:图片存放的绝对路径,从系统根目录开始

LISTFILE:图片文件列表清单,一般为一个txt文件,一行一张图片

DB_NAME:最终生成的db文件存放目录


第一个参数 FLAGS,示例代码:

set -e

EXAMPLE=examples/mnist
DATA=data/mnist
BUILD=build/examples/mnist

BACKEND="lmdb"

echo "Creating ${BACKEND}..."

rm -rf $EXAMPLE/mnist_train_${BACKEND}
rm -rf $EXAMPLE/mnist_test_${BACKEND}

$BUILD/convert_mnist_data.bin $DATA/train-images-idx3-ubyte \
  $DATA/train-labels-idx1-ubyte $EXAMPLE/mnist_train_${BACKEND} --backend=${BACKEND}
$BUILD/convert_mnist_data.bin $DATA/t10k-images-idx3-ubyte \
  $DATA/t10k-labels-idx1-ubyte $EXAMPLE/mnist_test_${BACKEND} --backend=${BACKEND}

echo "Done."
gray——是否以灰度图的方式打开图片。程序调用opencv库中的imread()函数来打开图片,默认为false

shuffle——是否随机打乱图片顺序,默认为false

backend——需要转换成db文件格式,可选为lmdb或leveldb,默认为lmdb

resize_width、resize_height——改变图片大小;在实际运行中,要求所有图片尺寸一致,因此需要修改图片大小。程序调用opencv的resize()函数来对图片放大缩小,默认为0,则是保持图片大小不变。

check_size——检查所有数据的尺寸是否相同,默认为false,不检查

encoded——是否将原图片编码放入最终数据中,默认为false

encode_type——编码方式


第三个参数LISTFILE:

图片可从网上下载,以caffe的mnist为例,get_mnist.sh:

#!/usr/bin/env sh
# This scripts downloads the mnist data and unzips it.

DIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd "$DIR"

echo "Downloading..."

for fname in train-images-idx3-ubyte train-labels-idx1-ubyte t10k-images-idx3-ubyte t10k-labels-idx1-ubyte
do
    if [ ! -e $fname ]; then
        wget --no-check-certificate http://yann.lecun.com/exdb/mnist/${fname}.gz
        gunzip ${fname}.gz
    fi
done
如果图片已经下载到了本地,首先需要创建一个图片列表清单,保存为txt。
创建一个create_filelist.sh文件,编辑此文件,代码如下:

# /usr/bin/env sh
DATA=examples/images
echo "Create train.txt..."
rm ­rf $DATA/train.txt
find $DATA ­name *cat.jpg | cut ­d '/' ­f3 | sed "s/$/ 1/">>$DATA/train.txt
find $DATA ­name *bike.jpg | cut ­d '/' ­f3 | sed "s/$/ 2/">>$DATA/tmp.txt
cat $DATA/tmp.txt>>$DATA/train.txt
rm ­rf $DATA/tmp.txt
echo "Done.."
rm:删除文件

find:寻找文件

cut:截取路径

sed:在每行的最后加上备注

cat:将两个类别合并到一个文件里

最终形成一个train.txt文件:

cat.jpg 1
fish­bike.jpg 2
除了训练集外,验证集和测试集都需要生成相应的文件:val.txt、test.txt。



除了leveldb和lmdb之外,我们经常会用到HDF5Data格式、MemoryData格式等,这里没有做介绍,但流程和参数都差不多,我的其他文章,如人脸标记点检测用的就是HDF5文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值