主要内容

使用深度学习对网络摄像头图像进行分类

这个例子展示了如何使用预先训练的深度卷积神经网络GoogLeNet实时对网络摄像头中的图像进行分类。

使用MATLAB®,一个简单的网络摄像头和一个深度神经网络来识别你周围的物体。这个例子使用了GoogLeNet,这是一个经过预先训练的深度卷积神经网络(CNN或ConvNet),它已经对超过100万张图像进行了训练,可以将图像分为1000个对象类别(如键盘、咖啡杯、铅笔和许多动物)。你可以下载GoogLeNet,使用MATLAB对相机图像进行实时的连续处理。

GoogLeNet已经学会了为广泛的图像提供丰富的特征表示。它将图像作为输入,并为图像中的对象提供标签和每个对象类别的概率。你可以用周围的物体做实验,看看GoogLeNet对图像的分类有多准确。要了解更多关于网络对象分类的信息,您可以实时显示排名前五的班级的分数,而不仅仅是班级的最终决定。

装载摄像机和预训练网络

连接到摄像头并加载一个预先训练好的GoogLeNet网络。在这一步,您可以使用任何预先训练过的网络。该示例需要USB网络摄像头的MATLAB支持包和深度学习工具箱™模型GoogLeNet网络.如果您没有安装所需的支持包,那么该软件将提供下载链接。

相机=摄像头;网= googlenet;

如果您想再次运行该示例,请先运行该命令清晰的相机在哪里相机就是网络摄像头的连接。否则,您将看到一个错误,因为您无法创建到同一摄像头的另一个连接。

从相机中分类快照

要对图像进行分类,必须根据网络的输入大小调整其大小。的前两个元素InputSize网络图像输入层的属性。图像输入层是网络的第一层。

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

用预测的标签和它的概率显示来自摄像机的图像。在调用之前,必须将映像的大小调整为网络的输入大小分类

图im = snapshot(camera);image(im) im = imresize(im,inputSize);(标签,分数)=(净,im)进行分类;标题({char(标签),num2str (max(分数),2)});

连续对相机图像进行分类

要连续地对来自相机的图像进行分类,需要在循环中包含前面的步骤。在图打开时运行循环。要停止实时预测,只需关闭图。使用drawnow在每次迭代结束时更新图。

h =图;Ishandle (h) im =快照(相机);image(im) im = imresize(im,inputSize);(标签,分数)=(净,im)进行分类;标题({char(标签),num2str (max(分数),2)});drawnow结束

显示前预测

预测的类可以迅速变化。因此,将排名靠前的预测放在一起显示是有帮助的。您可以通过绘制预测分数最高的类来显示前五个预测及其概率。

对相机中的快照进行分类。用预测的标签和它的概率显示来自摄像机的图像。控件显示前五个预测的概率的直方图分数的输出分类函数。

创建图形窗口。首先,将窗口的宽度调整为原来的两倍,并创建两个子图。

h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);

在左侧副图中,同时显示图像和分类。

我=快照(相机);image(ax1,im) im = imresize(im,inputSize);(标签,分数)=(净,im)进行分类;标题(ax₁,{char(标签),num2str (max(分数),2)});

选择得分最高的班级,选出排名前五的预测。

[~, idx] =排序(得分,“下”);idx = idx (5: 1:1);类= net.Layers . class(结束);classNamesTop =字符串(类(idx));scoreTop =分数(idx);

以直方图的形式显示前五个预测。

barh(ax2,scoreTop) xlim(ax2,[0 1]) title(ax2,“五大”)包含(ax2,“概率”) yticklabels (ax2 classNamesTop) ax2。YAxisLocation =“对”

连续分类图像和显示顶级预测

要连续地对来自相机的图像进行分类并显示排名靠前的预测,需要在循环中包含前面的步骤。在图打开时运行循环。要停止实时预测,只需关闭图。使用drawnow在每次迭代结束时更新图。

创建图形窗口。首先调整窗口的大小,使其宽度增加一倍,并创建两个子图。若要防止坐标轴调整大小,请设置PositionConstraint财产“innerposition”

h =图;h.Position (3) = 2 * h.Position (3);ax₁=情节(1、2、1);ax2 =情节(1、2、2);ax2。PositionConstraint =“innerposition”

连续显示和分类图像与直方图的前五个预测。

ishandle (h)显示和分类图像我=快照(相机);image(ax1,im) im = imresize(im,inputSize);(标签,分数)=(净,im)进行分类;标题(ax₁,{char(标签),num2str (max(分数),2)});选择排名前五的预测[~, idx] =排序(得分,“下”);idx = idx (5: 1:1);scoreTop =分数(idx);classNamesTop =字符串(类(idx));绘制直方图barh (ax2 scoreTop)标题(ax2,“五大”)包含(ax2,“概率”) xlim(ax2,[0 1]) yticklabels(ax2,classNamesTop) ax2。YAxisLocation =“对”;drawnow结束

另请参阅

||

相关的话题

Baidu
map