В этом примере показано, как классифицировать изображение с помощью предварительно обученной глубокой сверточной нейронной сети GoogLeNet.
GoogLeNet был обучен на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Сеть изучила богатые представления функции для широкого спектра изображений. Сеть берет изображение в качестве входа, и затем выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов.
Загрузите предварительно обученную сеть 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 случайных имен классов из общего количества 1 000.
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] Szegedy, христианин, Вэй Лю, Янцин Цзя, Пьер Сермане, Скотт Рид, Драгомир Ангуелов, Dumitru Erhan, Винсент Вэнхук и Эндрю Рэбинович. "Идя глубже со свертками". В Продолжениях конференции по IEEE по компьютерному зрению и распознаванию образов, стр 1-9. 2015.
[2] Модель BVLC GoogLeNet. https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
DAGNetwork
| googlenet
| classify
| predict
| squeezenet