Классифицируйте изображения веб-камеры Используя глубокое обучение

Этот пример показывает, как классифицировать изображения от веб-камеры в режиме реального времени с помощью предварительно обученной глубокой сверточной нейронной сети GoogLeNet.

Используйте MATLAB®, простую веб-камеру и глубокую нейронную сеть, чтобы идентифицировать объекты в вашей среде. Этот пример использует GoogLeNet, предварительно обученную глубокую сверточную нейронную сеть (CNN или ConvNet), который был обучен на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и многие животные). Можно загрузить GoogLeNet и использовать MATLAB для, постоянно обрабатывают изображения камеры в режиме реального времени.

GoogLeNet изучил богатые представления функции для широкого спектра изображений. Это берет изображение в качестве входа и обеспечивает метку для объекта в изображении и вероятностях для каждой из категорий объектов. Можно экспериментировать с объектами в среде, чтобы видеть, как точно GoogLeNet классифицирует изображения. Чтобы узнать больше о предметной классификации сети, можно показать музыку к лучшим пяти классам в режиме реального времени вместо только итогового решения класса.

Загрузите камеру и предварительно обученную сеть

Соединитесь с камерой и загрузите предварительно обученную сеть GoogLeNet. Можно использовать любую предварительно обученную сеть на этом шаге. Пример требует Пакета Поддержки MATLAB для Веб-камер USB и Модели Deep Learning Toolbox™ для Сети GoogLeNet. Если у вас нет необходимых пакетов поддержки установленными, то программное обеспечение обеспечивает ссылку на загрузку.

camera = webcam;
net = googlenet;

Если вы хотите запустить пример снова, первый показ команда clear camera, где camera является связью с веб-камерой. В противном случае вы видите ошибку, потому что вы не можете создать другую связь с той же веб-камерой.

Классифицируйте снимок состояния от камеры

Чтобы классифицировать изображение, необходимо изменить размер его к входному размеру сети. Получите первые два элемента свойства InputSize входного слоя изображений сети. Входной слой изображений является первым слоем сети.

inputSize = net.Layers(1).InputSize(1:2)
inputSize =

   224   224

Отобразите изображение от камеры с предсказанной меткой и ее вероятностью. Необходимо изменить размер изображения к входному размеру сети прежде, чем вызвать classify.

figure
im = snapshot(camera);
image(im)
im = imresize(im,inputSize);
[label,score] = classify(net,im);
title({char(label),num2str(max(score),2)});

Постоянно классифицируйте изображения от камеры

Чтобы классифицировать изображения от камеры постоянно, включайте предыдущие шаги в цикле. Запустите цикл, в то время как фигура открыта. Чтобы остановить живой прогноз, просто закройте фигуру. Используйте drawnow в конце каждой итерации, чтобы обновить фигуру.

h = figure;

while ishandle(h)
    im = snapshot(camera);
    image(im)
    im = imresize(im,inputSize);
    [label,score] = classify(net,im);
    title({char(label), num2str(max(score),2)});
    drawnow
end

Отобразите главные прогнозы

Предсказанные классы могут измениться быстро. Поэтому может быть полезно отобразить главные прогнозы вместе. Можно отобразить лучшие пять прогнозов и их вероятности путем графического вывода классов с самыми высокими очками прогноза.

Классифицируйте снимок состояния от камеры. Отобразите изображение от камеры с предсказанной меткой и ее вероятностью. Отобразите гистограмму вероятностей лучших пяти прогнозов при помощи score вывод функции classify.

Создание Окна фигуры. Во-первых, измените размер окна, чтобы иметь дважды ширину и создать два подграфика.

h = figure;
h.Position(3) = 2*h.Position(3);
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);

В левом подграфике отобразите изображение и классификацию вместе.

im = snapshot(camera);
image(ax1,im)
im = imresize(im,inputSize);
[label,score] = classify(net,im);
title(ax1,{char(label),num2str(max(score),2)});

Выберите лучшие пять прогнозов путем выбора классов с самыми высокими очками.

[~,idx] = sort(score,'descend');
idx = idx(5:-1:1);
classes = net.Layers(end).Classes;
classNamesTop = string(classes(idx));
scoreTop = score(idx);

Отобразите лучшие пять прогнозов как гистограмму.

barh(ax2,scoreTop)
xlim(ax2,[0 1])
title(ax2,'Top 5')
xlabel(ax2,'Probability')
yticklabels(ax2,classNamesTop)
ax2.YAxisLocation = 'right';

Постоянно классифицируйте изображения и прогнозы верхней части отображения

Чтобы классифицировать изображения от камеры постоянно и отобразить главные прогнозы, включайте предыдущие шаги в цикле. Запустите цикл, в то время как фигура открыта. Чтобы остановить живой прогноз, просто закройте фигуру. Используйте drawnow в конце каждой итерации, чтобы обновить фигуру.

Создание Окна фигуры. Сначала измените размер окна, чтобы иметь дважды ширину и создать два подграфика. Чтобы препятствовать тому, чтобы оси изменили размер, установите ActivePositionProperty на 'position'.

h = figure;
h.Position(3) = 2*h.Position(3);
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);
ax2.ActivePositionProperty = 'position';

Постоянно отображайте и классифицируйте изображения вместе с гистограммой лучших пяти прогнозов.

while ishandle(h)
    % Display and classify the image
    im = snapshot(camera);
    image(ax1,im)
    im = imresize(im,inputSize);
    [label,score] = classify(net,im);
    title(ax1,{char(label),num2str(max(score),2)});

    % Select the top five predictions
    [~,idx] = sort(score,'descend');
    idx = idx(5:-1:1);
    scoreTop = score(idx);
    classNamesTop = string(classes(idx));

    % Plot the histogram
    barh(ax2,scoreTop)
    title(ax2,'Top 5')
    xlabel(ax2,'Probability')
    xlim(ax2,[0 1])
    yticklabels(ax2,classNamesTop)
    ax2.YAxisLocation = 'right';

    drawnow
end

Смотрите также

|

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте