ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

GoogLeNet を使用したイメージの分類

この例では、事前学習済みの深層畳み込みニューラル ネットワーク GoogLeNet を使用してイメージを分類する方法を説明します。

GoogLeNet は、100 万枚を超えるイメージで学習しており、イメージを 1000 個のオブジェクト カテゴリ (キーボード、マグ カップ、鉛筆、多くの動物など) に分類できます。このネットワークは広範囲にわたるイメージについての豊富な特徴表現を学習しています。このネットワークは入力としてイメージを取り、イメージ内のオブジェクトのラベルを各オブジェクト カテゴリの確率と共に出力します。

事前学習済みのネットワークの読み込み

事前学習済みの GoogLeNet ネットワークを読み込みます。イメージ分類用の異なる事前学習済みネットワークのを読み込むこともできます。この手順には、Deep Learning Toolbox™ Model for GoogLeNet Network サポート パッケージが必要です。必要なサポート パッケージがインストールされていない場合、ダウンロード用リンクが表示されます。

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)))
    'speedboat'
    'window screen'
    'isopod'
    'wooden spoon'
    'lipstick'
    'drake'
    'hyena'
    'dumbbell'
    'strawberry'
    'custard apple'

イメージの読み取りとサイズ変更

分類するイメージを読み取って表示します。

I = imread('peppers.png');
figure
imshow(I)

イメージのサイズを表示します。このイメージは 384 x 512 ピクセルで 3 つのカラー チャネル (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 を使用してイメージを分類し、クラス確率を計算します。このネットワークはイメージをピーマンとして正しく分類します。分類用のネットワークは、イメージに複数のオブジェクトが含まれていても各入力イメージに対して 1 つのラベルを出力するように学習されています。

[label,scores] = classify(net,I);
label
label = categorical
     bell pepper 

イメージを、予測ラベルとイメージがそのラベルを持つ予測確率と共に表示します。

figure
imshow(I)
title(string(label) + ", " + num2str(100*scores(classNames == label),3) + "%");

上位の予測の表示

上位 5 つの予測ラベルとそれらに対応する確率をヒストグラムとして表示します。ネットワークはイメージを非常に多くのオブジェクト カテゴリに分類しますが、多くのカテゴリは似ているため、ネットワークを評価するときは、通常、上位 5 つの精度を考慮します。このネットワークは高い確率でこのイメージをピーマンとして分類します。

[~,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.

参考

| | | |

関連するトピック