caffe 练习2 用自己的数据集在ImageNet 测试------by 香蕉麦乐迪

来源:互联网 发布:酷云eye麻雀收视数据 编辑:程序博客网 时间:2024/04/27 15:35

目的:使用自己的数据集,使用caffe自带的ImageNet网络结构,训练测试

参考官网链接:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html

我自己准备的数据集:http://pan.baidu.com/s/1o60802I

我们的数据集图片分10个类,每个类有100个train图片(train文件夹下,一共1000),20个test图片(val文件夹下,一共200)


1 首先准备自己的数据集

我们需要准备的文件有:

1 文件夹train:里面放训练的图片

2 文件夹val:里面放val的图片

3 train.txt :训练图片的文件名和对应的类别

4 val.txt:测试图片的文件名和对应的类别

我已经为大家准备好了,下载链接:http://pan.baidu.com/s/1o60802I

以后大家自己准备数据集,就按照上面的方式将 图片和txt文件,放入对应目录下

2  创建lmdb格式数据集

在caffe安装的根目录下执行下面的脚本可以创建lmdb文件,用于caffe的数据输入;

./examples/imagenet/create_imagenet.sh

对于这个脚本,我们打开,根据自己的路径做更改;

原脚本:

#!/usr/bin/env sh# Create the imagenet lmdb inputs# N.B. set the path to the imagenet train + val data dirsEXAMPLE=examples/imagenet    %@@ 这里是一些路径,根据自己的路径修改DATA=data/ilsvrc12TOOLS=build/toolsTRAIN_DATA_ROOT=/path/to/imagenet/train/VAL_DATA_ROOT=/path/to/imagenet/val/# Set RESIZE=true to resize the images to 256x256. Leave as false if images have# already been resized using another tool.RESIZE=false                   %@@ 这是设置RESIZE = true,caffe就可以帮我们修改好图片的尺寸if $RESIZE; then  RESIZE_HEIGHT=256  RESIZE_WIDTH=256else  RESIZE_HEIGHT=0  RESIZE_WIDTH=0fiif [ ! -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 1fiif [ ! -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 1fiecho "Creating train lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \    %@@ 这里会调用作者已经写好的 convert_imageset 函数    --resize_height=$RESIZE_HEIGHT \    %@@ 通过该函数可以产生lmdb的数据    --resize_width=$RESIZE_WIDTH \    --shuffle \    $TRAIN_DATA_ROOT \  %@@ 训练图片的路径    $DATA/train.txt \   %@@ 输入train.txt的路径    $EXAMPLE/ilsvrc12_train_lmdb %@@输出train_lmdb的路径echo "Creating val lmdb..."GLOG_logtostderr=1 $TOOLS/convert_imageset \    --resize_height=$RESIZE_HEIGHT \    --resize_width=$RESIZE_WIDTH \    --shuffle \    $VAL_DATA_ROOT \  <span style="font-family: Arial, Helvetica, sans-serif;">%@@ 训练图片的路径</span>    $DATA/val.txt \   %@@ 输入val.txt的路径    $EXAMPLE/ilsvrc12_val_lmdb %@@输出val_lmdb的路径echo "Done."

ps:注意,要设置RESIZE = true。因为imagenet这个网络结构输入图片的大小都必须是227*227的,设置RESIZE = true后,caffe就可以帮我们将图片的大小变换好;


3 计算图像均值

输入数据需要训练图片的均值图像

官方提供脚本帮助我们计算,如下:

./examples/imagenet/make_imagenet_mean.sh
计算完后得到一个文件:

data/ilsvrc12/imagenet_mean.binaryproto.

当然,跟上面一样,我们使用需要更改脚本对应的路径

脚本原文件:

#!/usr/bin/env sh# Compute the mean image from the imagenet training lmdb# N.B. this is available in data/ilsvrc12EXAMPLE=examples/imagenetDATA=data/ilsvrc12TOOLS=build/tools$TOOLS/compute_image_mean $EXAMPLE/ilsvrc12_train_lmdb \  $DATA/imagenet_mean.binaryprotoecho "Done."

根据我的路径修改后的文件:(注意,你的跟我的不一定一样)

#!/usr/bin/env sh# Compute the mean image from the imagenet training lmdb# N.B. this is available in data/ilsvrc12
ROOT=/home/a216/caffe-masterEXAMPLE=$ROOT/sloanqin/examples/godpoolDATA=$ROOT/sloanqin/data/godpool/txt TOOLS=$ROOT/build/tools$TOOLS/compute_image_mean $EXAMPLE/godpool_train_lmdb \  $DATA/godpool_mean.binaryprotoecho "Done."

4 配置网络结构文件

网络模型文件在  models/bvlc_reference_caffenet/train_val.prototxt 文件中;

这里我们直接使用caffe提供的这个网络结构,以后我们再根据自己的想法做更改;

注意:大家需要打开这个文件,更改里面的路径

5 训练参数文件

训练参数文件在:models/bvlc_reference_caffenet/solver.prototxt中

我对solver.prototxt 修改后的参数如下:

net: "/home/a216/caffe-master/sloanqin/data/godpool/txt/train_val.prototxt"test_iter: 4  //测试的时候,输入4个batchtest_interval: 1000 //每迭代1000次,测试一次base_lr: 0.01  // 初始的学习率是0.01lr_policy: "step"gamma: 0.1stepsize: 3000 //每迭代3000次,调整一次学习率display: 20  //每20次迭代,显示一次max_iter: 12000 //最大迭代12000次momentum: 0.9weight_decay: 0.0005snapshot: 5000snapshot_prefix: "/home/a216/caffe-master/sloanqin/data/godpool/txt/caffenet_train"solver_mode: GPU
ps:你要根据自己的路径做修改

知识点说明:查看我们train_val.prototxt文件,发现batch_size: 50;我们的test图片是200张,200/50=4,所以

test_iter=4


6  开始训练

./build/tools/caffe train --solver=/home/a216/caffe-master/sloanqin/data/godpool/txt/solver.prototxt

当然,上面的命令,需要根据你自己的路径相应的改下

7 结果

训练过程中,可以看到正确率在不断提升;最后的准确率是50%;

我们的样本数很少,当图片到百万数量级的时候,效果会很大提升;

而且我提供的数据是淘宝的图片,本身的难度很大,就是人也很难分清楚;











2 0
原创粉丝点击