主要内容

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

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

この例では,事前学習済みの畳み込みニューラルネットワークから学習済みのイメージの特徴を抽出し,これらの特徴を使用してイメージ分類器に学習させる方法を説明します。特徴抽出は,事前学習済みの深いネットワークの表現能力を活用できる最も簡単で時間のかからない方法です。たとえば,抽出した特徴に対して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(我)结束

图包含16个轴。轴1包含类型图像的对象。轴2包含类型图像的对象。轴3包含类型图像的对象。轴4包含类型图像的对象。轴5包含类型图像的对象。轴6包含类型图像的对象。轴7包含类型图像的对象。轴8包含类型图像的对象。轴9包含类型图像的对象。 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'}

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

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帽的轴1包含类型图像的对象。带有标题Mathworks Cube的轴2包含类型图像的对象。带有标题Mathworks扑克牌的轴3包含类型图像的对象。带有标题Mathworks螺丝刀的轴4包含类型图像的对象。

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

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

参考

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

関連するトピック