2017-04-26 6 views
0

J'ai un problème avec MatCaffe. J'ai formé LeNet en utilisant mon propre jeu de données (2 classification, 0 ou 1) en python et en essayant de le déployer sur Matlab maintenant. L'architecture de réseau provient de caffe/examples/mnist/lenet.prototxt. Toutes les images d'entrée que j'ai nourries dans le réseau renvoient toujours 1. (j'ai essayé d'employer des images positives et négatives de la formation).Déployer et utiliser LeNet sur Matlab en utilisant MatCaffe

Ci-dessous mon code:

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); 

le meilleur retour toujours 1, même pour image négative. J'ai essayé de le déployer sur python et ça marche très bien. Je devine le problème avec la façon dont je pré-traite l'entrée.

Répondre

0

Trouvé le problème. J'ai oublié de multiplier l'image avec l'échelle d'apprentissage et de transposer la largeur et la hauteur puisque Matlab est 1-indexé et colonne-major, les 4 dimensions de blob habituelles dans Matlab sont [largeur, hauteur, canaux, num] et la largeur est la plus rapide dimension. Il suffit donc d'ajouter 2 autres lignes de codes:

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};