您的位置:首页 > Web前端

caffe训练siamese network

2016-01-18 23:23 148 查看
最近要用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

训练和测试

定义好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差不多,但是多一些数据,如模型名称,当前迭代次数等;用于恢复训练,防止意外终止而保存.

绘制结果

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

博客园: /article/6294341.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: