2

http://caffe.berkeleyvision.org/gathered/examples/mnist.htmlに従って、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 ネットを自分のデータでテストした経験がある人はいますか?

4

2 に答える 2

3

そのエラー (入力サイズが一致しない) が発生する理由は、ネットワーク prototxt が 64 個の画像のバッチを想定しているためです。台詞

input_dim: 64
input_dim: 1
input_dim: 28
input_dim: 28

ネットワークが 64 個のグレースケール、28 x 28 のイメージのバッチを想定していることを意味します。すべての MATLAB コードを同じに保ち、最初の行を次のように変更すると、

input_dim: 1

あなたの問題は解決するはずです。

于 2015-05-19T16:47:48.007 に答える
3

最後に、完全な解決策を見つけました。これは、Caffe の matcaffe.m (Matlab ラッパー) を使用して、独自の入力画像の数字を予測する方法です。

  1. 「matcaffe.m」: ファイル「caffe-master/examples/mnist/lenet.prototxt」を参照する必要があります。
  2. mprat が指摘したように、ファイル「lenet.prototxt」を調整します。エントリ input_dim を次のように変更します。 input_dim: 1
  3. matcaffe.m のサブ関数「prepare_image」に次の適応を使用します。

(入力は任意のサイズの RGB 画像にすることができます)

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);
于 2015-05-21T14:08:48.380 に答える