主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

事前学習済みのネットワークを使用したイメージの特徴の抽出

この例では,事前学習済みの畳み込みニューラルネットワークから学習済みのイメージの特徴を抽出し,これらの特徴を使用してイメージ分類器に学習させる方法を説明します。特徴抽出は,事前学習済みの深いネットワークの表現能力を活用できる最も簡単で時間のかからない方法です。たとえば,抽出した特徴に対してfitcecoc(统计和机器学习的工具箱™)を使用してサポートベクターマシン(SVM)に学習させることができます。特徴抽出が必要とするものはデータを一巡する1つのパスのみであるため,ネットワークの学習を加速するためのGPUがない場合,これは適切な開始点となります。

データの読み込み

サンプルイメージを解凍してイメージデータストアとして読み込みます。imageDatastoreは,フォルダー名に基づいてイメージに自動的にラベルを付け,データをImageDatastoreオブジェクトとして格納します。イメージデータストアを使用すると,メモリに収まらないデータを含む大きなイメージデータを格納できます。データを70%の学習データと30%のテストデータに分割します。

解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”“IncludeSubfolders”,真的,“LabelSource”“foldernames”);[imdsTrain, imdsTest] = splitEachLabel (imd, 0.7,“随机”);

このとき,この非常に小さなデータセットには,55個の学習イメージと20個の検証イメージが格納されています。いくつかのサンプルイメージを表示します。

numTrainImages =元素个数(imdsTrain.Labels);idx = randperm (numTrainImages 16);数字i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

图中包含16个轴。Axes 1包含一个image类型的对象。Axes 2包含一个image类型的对象。Axes 3包含一个image类型的对象。Axes 4包含一个image类型的对象。Axes 5包含一个image类型的对象。Axes 6包含一个image类型的对象。Axes 7包含一个image类型的对象。Axes 8包含一个image类型的对象。Axes 9包含一个image类型的对象。 Axes 10 contains an object of type image. Axes 11 contains an object of type image. Axes 12 contains an object of type image. Axes 13 contains an object of type image. Axes 14 contains an object of type image. Axes 15 contains an object of type image. Axes 16 contains an object of type image.

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

事前学習済みのResNet-18ネットワークを読み込みます。深度学习工具箱模型ResNet-18网络サポートパッケージがインストールされていない場合,ダウンロード用リンクが表示されます。100年ResNet-18は万枚を超えるイメージについて学習済みであり,イメージを1000個のオブジェクトカテゴリ(キーボード,マウス,鉛筆,多くの動物など)に分類できます。結果として,このモデルは広範囲のイメージに対する豊富な特徴表現を学習しています。

网= resnet18
net = DAGNetwork with properties: Layers: [71x1 net.cnn.layer. layer] Connections: [78x2 table] InputNames: {'data'} OutputNames: {'ClassificationLayer_predictions'}

ネットワークアーキテクチャを解析します。最初の層であるイメージ入力層には,サイズが224 x 224 x 3の入力イメージが必要です。ここで3はカラーチャネルの数です。

inputSize = net.Layers (1) .InputSize;analyzeNetwork(净)

イメージの特徴の抽出

ネットワークにはサイズが224 x 224 x 3の入力イメージが必要ですが,イメージデータストアにあるイメージのサイズは異なります。学習およびテストイメージのサイズをネットワークへの入力前に自動的に変更するには,拡張イメージデータストアを作成して,目的のイメージサイズを指定し,これらのデータストアを激活の入力引数として使用します。

augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain);augimdsTest = augmentedImageDatastore (inputSize (1:2), imdsTest);

ネットワークは,入力イメージの階層表現を構築します。深い層には,初期の層の低レベルの特徴を使用して構築された,より高レベルの特徴が含まれます。学習イメージとテストイメージの特徴表現を取得するには,ネットワークの最後のグローバルプーリング層激活“pool5”,を使用します。グローバルプーリング層は,すべての空間位置に対して入力の特徴をプーリングします。512年合計で個の特徴が得られます。

层=“pool5”;featuresTrain =激活(净、augimdsTrain层,“OutputAs”“行”);featuresTest =激活(净、augimdsTest层,“OutputAs”“行”);谁featuresTrain
名称大小字节类属性特性55x512 112640单

学習データおよびテストデータからクラスラベルを抽出します。

YTrain = imdsTrain.Labels;欧美= imdsTest.Labels;

イメージ分類器のあてはめ

学習イメージから抽出された特徴を予測子変数として使用し,fitcecoc(统计和机器学习的工具箱)を使用してマルチクラスサポートベクターマシン(SVM)をあてはめます。

分类器= fitcecoc (featuresTrain YTrain);

テストイメージの分類

テストイメージから抽出された特徴を使用する学習済みのSVMモデルで,テストイメージを分類します。

YPred =预测(分类器,featuresTest);

4個のサンプルテストイメージと,その予測ラベルを表示します。

Idx = [1 5 10 15];数字i = 1:numel(idx) subplot(2,2,i) i = readimage(imdsTest,idx(i));标签= YPred (idx (i));imshow (I)标题(char(标签)结束

图中包含4个轴。标题为MathWorks Cap的轴1包含一个类型为image的对象。标题为MathWorks Cube的轴2包含一个类型为image的对象。标题为MathWorks Playing Cards的Axes 3包含一个类型为image的对象。标题为MathWorks螺丝刀的轴4包含一个类型为image的对象。

テストセットに対する分類精度を計算します。精度とは,ネットワークによって予測が正しく行われるラベルの割合です。

精度=平均值(YPred == YTest)
精度= 1

浅い特徴での分類器の学習

ネットワークの初期の層から特徴を抽出し,これらの特徴について分類器に学習させることもできます。通常,初期の層ではより少数の浅い特徴が抽出され,空間分解能が高く,活性化の合計数が大きくなります。“res3b_relu”層から特徴を抽出します。128年これは個の特徴を出力する最後の層であり,活性化の空間サイズは28行28列になります。

层=“res3b_relu”;featuresTrain =激活(净、augimdsTrain层);featuresTest =激活(净、augimdsTest层);谁featuresTrain
Name Size Bytes Class Attributes feature

この例の最初の部分で使用した抽出された特徴は,グローバルプーリング層によってすべての空間位置に対してプーリングされています。初期の層で特徴を抽出する際に同じ結果を得るには,すべての空間位置に対して活性化を手動で平均化します。N——- - - - - -CNは観測値の数でCは特徴の数)の形式で特徴を取得するには,大きさが1の次元を削除し転置します。

featuresTrain = squeeze(mean(featuresTrain,[1 2]))';featuresTest = squeeze(mean(featuresTest,[1 2]))';谁featuresTrain
名称大小字节类属性特征55x128 28160单

浅い特徴についてSVM分類器に学習させます。テスト精度を計算します。

分类器= fitcecoc (featuresTrain YTrain);YPred =预测(分类器,featuresTest);精度=平均值(YPred == YTest)
精度= 0.9500

学習済みのSVMはいずれも精度が高くなります。特徴抽出を使用しても十分な精度が得られない場合,代わりに転移学習を試してください。例については,新しいイメージを分類するための深層学習ネットワークの学習を参照してください。事前学習済みのネットワークの一覧と比較については,事前学習済みの深層ニューラルネットワークを参照してください。

参考

(统计学和机器学习工具箱)|

関連するトピック