Caffe 数据集制作及使用

前端之家收集整理的这篇文章主要介绍了Caffe 数据集制作及使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

假设处理PascalVOC数据集,

图像文件存放路径:/home/my/caffe/data/pascal/JPEGImages/(训练图像和测试图像在一个文件夹内,)

train.txt路径:/home/my/caffe/data/pascal/

val.txt路径:/home/my/caffe/data/pascal/

网络训练文件路径:/home/my/caffe/examples/pascal

其中网络训练文件就是将/home/my/caffe/examples/imagenet文件夹中的文档全部复制过来,修改文件名。

1.前期准备:

我们有两个数据集:训练集train和测试集valtrainval文件夹中存放了原始图像,train.txtval.txt中存放了图像文件名和标签txt文件夹中的图像名必须与文件夹中图像名称一致,且TXT文件中的图像名称是包含后缀的,名称标签之间只能有一个空格!!!若无后缀或者空格较多等情况,使用文档编辑器的查找与替换功能批量处理,无需写程序文件

2.生成lmdb文件

修改create_pascal.sh(就是create_imagenet.sh文件,只是根据需要改了名字)

#!/usr/bin/env sh
# Create the pascal lmdb inputs
# N.B. set the path to the pascal train + val data dirs
set -e
EXAMPLE=examples/pascal #输出lmdb的路径,这里无需添加绝对路径,且路径前后都没有“/”
DATA=data/pascal        #txt文件的路径
TOOLS=build/tools       
 
#TRAIN_DATA_ROOT=/path/to/pascal/train/
#VAL_DATA_ROOT=/path/to/pascal/val/
 
TRAIN_DATA_ROOT=data/pascal/JPEGImages/   #训练图像路径
VAL_DATA_ROOT=data/pascal/JPEGImages/     #测试图像路径
 
# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=true         #数据集图像需要更改大小的话就设为true,否则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_pascal.sh to the path" \
       "where the pascal 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_pascal.sh to the path" \
       "where the pascal validation data is stored."
  exit 1
fi
 
rm -rf $EXAMPLE/pascal_train_lmdb    #删除原有lmdb文件,否则无法运行第二次
rm -rf $EXAMPLE/pascal_val_lmdb      
 
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/pascal_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/pascal_val_lmdb
 
echo "Done."
-shuffle: 是否随机打乱图片顺序。默认为false

3.二进制均值文件make_pascal_mean.sh

#!/usr/bin/env sh
# Compute the mean image from the imagenet training lmdb
# N.B. this is available in data/ilsvrc12
 
EXAMPLE=examples/pascal  #同第2步
DATA=data/pascal
TOOLS=build/tools
 
$TOOLS/compute_image_mean $EXAMPLE/pascal_train_lmdb \
  $DATA/pascal_mean.binaryproto
 
echo "Done."
 

4.如何在原有训练模型上继续训练?

在训练文件夹中创建resume_train.sh,内容与训练sh文件相同,打开后,

#!/usr/bin/env sh
set -e
./build/tools/caffe train \
--solver=examples/pascal/solver.prototxt $@


删除“$@”后添加“\”,添加

--snapshot=examples/pascal/caffenet_train_10000.solverstate.h5

create_pascal.sh内容

#!/usr/bin/env sh
set -e
./build/tools/caffe train \
--solver=examples/pascal/solver.prototxt \
--snapshot=examples/pascal/caffenet_train_10000.solverstate.h5

说明在迭代10000次之后的模型(模型文件caffenet_train_10000.solverstate.h5,其实还有一个文件,不过填的是这个)中继续训练。

猜你在找的Ubuntu相关文章