Классифицируйте изображения на Simulink Используя GoogLeNet

В этом примере показано, как классифицировать изображение на Simulink® с помощью Image Classifier блок. Пример использует предварительно обученную глубокую сверточную нейронную сеть GoogLeNet, чтобы выполнить классификацию.

Предварительно обученная сеть GoogLeNet

GoogLeNet был обучен на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила богатые представления функции для широкого спектра изображений. Сеть берет изображение в качестве входа, и затем выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.

net = googlenet;
inputSize = net.Layers(1).InputSize;
classNames = net.Layers(end).ClassNames;
numClasses = numel(classNames);
disp(classNames(randperm(numClasses,10)))
    {'speedboat'    }
    {'window screen'}
    {'isopod'       }
    {'wooden spoon' }
    {'lipstick'     }
    {'drake'        }
    {'hyena'        }
    {'dumbbell'     }
    {'strawberry'   }
    {'custard apple'}

Считайте и измените размер изображения

Считайте и покажите изображение, что вы хотите классифицировать.

I = imread('peppers.png');
figure
imshow(I)

Чтобы импортировать эти данные в модель Simulink, задайте переменную структуры, содержащую входные данные изображения и пустой временной вектор.

simin.time = [];
simin.signals.values = I;
simin.signals.dimensions = size(I);

Модель Simulink для предсказания

Модель Simulink для классификации изображений показывают. Модель использует From Workspace блокируйтесь, чтобы загрузить входное изображение, Image Classifier блок из библиотеки Deep Neural Networks, которая классифицирует вход и Display блокируйтесь, чтобы показать предсказанный выход.

model = 'googlenet_classifier';
open_system(model);

Запустите симуляцию

Чтобы подтвердить модель Simulink, запустите симуляцию.

set_param(model,'SimulationMode','Normal');
sim(model);

Сеть классифицирует изображение как болгарский перец.

Отобразите главные предсказания

Отобразите лучшие пять предсказанных меток и их связанные вероятности как гистограмма. Поскольку сеть классифицирует изображения в такое количество категорий объектов, и много категорий подобны, распространено рассмотреть лучшие пять точности при оценке сетей. Сеть классифицирует изображение как болгарский перец с высокой вероятностью.

scores = yout.signals(1).values(:,:,1);
labels = yout.signals(2).values(:,:,1);
[~,idx] = sort(scores,'descend');
idx = idx(5:-1:1);
scoresTop = scores(idx);
labelsTop = split(string(labels(idx)),'_');
labelsTop = labelsTop(:,:,1);

figure
imshow(I)
title(labelsTop(5) + ", " + num2str(100*scoresTop(5) + "%"));

figure
barh(scoresTop)
xlim([0 1])
title('Top 5 Predictions')
xlabel('Probability')
yticklabels(labelsTop)