caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件

在深度学习的实际应用中,我们经常用到的原始数据是图片文件,如jpg,png,tif等格式的,而且有可能图片的大小还不一致。
我今天尝试制作一个自己的训练数据集,主要步骤为:
1.用MATLAB截图得到训练集的图片
2.生成标签文件列表,即生成 train.txt val.txt 文件
3.将 txt 文件列表中的图像与train图像库、val图像库的图像相连接,生成lmdb格式文件


实验是对一副315×299像素的jpg灰度图片所进行的,我首先用MATLAB截图代码对其进行了三个类别的截图,然后对这三个类别进行15×15的滑动窗口分割,得到了每个类别400张15×15的图片样本,其中200张用作train 100张用做test。
而在caffe中经常使用的数据类型是lmdb或leveldb,如何从原始图片文件转换成caffe中能够运行的db(leveldb/lmdb)文件?
在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在根目录下的tools文件夹下。编译之后,生成对应的可执行文件放在 buile/tools/ 下面,这个文件的作用就是用于将图片文件转换成caffe框架中能直接使用的db文件。


1 数据准备

首先在caffe根目录下建立一个文件夹myfile,用于存放数据文件和后面的caffe模型相关文件。
caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件_第1张图片

然后在myfile文件夹下建立build_lmdb和datatest两个文件夹,其中build_lmdb文件夹用于存放生成的lmdb文件,datatest文件夹存放图片数据。

caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件_第2张图片

在datatest下主要有2个文件夹和2个.sh文件和2个.txt文件,其中train文件夹中存放待训练的图片,val文件夹中存放待测试的图片,creatlist.sh是分别用来生成train和val的.sh文件,train.txt和val.txt是生成的标签文件。

caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件_第3张图片

建立好文件夹后,我们把MATLAB分割好的图片放到train和val文件夹里面
我在这里对3个类别分别又建立了3个文件夹

caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件_第4张图片
这是其中的一个类别,其他的和val文件夹同此, 把待训练的图片放到这里。

2 生成train.txt val.txt

下面是生成train.txt标签文件的.sh文件指令

  1. 其中DATA是train数据的目录,DATASAVE是train.txt保存的路径
  2. -name ground*.jpg的意思呢是指的是以ground开头的图片名字
  3. cut -d ‘/’ -f3-5是截取图片的路径,调整-f后面的数字可设置几级路径
  4. sed “s/$/ 1/”是在其后面加上 1(空格和1)
  5. 然后保存到train.txt中
# /usr/bin/env sh
DATA=myfile/datatest/train/  
DATASAVE=myfile/datatest/
echo "Create train.txt..."

find $DATA -name ground*.jpg | cut -d '/' -f3-5 | sed "s/$/ 1/">>$DATASAVE/train.txt
find $DATA -name sea*.jpg | cut -d '/' -f3-5 | sed "s/$/ 2/">>$DATASAVE/tmp.txt
find $DATA -name matou*.jpg | cut -d '/' -f3-5 | sed "s/$/ 3/">>$DATASAVE/tmp1.txt

cat $DATASAVE/tmp.txt>>$DATASAVE/train.txt
cat $DATASAVE/tmp1.txt>>$DATASAVE/train.txt

rm -rf $DATASAVE/tmp.txt
rm -rf $DATASAVE/tmp1.txt

echo "Done.."

以此就可以生成train.txt文件了,见下图

caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件_第5张图片

生成val.txt文件同上
至此我们就已经完成了制作自己的数据集以及生成train.txt和val.txt

3 生成LMDB文件

在caffe root/examples/imagenet中有个create_imagenet.sh文件,我们将其复制到我们的build_lmdb文件夹下重命名为create_mynet.sh,然后对其中需要修改的地方进行修改:

  1. 其中EXAMPLE=myfile/build_lmdb改为自己文件的路径
  2. DATA=myfile/datatest,改为自己的路径
  3. TRAIN_DATA_ROOT和TRAIN_DATA_ROOT修改到路径datatest,这里因为train.txt文件的路径是从datatest开始的
  4. TOOLS保持不变
  5. resize是调整其大小为256*256以适应net的输入,这里还不太懂,先记下来
#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e

EXAMPLE=myfile/build_lmdb
DATA=myfile/datatest
TOOLS=build/tools

TRAIN_DATA_ROOT=/home/dragon/caffe/myfile/datatest/
VAL_DATA_ROOT=/home/dragon/caffe/myfile/datatest/

# 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=256
  RESIZE_WIDTH=256
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 \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $EXAMPLE/train_lmdb

echo "Creating val lmdb..."

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

echo "Done."

然后在终端里面执行

cd caffe
./myfile/build_lmdb/create_mynet.sh

即可得到lmdb文件

caffe学习笔记(四)--制作自己的数据集train.txt和val.txt,生成LMDB文件_第6张图片

然后就可以利用这些文件进行训练啦,我看有的模型里面还有添加均值文件,下次在学习均值文件的生成~

参考:

  1. http://blog.csdn.net/hjimce/article/details/49248231
  2. http://blog.csdn.net/liuweizj12/article/details/52149743
  3. http://www.cnblogs.com/denny402/p/5082341.html
  4. 薛凯宇学习笔记

你可能感兴趣的:(Caffe学习笔记)