В этом примере показано, как классифицировать изображение с помощью предварительно обученной глубокой сверточной нейронной сети GoogLeNet.
GoogLeNet обучен на более чем миллионе изображений и может классифицировать изображения в 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила представления богатых функций для широкой области значений изображений. Сеть принимает изображение как вход, а затем выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.
Загрузите предварительно обученную сеть GoogLeNet. Для этого шага требуется Модель Deep Learning Toolbox™ для пакета поддержки GoogLeNet Network. Если у вас нет установленных необходимых пакетов поддержки, то программное обеспечение предоставляет ссылку на загрузку.
Можно также выбрать загрузку другой предварительно обученной сети для классификации изображений. Чтобы попробовать другую предварительно обученную сеть, откройте этот пример в MATLAB ® и выберите другую сеть. Например, можно попробовать squeezenet
, сеть, которая даже быстрее, чем googlenet
. Этот пример можно запустить с другими предварительно обученными сетями. Список всех доступных сетей см. в разделе Загрузка предварительно обученных сетей.
net = googlenet;
Изображение, которое вы хотите классифицировать, должно иметь тот же размер, что и вход сигнала сети. Для GoogLeNet, первого элемента Layers
свойство сети является входным слоем изображения. Размер входа сети следующий InputSize
свойство входного слоя изображения.
inputSize = net.Layers(1).InputSize
inputSize = 1×3
224 224 3
Конечный элемент Layers
свойство является выходным слоем классификации. The 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),:)
. Если у вас есть Image Processing 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] BVLC Модель GoogLeNet. https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
classify
| DAGNetwork
| googlenet
| predict
| squeezenet