Caffe 初识,揭开面纱
这一段时间把caffe官网上的例子跑了一下,对caffe有了一个大概的了解。如果你想对caffe有个比较清晰的了解,建议认真阅读官网上的资料,尤其在caffe资料极少的情况下,这种方法是最有效的途径,可以让你少走许多弯路,不要上来就在网上随便找个教程配置环境,上来就想跑例子。。博主就是赤裸裸的例子,在配置环境的时候浪费了好多时间
一、caffe的基本组成
一个caffe的工程主要包含两个部分:网络模型,参数配置,分别对应***.prototxt , ****_solver.prototxt文件。
网络模型:即定义你网络的每一层,下图是用caffe中 /python/draw_net.py画出的的siamese的模型,非常清晰
层包含:
DATA: 一般指输入层,包含数据路径,批处理数据大小batch_size,scale表示数据表示在[0,1],0.00390625即 1/255
CONVOLUATION:卷积层,blobs_lr:1 , blobs_lr:2分别表示weight 及bias更新时的学习率,这里权重的学习率为solver.prototxt文件中定义的学习率真,bias的学习率真是权重学习率的2倍,这样一般会得到很好的收敛速度。
num_output表示滤波的个数,kernelsize表示滤波的大小,stride表示步长,weight_filter表示滤波的类型
POOLING: 池化层
INNER_PRODUCT: 其实表示全连接,不要被名字误导
RELU:激活函数,非线性变化层 max( 0 ,x ),一般与CONVOLUTION层成对出现
SOFTMAX:
参数配置文件:
***_solver.prototxt文件定义一些模型训练过程中需要到的参数,比较学习率,权重衰减系数,迭代次数,使用GPU还是CPU等等
训练出的模型被存为***.caffemodel,可供以后使用。
二、使用caffe训练模型包含以下几个步骤:
- 准备数据
- 重建lmdb/leveldb文件,caffe支持三种数据格式输入:images, levelda, lmdb
- 定义.prototxt , solver.prototxt文件
- 训练模型
三、caffe中比较有用且基础的接口
1、训练模型,比如使用mnist的例子
./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt
2、观察各个阶段的运行时间可以使用
./build/tools/caffe time --model=models/bvlc_reference_caffenet/train_val.prototxt
3、使用已有模型提取特征
./build/tools/extract_features.bin models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel examples/_temp/imagenet_val.prototxt conv5 examples/_temp/features 10
conv5表示提取第五个卷积层的特征, examples/_temp/feaures表示存放结果的目录
4、对已有模型进行find-tuning,比如我们现在有一个1000类的分类模型,但目前我们的需求仅是20类,此时我们不需要重新训练一个模型,只需要将最后一层换成20类的softmax层,然后使用已有数据对原模型进行fine-tuning即可
./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0
如果使用cpu模式,那么最后的-gpu省略
5、还有一个是python下面的接口,draw_net.py可以根据.prototxt文件将模式用图示的方法表示出来,博文开始的模型图即用该接口所绘
./python/draw_net.py ./examples/siamese/mnist_siamese.prototxt ./examples/siamese/mnist_siamese.png
第一个参数为模型文件,第二个参数为所绘模型图的保存地址
四、运行caffe自带例子需要注意的问题
1、需要在caffe_root路径下执行所有操作,因为所有的操作都是基于该路径的,如数据的路径等
2、建议在sudo权限下执行,一般用户权限下执行时有时会报错
3、在运行程序前确定你的环境配置正确,以免在后面浪费时间,环境配置见caffe + ubuntu14.04 + cuda 6.5 无gpu配置