主要内容

使用深度学习分类摄像头图像

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

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

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

加载摄像机和预训练网络

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

相机=摄像头;网= googlenet;

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

从相机对快照进行分类

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

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

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

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

连续分类图像从相机

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

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

显示前预测

预测的类可以迅速改变。因此,将最热门的预测一起显示是很有帮助的。您可以通过绘制预测得分最高的类来显示前5个预测及其概率。

对相机上的快照进行分类。显示来自相机的图像与预测标签及其概率。使用。显示前5个预测的概率的直方图分数的输出分类函数。

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

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);

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

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”

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

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

另请参阅

||

相关的话题