caffe进行数据转换过程以及生成lmdb出现的问题

1.在进行数据转换时,应先将对应的训练集以及验证集中的图片以txt文件形式生成对应训练或者是验证集当中的图片列表以及对应的编号,文件名为create_filelist.sh

   这一部分参看以下代码:

#!/usr/bin/env sh
DATA=/home/gwl/caffe/examples/myfile4/data
MY=/home/gwl/caffe/examples/myfile4/data

echo "Create train.txt..."
rm -rf $MY/train.txt

find $DATA/train -name 1f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 0/">>$MY/train.txt
find $DATA/train -name 2f*.jpg | cut -d '/' -f7-10| sed "s/$/ 1/">>$MY/train.txt
find $DATA/train -name 3f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 2/">>$MY/train.txt
find $DATA/train -name 4f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 3/">>$MY/train.txt
find $DATA/train -name 5f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 4/">>$MY/train.txt
find $DATA/train -name af*.jpg | cut -d '/' -f7-10 | sed "s/$/ 5/">>$MY/train.txt
echo "Create test.txt..."
rm -rf $MY/val.txt

find $DATA/val -name 1f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 0/">>$MY/val.txt
find $DATA/val -name 2f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 1/">>$MY/val.txt
find $DATA/val -name 3f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 2/">>$MY/val.txt
find $DATA/val -name 4f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 3/">>$MY/val.txt
find $DATA/val -name 5f*.jpg | cut -d '/' -f7-10 | sed "s/$/ 4/">>$MY/val.txt
find $DATA/val -name af*.jpg | cut -d '/' -f7-10 | sed "s/$/ 5/">>$MY/val.txt
echo "All done"

DATA路径是训练集以及验证集的路径,这里最好是绝对路径,不然会出现图片找不到的情况.MY路径是对应的生成train.txt和val.txt的路径.

对上面的代码解释:创建txt列表前先删除存在的即使用rm -rf 指令语句,后面跟的是对应的路径.使用find 找到路径下的图片,之后就是剪切图片路径中的一部分来作为图片的地址,具体的来讲就是,find 1f1.jpg的路径为/home/gwl/caffe/examles/myfile4/data/train/1f1.jpg.需要将路径的data/train/1f1.jpg截取出来,-f7-10功能就是对应的字段.sed 的功能就是在截取出的部分路径后面添加对应图片的标签,中间是以空格作为间隔.

完成后执行create_filelist.sh文件,生成的列表如下所示:

2.将数据生成caffe所需要的lmdb格式

这一段内容可以参看caffe当中自带的examples/imagenet/create_imagenet.sh.下面是我根据此文件进行修改为自己转换lmdb的文件代码:create_lmdb.sh

#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e

EXAMPLE=/home/gwl/caffe/examples/myfile4/data
DATA=/home/gwl/caffe/examples/myfile4
TOOLS=/home/gwl/caffe/build/tools

TRAIN_DATA_ROOT=/home/gwl/caffe/examples/myfile4/
VAL_DATA_ROOT=/home/gwl/caffe/examples/myfile4/

# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=false
if $RESIZE; then
  RESIZE_HEIGHT=128
  RESIZE_WIDTH=128
else
  RESIZE_HEIGHT=0
  RESIZE_WIDTH=0
fi

if [ ! -d "$TRAIN_DATA_ROOT" ]; then
  echo "Error: TRAIN_DATA_ROOT is not a path to a directory: $TRAIN_DATA_ROOT"
  echo "Set the TRAIN_DATA_ROOT variable in create_imagenet.sh to the path" \
       "where the ImageNet training data is stored."
  exit 1
fi

if [ ! -d "$VAL_DATA_ROOT" ]; then
  echo "Error: VAL_DATA_ROOT is not a path to a directory: $VAL_DATA_ROOT"
  echo "Set the VAL_DATA_ROOT variable in create_imagenet.sh to the path" \
       "where the ImageNet validation data is stored."
  exit 1
fi

echo "Creating train lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    --gray=true \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $EXAMPLE/ilsvrc12_train_lmdb

echo "Creating val lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    --gray=true \
    $VAL_DATA_ROOT \
    $DATA/val.txt \
    $EXAMPLE/ilsvrc12_val_lmdb

echo "Done."

 同时可以参考这个链接[1]进行修改.代码执行create_lmdb.sh之后就会得到以下文件ilsvrc12_train_lmdbilsvrc12_val_lmdb两个文件夹.里面分别存放以下两个文件:

3.出现的问题

  常见的问题1,会提示图片找不到,这是由于在生成列表时的路径不太对,需要对代码重新进行梳理.

             问题2:

Creating lmdb...
F0317 23:52:11.251822 25848 db_lmdb.cpp:13] Check failed: mkdir(source.c_str(), 0744) == 0 (-1 vs. 0) mkdir examples/mnist/mnist_train_lmdb failed
*** Check failure stack trace: ***
    @     0x7f23323addaa  (unknown)
    @     0x7f23323adce4  (unknown)
    @     0x7f23323ad6e6  (unknown)
    @     0x7f23323b0687  (unknown)
    @     0x7f23328ad11c  caffe::db::LMDB::Open()
    @           0x4028e7  convert_dataset()
    @           0x4023b3  main
    @     0x7f23315bdf45  (unknown)
    @           0x4023f3  (unknown)
    @              (nil)  (unknown)
Aborted (core dumped)

对于这个问题,链接[2]   ,下面给出的是将/usr/local/lib,/usr/lib,/usr/local/cuda/lib64,/usr/local/cuda-8.0/lib64全部加入/etc/ld.so.conf,然后执行命令ldconfig,再运行脚本.这样的解决办法对于我来说是没有用的.对于这个问题我觉得还是自己在写create_lmdb.sh文件时,里面路径不对.之前我出现过这个问题,后来根据官方的imagenet文件下的那个文件进行修改就不存在这个问题.

问题3. 会出现not permission这样字样

  这个问题就是关于权限的问题,这是由于在操作出现问题的地方坐在的文件夹时,使用的是sudo进行操作,接下来需要对此文件进行去权限操作.使用 sudo chmod 777 ***. ***代表的是出现问题的文件或者是文件夹.

Reference:

[1].http://www.bubuko.com/infodetail-1896125.html

[2].http://www.caffecn.cn/?/question/1181

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值