Main Content

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

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

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

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

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

イメージ分類用の異なる事前学習済みネットワークを読み込むこともできます。別の事前学習済みネットワークを試すには、この例を MATLAB® で開き、別のネットワークを選択します。たとえば、googlenetよりも高速なネットワークであるsqueezenetを試すことができます。この例は、他の事前学習済みネットワークを使用して実行することもできます。使用可能なすべてのネットワークについては、事前学習済みのネットワークの読み込みを参照してください。

net =googlenet;

分類するイメージのサイズは、ネットワークの入力サイズと同じでなければなりません。GoogLeNet では、ネットワークのLayersプロパティの最初の要素はイメージ入力層です。ネットワーク入力サイズはイメージ入力層のInputSizeプロパティです。

inputSize = net.Layers(1).InputSize
inputSize =1×3224 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 x 512 ピクセルで 3 つのカラー チャネル (RGB) があります。

size(I)
ans =1×3384 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 =categoricalbell 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." InProceedings of the IEEE conference on computer vision and pattern recognition, pp. 1-9. 2015.

参考

||||

関連するトピック