如何使Caffe Matlab包装器适应在Mnist上训练的网络?

如何使Caffe Matlab包装器适应在Mnist上训练的网络?,matlab,caffe,matcaffe,Matlab,Caffe,Matcaffe,我成功地在mnist数据库上培训了我的Caffe网络 现在我想用我自己的图像使用Matlab包装器测试网络 因此,在“matcaffe.m”中,我加载文件“lenet.prototxt”,该文件不用于培训,但似乎适合测试。它引用的输入大小为28 x 28像素: name: "LeNet" input: "data" input_dim: 64 input_dim: 1 input_dim: 28 input_dim: 28 layer { name: "conv1" type: "Convolu

我成功地在mnist数据库上培训了我的Caffe网络

现在我想用我自己的图像使用Matlab包装器测试网络

因此,在“matcaffe.m”中,我加载文件“lenet.prototxt”,该文件不用于培训,但似乎适合测试。它引用的输入大小为28 x 28像素:

name: "LeNet"
input: "data"
input_dim: 64
input_dim: 1
input_dim: 28
input_dim: 28
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
因此,我相应地调整了“matcaffe.m”中的“prepare_image”函数。现在看起来是这样的:

% ------------------------------------------------------------------------
function images = prepare_image(im)
IMAGE_DIM = 28;
% resize to fixed input size
im = rgb2gray(im);
im = imresize(im, [IMAGE_DIM IMAGE_DIM], 'bilinear');
im = single(im);
images = zeros(1,1,IMAGE_DIM,IMAGE_DIM);
images(1,1,:,:) = im;
images = single(images);
%-------------------------------------------------------------
这会将输入图像转换为[1 x 1 x 28 x 28],4dim灰度图像。但Matlab仍在抱怨:

Error using caffe
MatCaffe input size does not match the input size of the
network
Error in matcaffe_myModel_mnist (line 76)
scores = caffe('forward', input_data);

有人有在自己的数据上测试经过培训的mnist网络的经验吗?

出现该错误(输入大小不匹配)的原因是网络协议需要一批64个图像。台词

input_dim: 64
input_dim: 1
input_dim: 28
input_dim: 28
这意味着网络需要一批64灰度、28 x 28的图像。如果保持所有MATLAB代码相同,并将第一行更改为

input_dim: 1

你的问题应该解决。

我终于找到了完整的解决方案: 下面介绍如何使用matcaffe.m(Matlab包装器)预测自己输入图像的数字

  • 在“matcaffe.m”中:必须引用文件“caffe master/examples/mnist/lenet.prototxt”
  • 如mprat所指出,调整文件“lenet.prototxt”:将条目输入尺寸更改为
    输入尺寸:1
  • 对matcaffe.m中的子功能“prepare_image”使用以下自适应:
  • (输入可以是任意大小的rgb图像)


    我现在开始学习那个教程。我已经成功地接受了mnist数据库方面的培训。我的问题是如何结合我自己的图像数据和matlab包装器“matcaffe.m”使用经过训练的网络啊,对不起,我误解了。我将更新我的答案。但是,我输入数据的方式似乎仍然存在缺陷,因为mnist测试数据的准确度约为10%(这是随机猜测)。我是否错过了更多的预处理?有人试过这个吗?(我尝试将输入数据缩放256,但没有帮助。这仅适用于imagenet示例。但是在mnist的情况下,没有均值减法,图像仅为1个通道。正如我所说,数据仅缩放(1/256)在培训期间。但是使用缩放没有帮助。我忘了转置输入图像。现在一切正常。我将在单独的答案中编写解决方案,以获得更好的概述。仍然非常感谢您的帮助您需要将“图像”更正为“图像”,并更改“im=rgb2gray(im)”选项由于curren代码仅适用于彩色图像。它确实在我的计算机中运行。我必须将格式图像(1,1,:,:)更改为图像(:,:,1,1)以使其运行。但是,我使用真实数据集(我在互联网上收集)得到的结果非常差。你遇到过这个问题吗?
    function image = prepare_image(im)
    
    IMAGE_DIM = 28;
    
    % If input image is too big , is rgb and of type uint8:
    % -> resize to fixed input size, single channel, type float
    
    im = rgb2gray(im);
    im = imresize(im, [IMAGE_DIM IMAGE_DIM], 'bilinear');
    im = single(im);
    
    % Caffe needs a 4D input matrix which has single precision
    % Data has to be scaled by 1/256 = 0.00390625 (like during training)
    % In the second last line the image is beeing transposed!
    images = zeros(1,1,IMAGE_DIM,IMAGE_DIM);
    images(1,1,:,:) = 0.00390625*im';
    images = single(images);