В этом примере показано, как классифицировать изображение на Simulink® с помощью Image Classifier
блок. Пример использует предварительно обученную глубокую сверточную нейронную сеть 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 для классификации изображений показывают. Модель использует 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)