使用caffe训练自己的图像数据,未完

参考博客:blog.csdn.net/drrlalala/article/details/47274549

1,首先在网上下载图片,猫和狗。

直接保存下载该网页,会生成一个有图片的文件夹。

caffe-master/data 新建 myself

myself/ 新建 train dog

cat

test dog

cat

之后将图片分别复制到文件夹中

2,生成train.txt和test.txt

在train文件夹下运行 find -name *.jpg |cut -d '/' -f2-3 >train.txt

手动加标签 sed -i 's/$/ 0/g' train.txt 在末位加0

val.txt同理可得,也要加标签。

3,图片转化为lmdb格式

caffe-master/examples/ 新建 myself

复制examples/imagenet/create_imagenet.sh到 examples/myself

修改参照下面,主要是针对路径的修改

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

EXAMPLE=examples/myself      ##路径需要自己修改,默认的相对路径是在caffe-master下  
                                               
DATA=data/myself          ##是指生成的train.txt和val.txt的路径                     
TOOLS=build/tools

TRAIN_DATA_ROOT=data/myself/train/   ##注生成的数据最前面就不需要加/了
VAL_DATA_ROOT=data/myself/test/

# Set RESIZE=true to resize the images to 256x256. Leave as false if images have
# already been resized using another tool.
RESIZE=true    ##如果填true说明事先没有将其转为256*256格式
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 \           ##之前生成的list
    $EXAMPLE/myself_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/myself_test_lmdb

echo "Done."

之后 cd caffe-master

运行 sudo ./examples/myself/create_imagenet.sh

在examples/myself/ 下生成两个lmdb文件夹

4,计算图像均值

复制examples/imagenet/make_imagenet_mean.sh到 examples/myself

使用make_imagenet_mean.sh计算图像均值,在data/myself 下产生imagenet_mean.binaryproto文件

相对路径仍为 caffe-master下,按照自己的文件修改路径。

之后 sudo ./examples/myself/make_imagenet_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/myself
DATA=data/myself
TOOLS=build/tools

$TOOLS/compute_image_mean $EXAMPLE/myself_train_lmdb
$DATA/imagenet_mean.binaryproto

echo "Done."

5,定义网络

主要是修改下面三个文件:

my_train.prototxt

my_test.prototxt

solver.prototxt

这三个文件可以从caffe的已有例子中复制过来。接下来需要自己修改,修改的地方主要是,一些文件的路径和输出层的个数(即类别数目)。

6,写训练脚本my_train_lenet.sh 如下:(我这个是根据mnist中的文件改过来的)

#!/usr/bin/env sh
set -e

./build/tools/caffe train --solver=examples/myself/solver.prototxt $@

未完待续。