Caffe Matlab feature extraction 特征提取

59 篇文章 3 订阅
9 篇文章 0 订阅


http://blog.csdn.net/xgz0124/article/details/50261403

Caffe 作为一款比较流行的DCNN特征提取框架已获得广泛应用。在CVPR/ICCV/ECCV关于DCNN的文章中屡屡出镜。Caffe的安装步骤比较繁琐,但是网上相关的配置文章也有很多,本文就不再啰嗦。

其中基于Python的Caffe特征抽取可参考http://nbviewer.ipython.org/github/BVLC/caffe/blob/master/examples/net_surgery.ipynb

本人由于要对Deep CNN Feature 作进一步的处理,而处理的算法需要在Matlab环境中进行,所以需要Matcaffe提取图像的feature,现在总结了两种方法。


首先是Ross Girshick大神的解决方法,需要修改deploy.prototxt文件,然后直接 scores=net.forward(input_data),利用forward函数即可得到。该方法要求对deploy.prototxt文件比较熟悉,然后缺点就在于需要修改多次prototxt才能得到不同layer
feature。


还有一种方法:caffe_feat=net.blobs('conv1').get_data(),得到4-D single 的矩阵,就为该层(conv1)的特征,caffe_feat(:,:,1,1)为其中一feature map。



另外,MatConvNet也是一个不错的工具,相对于Caffe更适用于Matlab,有兴趣可以尝试下。



——————————————————分割线2016.01.07————————————————————————

Caffe官网 http://caffe.berkeleyvision.org/tutorial/interfaces.html 给出了python、Matlab下的各种接口,

  1. caffe.set_mode_gpu();  
  2. caffe.set_device(gpu_id);  
caffe.set_mode_gpu();
caffe.set_device(gpu_id);
  1. net = caffe.Net(model, weights, 'test'); % create net and load weights  
net = caffe.Net(model, weights, 'test'); % create net and load weights



  1. net.blobs('data').set_data(ones(net.blobs('data').shape));  
net.blobs('data').set_data(ones(net.blobs('data').shape));

可以更改各种参数:

  1. net.params('conv1', 1).set_data(net.params('conv1', 1).get_data() * 10); % set weights  
  2. net.params('conv1', 2).set_data(net.params('conv1', 2).get_data() * 10); % set bias  
  3. net.layers('conv1').params(1).set_data(net.layers('conv1').params(1).get_data() * 10);  
  4. net.layers('conv1').params(2).set_data(net.layers('conv1').params(2).get_data() * 10);  
net.params('conv1', 1).set_data(net.params('conv1', 1).get_data() * 10); % set weights
net.params('conv1', 2).set_data(net.params('conv1', 2).get_data() * 10); % set bias
net.layers('conv1').params(1).set_data(net.layers('conv1').params(1).get_data() * 10);
net.layers('conv1').params(2).set_data(net.layers('conv1').params(2).get_data() * 10);


然后保存网络,可以:

  1. net.save('my_net.caffemodel');  
net.save('my_net.caffemodel');


  1. net.blobs('data').set_data(data);  
  2. net.forward_prefilled();  
  3. prob = net.blobs('prob').get_data();  
net.blobs('data').set_data(data);
net.forward_prefilled();
prob = net.blobs('prob').get_data();


训练:

  1. solver = caffe.Solver('./models/bvlc_reference_caffenet/solver.prototxt');  
solver = caffe.Solver('./models/bvlc_reference_caffenet/solver.prototxt');
  1. solver.solve();  
solver.solve();


  1. solver.step(1000);  
  2. iter = solver.iter();  
  3. %To get its network:  
  4. train_net = solver.net;  
  5. test_net = solver.test_nets(1);  
  6. solver.restore('your_snapshot.solverstate');  
solver.step(1000);
iter = solver.iter();
%To get its network:
train_net = solver.net;
test_net = solver.test_nets(1);
solver.restore('your_snapshot.solverstate');


  1. im_data = caffe.io.load_image('./examples/images/cat.jpg');  
  2. im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize  
  3.   
  4. %or  
  5. im_data = imread('./examples/images/cat.jpg'); % read image  
  6. im_data = im_data(:, :, [3, 2, 1]); % convert from RGB to BGR  
  7. im_data = permute(im_data, [2, 1, 3]); % permute width and height  
  8. im_data = single(im_data); % convert to single precision  
im_data = caffe.io.load_image('./examples/images/cat.jpg');
im_data = imresize(im_data, [width, height]); % resize using Matlab's imresize

%or
im_data = imread('./examples/images/cat.jpg'); % read image
im_data = im_data(:, :, [3, 2, 1]); % convert from RGB to BGR
im_data = permute(im_data, [2, 1, 3]); % permute width and height
im_data = single(im_data); % convert to single precision


Call caffe.reset_all() to clear all solvers and stand-alone nets you have created.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值