此示例显示如何使用预先训练的深卷积神经网络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(得分),2)});
要持续地将图像分类,请在循环中包含先前的步骤。在图形打开时运行循环。为了停止实时预测,只需关闭数字即可。用drawn
在每次迭代结束时更新图。
h =图;尽管Ishandle(h)im =快照(相机);图像(IM)IM = IMResize(IM,InputSize);[标签,得分] =分类(网络,IM);标题({char(标签),num2str(max(得分),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结尾