这个例子展示了如何使用预处理的深度卷积神经网络GoogLeNet对图像进行分类。
GoogLeNet已经训练了100多万张图像,可以将图像分类为1000个对象类别(如键盘、咖啡杯、铅笔和许多动物)。该网络已经学习了丰富的特征表示为广泛的图像。该网络以图像作为输入,然后输出图像中对象的标签以及每种对象类别的概率。
加载预先训练好的GoogLeNet网络。这一步需要深度学习工具箱™模型GoogLeNet网络金宝app支持包。如果您没有安装所需的支持包,则该软件提供一个下载链接。金宝app
您也可以选择加载不同的预训练网络进行图像分类。要尝试不同的预训练网络,请在MATLAB®中打开此示例并选择不同的网络。例如,你可以试试squeezenet
网络的速度甚至比googlenet
.您可以在其他经过预处理的网络上运行此示例。有关所有可用网络的列表,请参见负载Pretrained网络.
网=googlenet;
要分类的图像的大小必须与网络的输入大小相同。对于GoogLeNet,第一个元素层
网络的属性是图像输入层。网络输入大小为InputSize
属性的图像输入层。
.InputSize inputSize = net.Layers (1)
inputSize =1×3224 224 3
最后一个元素层
属性是分类输出层。的一会
属性包含网络学习的类的名称。在总共1000个类名中查看10个随机类名。
一会= net.Layers .ClassNames(结束);numClasses =元素个数(类名);disp(类名(randperm (numClasses 10)))
“蝴蝶”“蛋酒”“菠萝蜜”“城堡”“睡袋”“红脚”“创可贴”“炒锅”“安全带”“橙色”
读取并显示您想要分类的图像。
我= imread (“peppers.png”);图imshow(我)
显示图像的大小。图像是384 × 512像素,有三个颜色通道(RGB)。
大小(我)
ans =1×3384 512 3
使用,将图像的大小调整为网络的输入大小imresize
.这个调整稍微改变了图像的长宽比。
我= imresize(我inputSize (1:2));图imshow(我)
根据您的应用程序,您可能需要以不同的方式调整图像的大小。例如,您可以使用以下方法裁剪图像的左上角我(1:inputSize (1), 1: inputSize (2):)
.如果您有图像处理工具箱™,那么您可以使用imcrop
函数。
分类图像和计算类概率使用分类
.网络正确地将图像分类为甜椒。一个分类网络被训练为每个输入图像输出一个标签,即使图像包含多个对象。
(标签,分数)=分类(净,我);标签
标签=分类甜椒
显示带有预测标签的图像以及该图像具有该标签的预测概率。
图imshow(I)标题(字符串(标签)+”、“+ num2str(100*scores(classNames == label),3) +“%”);
以直方图的形式显示前5个预测标签及其相关概率。由于网络将图像分类为许多物体类别,而且许多类别是相似的,所以在评估网络时通常考虑前5个精度。网络以很高的概率将图像分类为甜椒。
[~, idx] =排序(分数,“下”);idx = idx (5: 1:1);classNamesTop = net.Layers(结束).ClassNames (idx);scoresTop =分数(idx);图barh(scoresTop) xlim([0 1])标题(“5大预言”)包含(“概率”) yticklabels (classNamesTop)
Szegedy, Christian, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke和Andrew Rabinovich。“深度旋转。”在计算机视觉与模式识别IEEE会议论文集1 - 9页。2015.
[2]BVLC GoogLeNet模型.https://github.com/BVLC/caffe/tree/master/models/bvlc_googlenet
DAGNetwork
|googlenet
|分类
|预测
|squeezenet