使用GoogLeNet分类图像
这个例子展示了如何使用预训练的深度卷积神经网络GoogLeNet对图像进行分类。
GoogLeNet已经训练了超过一百万张图像,可以将图像分为1000个对象类别(如键盘,咖啡杯,铅笔和许多动物)。该网络已经学习了大量图像的丰富特征表示。该网络以图像作为输入,然后输出图像中对象的标签以及每个对象类别的概率。
负载预训练网络
加载预训练的GoogLeNet网络。这一步需要深度学习工具箱™模型为GoogLeNet网络万博1manbetx支持包。如果您没有安装所需的支持包,则该软件提供下载链接。万博1manbetx
您还可以选择加载不同的预训练网络进行图像分类。要尝试不同的预训练网络,请在MATLAB®中打开此示例并选择不同的网络。例如,你可以试试squeezenet
这是一个比美国更快的网络googlenet
。您可以将此示例与其他预训练的网络一起运行。有关所有可用网络的列表,请参见负载预训练神经网络。
网=
googlenet;
您想要分类的图像必须与网络的输入大小相同。的第一个元素层
网络的属性是图像输入层。网络输入大小为InputSize
图像输入层的属性。
inputSize = net.Layers(1).InputSize
inputSize =1×3224 224 3
的最后一个元素层
属性是分类输出层。的一会
这一层的属性包含了网络学习到的类的名称。查看1000个随机类名中的10个。
classNames = net.Layers(end).ClassNames;numClasses = nummel (classNames);disp(类名(randperm (numClasses 10)))
'papillon' 'egg gnog' 'jackfruit' 'castle' '睡袋' 'redshank' 'Band Aid' '炒锅' '安全带' 'orange' '
读取和调整图像大小
阅读并展示你想要分类的图像。
I = imread()“peppers.png”);图imshow(我)
显示图像的大小。该图像是384 × 512像素,有三个颜色通道(RGB)。
大小(我)
ans =1×3384 512 3
将图像大小调整为网络的输入大小imresize
。这种大小调整稍微改变了图像的宽高比。
I = imresize(I,inputSize(1:2));图imshow(我)
根据您的应用程序,您可能希望以不同的方式调整图像的大小。例如,您可以使用我(1:inputSize (1), 1: inputSize (2):)
。如果您有图像处理工具箱™,那么您可以使用imcrop
函数。
图像的分类
对图像进行分类,并使用分类
。网络正确地将图像分类为甜椒。训练分类网络为每个输入图像输出单个标签,即使图像包含多个对象。
[label,scores] = classification (net,I);标签
标签=分类甜椒
显示具有预测标签的图像以及具有该标签的图像的预测概率。
图imshow(I) title(string(label) +”、“+ num2str(100*scores(classNames == label),3) +“%”);
显示热门预测
以直方图的形式显示前五个预测标签及其相关的概率。由于网络将图像分类为如此多的对象类别,并且许多类别是相似的,因此在评估网络时通常考虑前五种准确性。该网络以高概率将图像分类为甜椒。
[~,idx] = sort(分数)“下”);Idx = Idx (5:-1:1);classNamesTop = net.Layers(end).ClassNames(idx);scoresTop = scores(idx);figure bar (scoresTop) xlim([0 1]) title(“五大预测”)包含(“概率”) yticklabels (classNamesTop)
参考文献
[1] szgedy, Christian, Liu Wei, Jia Yangqing, 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