caffe训练siamese network

来源:互联网 发布:淘宝知识产权投诉撤销 编辑:程序博客网 时间:2024/06/07 00:36

最近要用caffe训练siamese network,但是对c++并不熟,所有用了某博主的代码,和自己的图片数据,来训练siamese网络.

caffe中的siamese network用于train Mnist dataset,步骤如下:

1.准备数据
将图片分为train.txt, val.txt, test.txt, 通过编译caffe/tools/convert_imageset.cpp将图片转为leveldb格式.

编译:cd caffe/build; make clean; make all -j8
生成: caffe/build/tools/convert_imageset

执行: ./examples/mydata/create_mnist.sh;
生成: train和test set的leveldb格式, 分别是/examples/mydata/mnist_siamese_train_leveldb和/examples/mydata/mnist_siamese_test_leveldb

2.定义general model
/examples/mydata/mnist_siamese.prototxt中定义了siamese net的网络结构;与LeNet model相同,除了top layer.

3.定义detailed siamese network
/examples/mydata/mnist_siamese_train_test.prototxt.
注意修改source path.

3.1读pair data
3.2构建siamese net的first side数据和second side数据
/examples/mydata/mnist_siamese_train_test.prototxt.
3.3添加contrastive loss层

4.定义Solver
solver主要是指定model file的path.
/examples/mydata/mnist_siamese_solver.prototxt

  1. 训练和测试
    定义好net protobuf和solver protobuf,就可以训练该net了.
    执行: ./examples/mydata/train_mnist_siamese.sh
    生成: /examples/mydata/mnist_siamese_iter_xx.caffemodel, mnist_siamese_iter_xx.solverstate
    其中, caffemodel文件主要是存放各层的参数,即net.params(权重/filters),里面没有数据(net.blobs); 用于在测试阶段进行分类;
    solverstate和caffemodel差不多,但是多一些数据,如模型名称,当前迭代次数等;用于恢复训练,防止意外终止而保存.

  2. 绘制结果
    6.1 画model和siamese network:
    注释: general model,siamese net的一层数据网络,即CNN
    ./python/draw_net.py \
    ./examples/mydata/mnist_siamese.prototxt \
    ./examples/mydata/mnist_siamese.png

注释: detailed model, siamese net的完整结构图
./python/draw_net.py \
./examples/mydata/mnist_siamese_train_test.prototxt \
./examples/mydata/mnist_siamese_train_test.png

6.2 使用iPython notebook, load model并绘制features

(后续)

7.参考
caffe siamese tutorial: http://caffe.berkeleyvision.org/gathered/examples/siamese.html
博客园: http://www.cnblogs.com/denny402/p/5103425.html

0 0
原创粉丝点击