В этом примере показано, как классифицировать изображение с помощью предварительно обученной глубокой сверточной нейронной сети GoogLeNet.
GoogLeNet был обучен более чем миллиону изображений и может классифицировать изображения на 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила богатые представления функций для широкого спектра изображений. Сеть принимает изображение в качестве входного, а затем выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.
Загрузите предварительно подготовленную сеть GoogLeNet. Для выполнения этого шага требуется модель Deep Learning Toolbox™ для пакета поддержки сети GoogLeNet. Если необходимые пакеты поддержки не установлены, программа предоставляет ссылку для загрузки.
Можно также загрузить другую предварительно подготовленную сеть для классификации изображений. Чтобы попробовать другую предварительно подготовленную сеть, откройте этот пример в MATLAB ® и выберите другую сеть. Например, можно попробоватьsqueezenet, сеть, которая даже быстрее, чем googlenet. Этот пример можно выполнить с другими предварительно подготовленными сетями. Список всех доступных сетей см. в разделе Загрузка предварительно обученных сетей.
net =
googlenet;Изображение, которое требуется классифицировать, должно иметь тот же размер, что и входной размер сети. Для GoogLeNet - первый элемент Layers свойство сети - уровень ввода изображения. Размер сетевого входа - InputSize свойство слоя ввода изображения.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
224 224 3
Последний элемент Layers свойство является выходным уровнем классификации. ClassNames свойство этого уровня содержит имена классов, полученных сетью. Просмотрите 10 случайных имен классов из общего числа 1000.
classNames = net.Layers(end).ClassNames; numClasses = numel(classNames); disp(classNames(randperm(numClasses,10)))
'papillon'
'eggnog'
'jackfruit'
'castle'
'sleeping bag'
'redshank'
'Band Aid'
'wok'
'seat belt'
'orange'
Прочтите и покажите изображение, которое требуется классифицировать.
I = imread('peppers.png');
figure
imshow(I)
Отображение размера изображения. Изображение имеет размер 384 на 512 пикселей и имеет три цветовых канала (RGB).
size(I)
ans = 1×3
384 512 3
Изменение размера изображения до входного размера сети с помощью imresize. Это изменение размера немного изменяет пропорции изображения.
I = imresize(I,inputSize(1:2)); figure imshow(I)

В зависимости от приложения может потребоваться изменить размер изображения. Например, можно обрезать верхний левый угол изображения с помощью I(1:inputSize(1),1:inputSize(2),:). Если у вас есть Toolbox™ обработки изображений, то вы можете использовать imcrop функция.
Классифицировать изображение и вычислять вероятности классов с помощью classify. Сеть правильно классифицирует изображение как колокольный перец. Сеть для классификации обучается выводить одну метку для каждого входного изображения, даже если изображение содержит несколько объектов.
[label,scores] = classify(net,I); label
label = categorical
bell pepper
Отображение изображения с предсказанной меткой и предсказанной вероятностью того, что изображение будет иметь эту метку.
figure imshow(I) title(string(label) + ", " + num2str(100*scores(classNames == label),3) + "%");

Отображение пяти лучших прогнозируемых меток и связанных с ними вероятностей в виде гистограммы. Поскольку в сети изображения классифицируются по множеству категорий объектов, а многие категории схожи, при оценке сетей обычно учитывается пять основных показателей точности. Сеть классифицирует изображение как колокольный перец с высокой вероятностью.
[~,idx] = sort(scores,'descend'); idx = idx(5:-1:1); classNamesTop = net.Layers(end).ClassNames(idx); scoresTop = scores(idx); figure barh(scoresTop) xlim([0 1]) title('Top 5 Predictions') xlabel('Probability') yticklabels(classNamesTop)

[1] Сегеди, Кристиан, Вэй Лю, Янцин Цзя, Пьер Серманет, Скотт Рид, Драгомир Ангуэлов, Думитру Эрхан, Венсан Ванхуке и Эндрю Рабинович. «Углубляюсь со свертками.» В материалах конференции IEEE по компьютерному зрению и распознаванию образов, стр. 1-9. 2015.
[2] Модель GoogLeNet BVLC. https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
classify | DAGNetwork | googlenet | predict | squeezenet