caffe初探1:生成自己的数据集

之前的博文转载过如何配置caffe,在配置好caffe之后呢,我们就可以利用caffe结合自己设计的网络与制作的数据集来训练模型并且测试了。可是,一口吃一个胖子是很愚蠢的,笔者希望通过若干个系列的博客告诉大家如何一步一步地训练出自己的模型并测试。这若干个系列的博客笔者打算这样安排:


(1)数据的准备与训练数据集生成


(2)有关caffe网络设计的探索


(3)结合数据集与设计的网络对模型进行训练


(4)对训练得到的模型进行测试


空谈误国,实干兴邦,废话少说,下面就开始第一步,准备数据与生成自己的训练集!


首先,需要准备自己的数据,在这里先说明一下,笔者打算借用经典的AlexNet网络结构,又因目标是构造一个深度学习网络(分类器),来找到图片中是否存在岔路口,因此,需要搜集岔路口与不是岔路口的图片,在这里,笔者搜集了265张不包含岔路口的道路照片与265张包含岔路口的道路照片,然后各抽出35张放在一个文件夹里面组成测试集(共70张),剩下的合在一起组成训练集(460张),对于测试集与训练集中的图片,笔者使用OpenCV2把图片尺寸调成了一样(256*256),此处也可以不使用OpenCV,使用其他工具均可,目的是使图片尺寸转为一样,测试集截图如下图所示:


训练集截图如下所示:


现在,测试数据就准备好了,那么,我们把这些数据拷贝到Ubuntu的caffe目录下。笔者是在caffe目录下建了一个叫forkrecognition的文件夹,在里面建立了一个叫data的文件夹,把测试集图片与训练集图片分文件夹存在test文件夹与train文件夹下面,两类图片的路径分别为./caffe/forkrecognition/data/test和./caffe/forkrecognition/data/train,如下图所示。


到这一步之后,caffer都知道,训练所需的数据集都是.mdb格式的,接下来笔者就介绍如何生成.mdb文件。
首先,我们需要两个标签txt文档,分别存放训练集与测试集文件的类别,因为目前需要二分类,笔者就拟定图片中有岔路口的情况为1,没有岔路口的情况为0,对训练集与测试集分别撰写(生成)标签txt文件,因为之前命名的图片文件名都是有规律的,因此建议大家用c/c++文件操作去撰写txt标签文档,成品如下图所示。
测试集txt标签文档截图:路径为./caffe/forkrecognition/test.txt


训练集txt标签文档截图:路径为./caffe/forkrecognition/train.txt


接下来,撰写生成数据集的脚本文件(后缀名称是.sh的),之前笔者提到,因为本问题求解网络模型是参照经典的AlexNet网络架构,因此可以仿造经典模型生成数据集的.sh文件,在./caffe/forkrecognition文件夹下面创建create_imagenet.sh文件,详情见下方。

<pre name="code" class="plain">#!/usr/bin/env sh
# Create the imagenet lmdb inputs
# N.B. set the path to the imagenet train + val data dirs
set -e

EXAMPLE=forkrecognition        #最后用来存放数据集文件的根目录
DATA=forkrecognition           #存放标签文档的根目录
TOOLS=build/tools              #用来重新调整图片大小的工具的根目录,因为之前已经调整过大小,其实是可以不用调整的,便于保险可以加上

TRAIN_DATA_ROOT=forkrecognition/data/train/ #训练集合图片的路径
VAL_DATA_ROOT=forkrecognition/data/test/    #测试集图片的路径

# 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/test.txt \    #生成测试集标签文档的总路径
    $EXAMPLE/test_lmdb  #生成测试集文档路径


echo "Done."


 
接下来,在caffe根目录下面运行./forkrecognition/create_imagenet.sh命令,可以看见,./caffe/forkrecognition/路径下面是不是生成了test_lmdb文件和train_lmdb文件了呢?点开他们,是不是各自都有data.mdb文件和lock.mdb文件呢?这就是训练模型所需的数据集啊。 

到此,数据集就生成成功了,欢迎读者朋友们光顾笔者后续博客哦~


written by jiong
谅解,支援和友谊,比什么都重要!
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页