ubuntu14.04+caffe训练测试自己的图片数据

本文根据此博客遇到的问题所做出的更改:http://www.cnblogs.com/denny402/p/5083300.html       http://www.cnblogs.com/denny402/p/5137534.html

我的图片放在caffe/examples/images/中

一.create_filelist.sh中代码内容更改如下:

#!/usr/bin/env sh
DATA=/home/xxx(自己的电脑名称)/caffe/examples/images/re
MY=/home/xxx/caffe/examples/myfile


echo "Create train.txt..."
rm -rf $MY/train.txt
for i in 3 4 5 6 7 
do
find $DATA/train -name $i*.jpg | cut -d '/' -f8-10 | sed "s/$/ $i/">>$MY/train.txt
done
echo "Create test.txt..."
rm -rf $MY/test.txt
for i in 3 4 5 6 7
do
find $DATA/test -name $i*.jpg | cut -d '/' -f8-10 | sed "s/$/ $i/">>$MY/test.txt
done
echo "All done"


二.create_lmdb.sh代码内容更改如下:

#!/usr/bin/env sh
MY=/home/xxx/caffe/examples/myfile


echo "Create train lmdb.."
rm -rf $MY/img_train_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_height=256 \
--resize_width=256 \
/home/xxx/caffe/examples/images/re/ \
$MY/train.txt \
$MY/img_train_lmdb


echo "Create test lmdb.."
rm -rf $MY/img_test_lmdb
build/tools/convert_imageset \
--shuffle \
--resize_width=256 \
--resize_height=256 \
/home/xxx/caffe/examples/images/re/ \
$MY/test.txt \
$MY/img_test_lmdb


echo "All Done.."

三.创建模型并编写数据文件

①关于solver.prototxt的修改

net: "examples/myfile/train_val.prototxt"   #(该train_val.prototxt文件所在的位置)
test_iter: 2
test_interval: 50
base_lr: 0.001
lr_policy: "step"
gamma: 0.1
stepsize: 100
display: 20
max_iter: 500
momentum: 0.9
weight_decay: 0.005
snapshot:500                                          #
snapshot_prefix: "examples/myfile/my_train"           #我觉得这两个参数没必要删除,定义了最后训练出的模型所存储的位置和前缀
solver_mode: CPU     #因为我的电脑没有GPU所以该成了CPU训练
②关于train_val.prototxt的修改
   这里的train_val我并没有用的bvlc_reference_caffnet模型中的trian_val.prototxt。我是用digits将数据转换程lmdb,然后用digits训练模型但是失败了,不过过程中产生了solver.prototxt  deploy.prototxt  trian_val.prototxt  (我也不知道是不是这个失败的过程产生的,反正是有了这些文件),这些文件的不同之处在于,当你把bvlc_reference_caffenet中的train_val.prototxt的内容复制到digits中Custom Network时修改时把那些均值文件的路径和lmdb数据的路径都删除了,因为会自动生成这些文件并更改到这些生成文件的路径。事实确实如此。不过我觉得像之前一样直接把bvlc_reference_caffnet中的solver.prototxt trian_val.prototxt两个文件复制过来更改也是可以的(但是我之前这么弄训练的时候总是发散也不知道是为什么)。主要是保证其中均值文件和lmdb数据路径是正确的。还有要把fc8层的名字改为fc8-re(虽然我也不知道为什么),并且将num_output改为5(因为我们这个例子是分的5类),下面贴出更改部分的train_val.prototxt文件代码。
name: "CaffeNet"
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TRAIN
  }
  transform_param {
    mirror: true
    crop_size: 227
    mean_file: "examples/myfile/mean.binaryproto"     ##
  }
  data_param {
    source: "examples/myfile/img_train_lmdb"          ##
    batch_size: 256
    backend: LMDB
  }
}
layer {
  name: "data"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST
  }
  transform_param {
    mirror: false
    crop_size: 227
    mean_file: "examples/myfile/mean.binaryproto"    ###
  }
  data_param {
    source: "examples/myfile/img_test_lmdb"          ###这四个地方改成自己的路径
    batch_size: 50
    backend: LMDB
  }
}

layer {
  name: "fc8-re"
  type: "InnerProduct"
  bottom: "fc7"
  top: "fc8"
  param {
    lr_mult: 1.0
    decay_mult: 1.0
  }
  param {
    lr_mult: 2.0
    decay_mult: 0.0
  }
  inner_product_param {
    num_output: 5        #输出分为5类
    weight_filler {
      type: "gaussian"
      std: 0.01
    }
    bias_filler {
      type: "constant"
      value: 0.0
    }
  }
}

更改完毕。下面开始训练,希望都可以成功。
# sudo build/tools/caffe train -solver examples/myfile/solver.prototxt

训练完我们的模型后,我们肯定想拿来测试自己的图片是吧。

       那么我们需要这些文件:描述性文件deploy.prototxt(这个是在那个用digits训练模型时的失败的过程中产生的,如果不用这个可能要在bvlv_reference_caffenet中复制那里面的过来吧)、模型权值文件my_train_iter_500.caffemodele(也就是我们训练得到的,或许你的不叫这个)、图像均值文件mean.binaryproto、labels.txt(图片类别标签信息,这个自己创建个txt文件也行,反正也就5类)、img.jpg(输入的待分类的图像)

       这些都找到之后:(caffe根目录下)

$  ./build/examples/cpp_classification/classification.bin \

>examples/myfile/deploy.prototxt \

>examples/myfile/my_train_iter_500.caffemodel \

>examples/myfile/mean.binaryproto \

>examples/myfile/labels.txt \

>examples/images/re/test/300.jpg

(这些文件都是我自己的路径,这个可以根据你们自己的文件路径更改)

运行:

       运气好就成功了,运气不好可能会出现以下错误:

F0827 14:57:28.427697 25511 insert_splits.cpp:35] Unknown bottom blob 'label' (layer 'accuracy', bottom index 1)

现在就需要打开所用的deploy.prototxt文件看一看了,看最下面两层是不是accuracy和loss这两层,如果是那么删掉这两层保存,再运行一次。应该就正确了。如果没有仍然出错了那我也不知道为什么了,我也没有遇到。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值