使用深度学习对网络摄像头图像进行分类
这个例子展示了如何使用预先训练好的深度卷积神经网络GoogLeNet对来自网络摄像头的图像进行实时分类。
使用MATLAB®,一个简单的网络摄像头,和一个深度神经网络来识别周围的物体。这个例子使用了GoogLeNet,这是一种预先训练好的深度卷积神经网络(CNN或ConvNet),它已经对超过100万张图像进行了训练,可以将图像分为1000个对象类别(例如键盘、咖啡杯、铅笔和许多动物)。你可以下载GoogLeNet,用MATLAB连续实时处理相机图像。
GoogLeNet已经为广泛的图像学习了丰富的特征表示。它将图像作为输入,并为图像中的对象提供一个标签,以及每个对象类别的概率。你可以用周围的物体做实验,看看GoogLeNet对图像的分类有多准确。要了解更多关于网络对象分类的信息,你可以实时显示排名前五的班级的分数,而不仅仅是最终的班级决定。
加载摄像机和预训练网络
连接到摄像头并加载预先训练好的GoogLeNet网络。在这一步你可以使用任何预先训练好的网络。该示例需要USB网络摄像头的MATLAB支持包和深度学习金宝app工具箱™模型为GoogLeNet网络.如果您没有安装所需的支持包,则该软件提供下载链接。金宝app
摄像头=网络摄像头;Net = googlenet;
如果要再次运行示例,请首先运行该命令清晰的相机
在哪里相机
是与网络摄像头的连接。否则,您将看到一个错误,因为您无法创建到同一网络摄像头的另一个连接。
从相机中分类快照
要对图像进行分类,必须根据网络的输入大小调整图像的大小。的前两个元素InputSize
网络图像输入层的属性。图像输入层是网络的第一层。
inputSize = net.Layers(1).InputSize(1:2)
inputSize = 224 224
显示带有预测标签及其概率的来自摄像机的图像。在调用之前,必须将图像大小调整为网络的输入大小分类
.
图im =快照(相机);image(im) im = imresize(im,inputSize);[label,score] = category (net,im);标题({char(标签),num2str (max(分数),2)});
连续分类相机图像
为了连续地对来自相机的图像进行分类,将前面的步骤包含在一个循环中。在图形打开时运行循环。要停止实时预测,只需关闭图形。使用drawnow
在每次迭代结束时更新图形。
H =数字;而Ishandle (h) im =快照(相机);image(im) im = imresize(im,inputSize);[label,score] = category (net,im);标题({char(标签),num2str (max(分数),2)});drawnow结束
显示顶部预测
预测的类别可以迅速变化。因此,将排名靠前的预测放在一起展示是很有帮助的。您可以通过绘制具有最高预测分数的类别来显示前五个预测及其概率。
对来自相机的快照进行分类。显示带有预测标签及其概率的来自摄像机的图像。方法显示前五种预测的概率的直方图分数
的输出分类
函数。
创建图形窗口。首先,将窗口大小调整为宽度的两倍,并创建两个子图。
H =数字;h.位置(3)= 2*h.位置(3);Ax1 = subplot(1,2,1);Ax2 = subplot(1,2,2);
在左侧子图中,将图像和分类一起显示。
Im =快照(相机);image(ax1,im) im = imresize(im,inputSize);[label,score] = category (net,im);标题(ax₁,{char(标签),num2str (max(分数),2)});
通过选择得分最高的课程,选择排名前五的预测。
[~,idx] = sort(分数,“下”);Idx = Idx (5:-1:1);classes = net.Layers(end).Classes;classNamesTop = string(类(idx));scoreTop = score(idx);
以直方图的形式显示前五个预测。
barh(ax2,scoreTop) xlim(ax2,[0 1]) title(ax2, [0 1])“五大”)包含(ax2,“概率”) yticklabels(ax2,classNamesTop)YAxisLocation =“对”;
连续分类图像和显示顶部预测
为了对来自相机的图像进行连续分类并显示最高的预测,在循环中包含前面的步骤。在图形打开时运行循环。要停止实时预测,只需关闭图形。使用drawnow
在每次迭代结束时更新图形。
创建图形窗口。首先调整窗口的大小,使其宽度为原来的两倍,并创建两个子图。若要防止轴调整大小,请设置PositionConstraint
财产“innerposition”
.
H =数字;h.位置(3)= 2*h.位置(3);Ax1 = subplot(1,2,1);Ax2 = subplot(1,2,2);ax2。PositionConstraint =“innerposition”;
连续显示和分类图像与前五个预测的直方图一起。
而ishandle (h)显示和分类图像Im =快照(相机);image(ax1,im) im = imresize(im,inputSize);[label,score] = category (net,im);标题(ax₁,{char(标签),num2str (max(分数),2)});选择前五个预测[~,idx] = sort(分数,“下”);Idx = Idx (5:-1:1);scoreTop = score(idx);classNamesTop = string(类(idx));绘制直方图barh (ax2 scoreTop)标题(ax2,“五大”)包含(ax2,“概率”) xlim(ax2,[0 1]) yticklabels(ax2,classNamesTop) ax2。YAxisLocation =“对”;drawnow结束