主要内容

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

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

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

データの読み込み

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

解压缩('merchdata.zip');imds = imageageatastore(“MerchData”'insertumbfolders',真的,'labelsource'“foldernames”);[imdsTrain, imdsTest] = splitEachLabel (imd, 0.7,'随机');

このとき,この非常に小さなデータセットは,55个の学习イメージ20个の検证イメージが纳れていますます表示れをを表示表示ますますます。

numtrainimages = numel(imdstrain.labels);idx = randperm(numtrainimages,16);数字i = 1:16 subplot(4,4,i) i = readimage(imdsTrain,idx(i));imshow(我)结束

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

事前学習済みの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'}

。

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(标签)结束

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

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

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

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

层=“res3b_relu”;featuresTrain =激活(净、augimdsTrain层);featuresTest =激活(净、augimdsTest层);谁featuresTrain
名称大小字节类属性属性FeatureStrain 28x28x128x55 22077440单个

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

FeatureStrain =挤压(平均值(featurestrain,[1 2])';FeatureStest =挤压(平均值(FeatureStest,[1 2])';谁featuresTrain
名称大小字节类属性属性FeatureStrain 55x128 28160单一

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

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

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

参考

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

関連するトピック