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

来源:互联网 发布:数理经济学知乎 编辑:程序博客网 时间:2024/05/17 09:32

本文根据此博客遇到的问题所做出的更改: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: 2test_interval: 50base_lr: 0.001lr_policy: "step"gamma: 0.1stepsize: 100display: 20max_iter: 500momentum: 0.9weight_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 0
原创粉丝点击