Reference to non-existent field 'normalization'

1 view (last 30 days)
%%Download and predict using a pretrained ImageNet model
% Setup MatConvNet
run(fullfile('matconvnet-1.0-beta24','matlab','vl_setupnn.m'));
% Download ImageNet model from MatConvNet pretrained networks repository
% urlwrite('http://www.vlfeat.org/matconvnet/models/imagenet-vgg-f.mat', 'imagenet-vgg-f.mat');
cnnModel.net = load('imagenet-vgg-f.mat');
% Load and display an example image
imshow('c1.JPG','InitialMagnification','fit');
img = imread('c1.JPG');
% Predict label using ImageNet trained vgg-f CNN model
label = cnnPredict(cnnModel,img,'display', false);
title(label,'FontSize',20)
Error in cnnPredict/cnnPreprocess (line 84)
im = imresize(im, cnnModel.net.normalization.imageSize(1:2));
Error in cnnPredict (line 26)
resTemp = vl_simplenn(cnnModel.net, cnnPreprocess(predImage(:,:,:,1)), [], []);
function [classLabel, scores, batchTime] = cnnPredict(cnnModel,predImage,varargin)
% Copyright (c) 2015, MathWorks, Inc.
% Parse inputs
p = inputParser;
addParameter(p,'outputLayer',numel(cnnModel.net.layers),@isnumeric);
addParameter(p,'UseGPU',false,@islogical);
addParameter(p,'display',true,@islogical);
parse(p,varargin{:});
% Get batch size and number of images
if ~isfield(cnnModel,'info')
cnnModel.info.opts.batchSize = 1;
end
batchSize = cnnModel.info.opts.batchSize;
n_obs = size(predImage,4);
isTapLayer = p.Results.outputLayer < numel(cnnModel.net.layers);
if isTapLayer
cnnModel.net.layers(p.Results.outputLayer+1:end) = [];
else
cnnModel.net.layers{end} = struct('type', 'softmax');
end
% Preallocate scores
resTemp = vl_simplenn(cnnModel.net, cnnPreprocess(predImage(:,:,:,1)), [], []);
scores = zeros([size(resTemp(end).x), n_obs]);
% Move model to GPU if requested
if p.Results.UseGPU
cnnModel.net = vl_simplenn_move(cnnModel.net,'gpu');
end
% Make predictions
batchNumber = 0;
numBatches = ceil(n_obs/batchSize);
batchTime = zeros(numBatches,1);
if p.Results.display
disp(' ')
fprintf('Using GPU: %s\n',mat2str(p.Results.UseGPU))
fprintf('Number of images: %d\n',n_obs)
fprintf('Number of batches: %d\n',numBatches)
fprintf('Number of layers in the Network: %d\n',numel(cnnModel.net.layers))
disp('-------------------------------------')
end
for ii = 1:batchSize:n_obs
tic
idx = ii:min(ii+batchSize-1,n_obs);
batchImages = predImage(:,:,:,idx);
im = cnnPreprocess(batchImages);
% Move batch to GPU if requested
if p.Results.UseGPU
im = gpuArray(im);
end
train_res = vl_simplenn(cnnModel.net, im, [], []);
scores(:,:,:,idx) = squeeze(gather(train_res(end).x));
batchNumber = batchNumber + 1;
batchTime(batchNumber) = toc;
if p.Results.display
fprintf('Batch: %2d/%d. Execution time: %2.4f\n',batchNumber,numBatches,batchTime(batchNumber))
end
end
if p.Results.display
fprintf('Avg. execution time/batch: %2.4f\n',mean(batchTime))
disp('-------------------------------------')
fprintf('Total execution time: %2.4f\n',sum(batchTime))
disp('-------------------------------------')
end
if isTapLayer
classLabel = [];
else
scores = squeeze(gather(scores))';
[~, labelId] = max(scores,[],2);
% classLabel = categorical(cnnModel.net.classes.description(labelId)');
classLabel = cnnModel.net.classes.description(labelId)';
end
function im = cnnPreprocess(batchImages)
% Preprocess images
im = single(batchImages);
im = imresize(im, cnnModel.net.normalization.imageSize(1:2));
im = bsxfun(@minus,im,cnnModel.net.normalization.averageImage);
end
end
  1 Comment
Joss Knight
Joss Knight on 28 Apr 2017
This is a problem you are having with MatConvNet. That should be stated in your title or at least at the start of your problem description, otherwise people are going to have no chance of reproducing it.
Secondly, consider asking the MatConvNet fora.

Sign in to comment.

Answers (2)

CONG CAO
CONG CAO on 13 Oct 2017
use 'net.meta.normalization' instead of 'net.normalization'
  1 Comment
pratyush ghosh
pratyush ghosh on 13 Jul 2020
I have tried doing that it says there is an error in Dilate in the vl_simplenn function

Sign in to comment.


Sedat METLEK
Sedat METLEK on 10 Mar 2020
Hello, if you examine the matcovnet site, you will see functions with the same name but written differently. So if you test different functions with the same name, your problem will probably be solved.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!