matlab 识别率,【caffe-Windows】识别率批量输出——matlab实现

前言

今天看到群里有人问”用matlab输出测试集的精度“,瞎试了一下,好像还成功了。主要还是依据前面所有在matlab中操作caffe的博客。

这里说一下:classification.m是适用单张图片的精度,类似于classification.exe的功能;这里要做的是在matlab中实现caffe.exe test的功能,也就是批量输出精度

分析

根据caffe.exe test和classification.m的流程,很容易想到,直接把训练时候所用的prototxt丢进去,对比classification.m中调用caffe.Net(model,wights,'test')的思路,试试当model为train_test.prototxt而非deploy.prototxt的效果。然后按照前面caffe在matlab中训练的方法,进行一次前向计算,当然此前向计算需要数据已经载入网络中,而非像classification一样挨个输入。z最后按照前面可视化权重的博客,提取最后一层的accuracy就行了。

流程

将数据集,也就是一堆图片,利用convert的那个exe转换为lmdb格式

在prototxt中更改测试部分的输入为你所转换的lmdb路径

细节调整,比如你有没有均值文件,加入到prototxt中

加载模型,命令caffe.Net

前向计算forward_prefilled命令

利用blob取最后一层accuracy的值

代码书写

数据集转换

以mnist为例,测试集的lmdb文件在前面已经制作出来了,如果是你自己的图片,可以看前面转换数据集的博客。

模型结构

直接使用原始的lenet_train_test.prototxt,测试集部分内容为你自己的转换数据集

layer {

name:"mnist"

type: "Data"

top: "data"

top: "label"

include {

phase: TEST}

transform_param {

scale:0.00390625}

data_param {

source:"mnist_test_leveldb"

batch_size: 100

backend: LEVELDB}

}

其中有一个参数batch_size表示一次性测试多少数据量的准确率, 由于mnist测试集共有一万张图片, 所以测试次数为1000/100=100, 使用批处理方式测试

..\..\Build\x64\Release\caffe.exe test -model=lenet_train_test.prototxt -weights=lenet_iter_10000.caffemodel -iterations=100

pause

写代码

clear

clc

close all

if exist('../../+caffe', 'dir')

addpath('../..');

else

error('Please run this demo from caffe/matlab/demo');

end

caffe.reset_all

% Set caffe mode

if exist('use_gpu', 'var') && use_gpu

caffe.set_mode_gpu();

gpu_id = 0; % we will use the first gpu in this demo

caffe.set_device(gpu_id);

else

caffe.set_mode_cpu();

end

% model_dir = '../mnist_data/';

% net_model = [model_dir 'lenet.prototxt'];

model_dir = './';

net_model = [model_dir 'lenet_train_test.prototxt'];

net_weights = [model_dir 'lenet_iter_10000.caffemodel'];

if ~exist(net_weights, 'file')

error('Please download CaffeNet from Model Zoo before you run this demo');

end

% Initialize a network

net = caffe.Net(net_model, net_weights, 'test');

acc=[];

for i=1:100

net.forward_prefilled

acc=[acc; net.blobs('accuracy').get_data()];

end

acc

看看使用caffe.exe test的命令和我们的输出acc的结果对应与否

92507406d1cf13100affcec6c553ef9d.png

应该是对应的吧,手动滑稽。

【注】记得刚才说的batchsize吧,看代码倒数第三行,有一个for循环,这里写的100,意思就是图片总数除以batchsize,得到的结果就是这个for循环的上限。

源代码各种文件打包放送

直接运行里面的caffe_test.m即可,注意自己caffe的matlab接口一定要配置好。

本文同步分享在 博客“风翼冰舟”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值