在使用caffe时,我们希望使用自己的数据进行训练,以下给出如何制作自己的数据。所有的数据制作都是基于imagenet的。

1.数据准备,我们需要一个train和valid文件夹,一个train.txt和val.txt(图片文件夹的位置可以任意,但是这两个txt文件的位置在data/mydata/目录下)

train和valid文件夹自然就存放着待训练的图片,train.txt和val.txt的数据格式如下

 

train_example/1.jpg 0
train_example/2.jpg 0
train_example/3.jpg 0
train_example/4.jpg 0
train_example/5.jpg 0
train_example/6.jpg 0
train_example/7.jpg 0
train_example/8.jpg 0
train_example/9.jpg 0

前边是图片路径,后便是label,注意label是从0开始的。

 

2. 在example目录下创建自己的文件夹mytask,将imagenet中所有的文件烤过来,然后进行修改。

create_imagenet.sh

//当前路径
EXAMPLE=/home/kongtao/caffe-master/examples/voc2007_test1
//存放train.txt和val.txt的路径,就是data/mydata
DATA=/home/kongtao/caffe-master/data/voc2007_data1
//不变
TOOLS=/home/kongtao/caffe-master/build/tools

//存放train和val图片文件夹的主目录(这里与txt文件中的目录合起来才是图片目录)
TRAIN_DATA_ROOT=/home/kongtao/learn/cnn_learn/VOC2007_research/VOCdevkit/
VAL_DATA_ROOT=/home/kongtao/learn/cnn_learn/VOC2007_research/VOCdevkit/

运行create_imagenet.sh,生成两个数据文件lmdb

 

make_image_mean.sh 也是修改相应的路径

 

最后需要修改的是model中prototxt文件,只需要修改路径

 

运行

./build/tools/caffe train --solver=models/bvlc_reference_caffenet/solver.prototxt

这样就可以了。

以上完成了一个数据文件的创建和训练的过程,对于我们来说,其实网络架构显得更重要,因此不仅仅是调通,更重要的是调整网络架构和改进,这也是最难得部分。

 

 

多chanel,需要对数据进行提前白化

 

import numpy as np
import caffe
import lmdb

# obviously load your own inputs here -- this is just by way of example
# to show the data can have any channel dimension
# as the dimensions are N x K x H x W
inputs = np.zeros((10, 5, 227, 227))

in_db = lmdb.open('input-lmdb', map_size=int(1e12))
with in_db.begin(write=True) as in_txn:
    for in_idx, in_ in enumerate(inputs):
        in_dat = caffe.io.array_to_datum(in_)
        in_txn.put('{:0>10d}'.format(in_idx), im_dat.SerializeToString())
in_db.close()

 

记录一下别人制作的东东

http://deepdish.io/2015/04/28/creating-lmdb-in-python/

还有一个

http://blog.csdn.net/ayst123/article/details/44077903

原创文章,转载请注明出处,谢谢!

http://www.cnblogs.com/taokongcn/p/4341371.html