此示例显示如何使用预先磨碎的深卷积神经网络Googlenet实时对网络摄像头进行分类图像。
使用Matlab®,简单的网络摄像头和深度神经网络来识别周围环境中的对象。此示例使用Googlenet,这是超过一百万个图像培训的预制深卷积神经网络(CNN或ConvNet),并且可以将图像分类为1000个对象类别(例如键盘,咖啡杯,铅笔和许多动物)。您可以下载Googlenet并使用MATLAB实时连续处理相机图像。
Googlenet已经了解了各种图像的丰富功能表示。它将图像作为输入,为图像中的对象提供标签以及每个对象类别的概率。您可以在周围环境中进行实验,以查看Googlenet如何分类图像。要了解有关网络对象分类的更多信息,您可以实时显示前五个类的分数,而不是最终的类决策。
连接到相机并加载佩带的Googlenet网络。您可以在此步骤中使用任何预磨损网络。该示例需要MATLAB支持包,用于USB网络摄像头,深度金宝app学习工具箱™模型对于Googlenet网络。如果未安装所需的支持包,则软件提供了下载链接。金宝app
Camera =网络摄像头;net = googlenet;
如果要再次运行该示例,请首先运行命令清晰的相机
在哪里相机
是与网络摄像头的连接。否则,您会看到错误,因为您无法创建与同一网络摄像头的另一个连接。
要对图像进行分类,必须将其调整为网络的输入大小。获得前两个要素输入
网络图像输入层的属性。图像输入层是网络的第一层。
InputSize = Net.Layers(1).InputSize(1:2)
InputSize = 224 224
使用预测标签及其概率从相机显示图像。在呼叫之前,必须将图像调整为网络的输入大小分类
。
图IM =快照(摄像机);图像(IM)IM = IMResize(IM,InputSize);[标签,得分] =分类(网络,IM);标题({char(标签),num2str(max(score),2)});
要持续地将图像分类为循环中的前一步骤。在图形打开时运行循环。要停止现场预测,只需关闭数字即可。用drawn
在每次迭代结束时更新图。
h =图;尽管Ishandle(h)im =快照(相机);图像(IM)IM = IMResize(IM,InputSize);[标签,得分] =分类(网络,IM);标题({char(标签),num2str(max(score),2)});drawn结尾
预测的类可以迅速改变。因此,将顶部预测一起显示顶部预测可以有助于。您可以通过绘制具有最高预测分数的类来显示前五个预测及其概率。
从相机上分类快照。使用预测标签及其概率从相机显示图像。通过使用通过使用前五个预测的概率显示直方图分数
输出分类
功能。
创建图形窗口。首先,调整窗口的大小以具有两倍的宽度,并创建两个子图。
h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);
在左侧子图中,将图像和分类一起显示在一起。
IM =快照(摄像机);图像(AX1,IM)IM = IMRESIZE(IM,INPUTSIZE);[标签,得分] =分类(网络,IM);标题(AX1,{CHAR(标签),NUM2STR(MAX(得分),2)});
通过选择具有最高分的类来选择前五个预测。
[〜,IDX] =排序(得分,“下降”);IDX = IDX(5:-1:1);classes = net.layers(结束).classes;classnamestop = string(类(idx));scoretop =得分(Idx);
将前五个预测显示为直方图。
Barh(Ax2,Scoretop)XLIM(AX2,[0 1])标题(AX2,'前5')Xlabel(AX2,'可能性')YTicklabels(AX2,ClassNamestop)Ax2.yaxisLocation ='对';
要连续地将图像从相机分类并显示顶部预测,请包括循环内部的上一步。在图形打开时运行循环。要停止现场预测,只需关闭数字即可。用drawn
在每次迭代结束时更新图。
创建图形窗口。首先调整窗口的大小,宽度两倍,并创建两个子图。防止轴调整大小,设置位置混合物
财产'InnerPosition'
。
h =图;H.Position(3)= 2 * H.Position(3);AX1 =子图(1,2,1);AX2 =子图(1,2,2);Ax2.PositionConstraint =.'InnerPosition';
连续显示和分类图像与前五个预测的直方图。
尽管ishandle(h)%显示并分类图像IM =快照(摄像机);图像(AX1,IM)IM = IMRESIZE(IM,INPUTSIZE);[标签,得分] =分类(网络,IM);标题(AX1,{CHAR(标签),NUM2STR(MAX(得分),2)});%选择前五个预测[〜,IDX] =排序(得分,“下降”);IDX = IDX(5:-1:1);scoretop =得分(Idx);classnamestop = string(类(idx));%绘制直方图Barh(Ax2,Scoretop)标题(AX2,'前5')Xlabel(AX2,'可能性')XLIM(AX2,[0 1])YTicklabels(AX2,ClassNamestop)Ax2.yaxisLocation ='对';drawn结尾