使用 googlenet 对图像进行分类 -凯发k8网页登录
此示例说明如何使用预训练的深度卷积神经网络 googlenet 对图像进行分类。
googlenet 已经对超过一百万个图像进行了训练,可以将图像分为 1000 个对象类别(例如键盘、咖啡杯、铅笔和多种动物)。该网络已基于大量图像学习了丰富的特征表示。网络以图像作为输入,然后输出图像中对象的标签以及每个对象类别的概率。
加载预训练网络
加载预训练的 googlenet 网络。此步骤需要 deep learning toolbox™ model for googlenet network 支持包。如果没有安装所需的支持包,软件会提供下载链接。
您还可以选择加载不同的预训练网络进行图像分类。要尝试不同的预训练网络,请在 matlab® 中打开此示例并选择其他网络。例如,您可以尝试 squeezenet
,这是一个比 googlenet
还要快的网络。您可以使用其他预训练网络运行此示例。有关所有可用网络的列表,请参阅加载预训练的神经网络。
net = googlenet;
要分类的图像的大小必须与网络的输入大小相同。对于 googlenet,网络的 layers
属性的第一个元素是图像输入层。网络输入大小是图像输入层的 inputsize
属性。
inputsize = net.layers(1).inputsize
inputsize = 1×3
224 224 3
layers
属性的最后一个元素是分类输出层。该层的 classnames
属性包含网络学习的类的名称。查看总共 1000 个类名称中的 10 个随机类名称。
classnames = net.layers(end).classnames; numclasses = numel(classnames); disp(classnames(randperm(numclasses,10)))
'papillon' 'eggnog' 'jackfruit' 'castle' 'sleeping bag' 'redshank' 'band aid' 'wok' 'seat belt' 'orange'
读取图像并调整图像大小
读取并显示要分类的图像。
i = imread('peppers.png');
figure
imshow(i)
显示图像的大小。图像为 384×512 像素,并且具有三个颜色通道 (rgb)。
size(i)
ans = 1×3
384 512 3
使用 imresize
将图像大小调整为网络的输入大小。调整大小会略微更改图像的纵横比。
i = imresize(i,inputsize(1:2)); figure imshow(i)
根据您的应用,您可能希望以不同方式调整图像大小。例如,您可以使用 i(1:inputsize(1),1:inputsize(2),:)
剪去图像的左上角。如果您有 image processing toolbox™,则可以使用 imcrop
函数。
对图像进行分类
使用 classify
对图像进行分类并计算类概率。网络正确地将图像分类为甜椒。用于分类的网络训练为针对每个输入图像输出单个标签,即使图像包含多个对象时也是如此。
[label,scores] = classify(net,i); label
label = categorical
bell pepper
显示图像及预测的标签,以及具有该标签的图像的预测概率。
figure imshow(i) title(string(label) ", " num2str(100*scores(classnames == label),3) "%");
显示排名靠前的预测值
显示排名前五的预测标签,并以直方图形式显示它们的相关概率。由于网络将图像分类为如此多的对象类别,并且许多类别是相似的,因此在评估网络时通常会考虑准确度排名前五的几个类别。网络以高概率将图像分类为甜椒。
[~,idx] = sort(scores,'descend'); idx = idx(5:-1:1); classnamestop = net.layers(end).classnames(idx); scorestop = scores(idx); figure barh(scorestop) xlim([0 1]) title('top 5 predictions') xlabel('probability') yticklabels(classnamestop)
参考
[1] szegedy, christian, wei liu, yangqing jia, pierre sermanet, scott reed, dragomir anguelov, dumitru erhan, vincent vanhoucke, and andrew rabinovich. "going deeper with convolutions." in proceedings of the ieee conference on computer vision and pattern recognition, pp. 1-9. 2015.
[2] bvlc googlenet model.
另请参阅
| | | |