使用 MatCaffe 在 Matlab 上部署和使用 LeNet

Deploy and use LeNet on Matlab using MatCaffe

我对 MatCaffe 有疑问。我在 python 中成功地使用自己的数据集(2 分类,0 或 1)训练了 LeNet,现在尝试将其部署到 Matlab 上。 Net 架构来自 caffe/examples/mnist/lenet.prototxt。我输入网络的所有输入图像总是 return 1。(我尝试使用训练中的正面和负面图像)。

下面是我的代码:

deployNet = 'lenet_deploy.prototxt';
caffeModel = 'weight.caffemodel';
caffe.set_mode_cpu();
net = caffe.Net(deployNet, caffeModel, 'test');
net.blobs('data').reshape([28 28 1 1]);
net.reshape();

patch_data = imread('cropped.jpg'); % already in greyscale
patch_data = imresize(patch_data, [28 28],'bilinear');
imshow(patch_data)

input_data = {patch_data};
scores = net.forward(input_data);

highest = max(scores{1});
disp(i);
disp(highest);

最高总是return 1,即使是负片也是如此。我尝试在 python 上部署它,效果很好。我猜我预处理输入的方式有问题。

发现问题。我忘记将图像与训练比例相乘并转置宽度和高度,因为 Matlab 是 1 索引和列优先的,Matlab 中通常的 4 个 blob 维度是 [width, height, channels, num],width 是最快的尺寸。所以只需再添加 2 行代码:

deployNet = 'lenet_deploy.prototxt';
caffeModel = 'weight.caffemodel';
caffe.set_mode_cpu();
net = caffe.Net(deployNet, caffeModel, 'test');
net.blobs('data').reshape([28 28 1 1]);
net.reshape();

patch = imread('cropped.jpg'); % already in greyscale
patch = single(patch) * 0.00390625; % multiply with scale
patch = permute(patch, [2,1,3]); %permute width and height
input_data = {patch};
scores = net.forward(input_data);

highest = scores{1};